app
cache
config
lib
logs
public
|--index.php
只开放public目录给用户访问
nginx和php-fpm以www用户和用户组运行,www用户是被禁止登录的
drwxr-xr-x 6 www www 4096 Jan 31 21:03 cache
drwxr-xr-x 5 tomener tomener 4096 Aug 26 2015 app
因为static是静态文件目录,上传的文件会在这个目录里面,所以这个目录所有者和所属组是www,既然是用户上传的,所以要禁止执行这个目录下所有php文件
在nginx配置文件中加入
location ~ ^/static/.*\.php$
{
deny all;
}
disable_functions=passthru,exec,assert,system,chroot,chgrp,chown,shell_exec,proc_open,ini_restore,dl,readlink,symlink,popen,stream_socket_server,pfsockopen,putenv
有个问题,CGI模式(php-fpm)不会用这些函数,但是cli模式很可能用这些函数,怎么办,那就用不同的php配置文件呗,比如,默认都是用的/usr/local/php/lib/php.ini,我们在/usr/local/php/lib下面增加php-cli.ini那么cli模式会自动使用php-cli.ini这个配置文件
location /static/scan {
deny all;
return 403;
}