文中的情形是利用PHP的漏洞远程执行代码下载文件写入服务器并执行.
而正常状况下运行PHP的用户(通常就是Web服务器运行用户)对 Web目录是没有写权限的(除了缓存目录),而为了安全通常都用disable_functions在php.ini里禁用了PHP执行Shell的函数 (也就没法经过运行PHP WebShell回弹Shell执行Shell命令),另外open_basedir也会限制PHP的文件操做目录,明确隔离了Web目录和系统目录.
就算是缓存目录,通常也会配置为不解析PHP,因此即便上传PHP WebShell到缓存目录也没法执行.
若是你非要chmod -R 777 /var/www/html和容许PHP调用Shell命令,那只能说是本身的问题了.
安全的Web目录权限设置:
find -type d -exec chmod 755 {} \;
find -type f -exec chmod 644 {} \;
注意:Web目录用户不能是Web服务器运行用户,通常经过yum/apt-get安装服务的状况下是这样的.
编译安装LAMP服务的注意要本身新建用户并指定用户运行Apache或者Nginx.
在php.ini里禁用执行Shell的函数和限制PHP文件操做目录:
disable_functions = passthru,exec,system,shell_exec,chroot,chgrp,chown,proc_open,proc_get_status,ini_alter,ini_restore,ini_set,dl,pfsockopen,symlink,popen,putenv
open_basedir=/var/www/html/:/tmp/
更多"安全禁用函数"参考:
http://help.aliyun.com/manual?helpId=87
因 为默认状况下PHP的会话文件存放在/tmp下,上传的文件也会临时存放在/tmp下,因此须要open_basedir里设置了/tmp目录,不过不管 是会话文件存放目录仍是临时上传目录,均可以在php.ini里自定义,也能够为每一个虚拟主机进行自定义,隔离虚拟主机间的文件操做.
php