灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:2974回复:0

Nginx多站点防止跨目录浏览

楼主#
更多 发布于:2013-07-18 12:28
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中开机启动

喜欢0 评分0
游客

返回顶部