Nginx多站点防止跨目录浏览
4605 点击·0 回帖
![]() | ![]() | |
![]() | Nginx跨站攻击很让人头疼,在多个网站运行的主机上如果攻破其中一个上传了类似webshell之类的木马程序后可以轻松浏览到相邻别的网站程序目录,由于nginx是后端FCGI程序处理php,统一设置open_basedir后会导致访问出现问题,只能通过每站分别处理的方式来设置。当然还有通过修改PHP程序等方式实现,贴上一个我目前正在使用的方法。
这种方式最好把网站集中到一个目录下,另外网站目录名字最好规范统一方便辨认。否则启动和维护起来非常麻烦容易混淆。 第一步修改php-fpm配置文件,为每个站点单独建立一个配置文件, cd /usr/loca/php/etc/ cp php-fpm.conf php-fpm-www.zhaoyi.info.conf 修改其中 Pid file <value name="pid_file">/usr/local/webserver/php/logs/php-fpm-www.zhaoyi.info.pid</value> Error log file <value name="error_log">/usr/local/webserver/php/logs/php-fpm-ww.zhaoyi.info.log</value> 以及 <value name="listen_address">/tmp/php-cgi-站点目录名.sock</value> 若使用TCP端口传输方式每个都使用单独的端口 <value name="max_children">4</value> 此处可根据主机情况来,配置点的就不需要开多了 第二步修改php-fpm启动脚本 cd /usr/local/php/sbin # vim /usr/local/sbin/php-fpm vhost=$2 ### php_fpm_BIN=/usr/local/bin/php-cgi php_fpm_CONF=/usr/local/etc/php-fpm-$vhost.conf ## php_fpm_PID=/usr/local/logs/php-fpm-$vhost.pid ### #php_opts=”–fpm-config $php_fpm_CONF” php_opts="-d open_basedir=/www/$vhost/ --fpm-config $php_fpm_CONF" #此处为网站目录 启动方式为php-fpm start www.zhaoyi.info 多个虚拟主机以此类推 第三步修改网站conf配置文件中 fastcgi_pass unix:/tmp/php-cgi-www.zhaoyi.info.sock; 要与php-fpm配置中的对应,tcp方式的启单独端口 OK,测试一下 /usr/local/php/sbin/php-fpm stop /usr/local/php/sbin/php-fpm start www.zhaoyi.info ps -ef | grep php中可以看到open_basedir=/www/www.zhaoyi.info就成功了 reload一下nginx的配置文件基本就可以实现各个主机隔离了。我用phpspy2010测试已经访问不到别的目录了 nginx配置文件最好也采用每个网站单独一个的方式统一放在vhosts下 为了方便启动php-fpm可以写个脚本一起启动 #!/bin/bash auto=$1 /bin/bash /usr/local/webserver/php/sbin/php-fpm $auto www.zhaoyi.info && /bin/bash /usr/local/webserver/php/sbin/php-fpm $auto www.xx.com && /bin/bash /usr/local/webserver/php/sbin/php-fpm $auto www.xxxx.com 保存为start.sh 开启sh start.sh start 关闭sh start.sh stop 在放入/etc/rc.local中开机启动 | |
![]() | ![]() |