0x00 测试环境
把持系统:CentOS6.5
Web办事器:Nginx1.4.6
Php版本:Php5.4.26
0x01 Nginx介绍
nginx本身不克不及措置PHP,它只是个web办事器,当领遭到要求后,假定是php要求,则发给php诠释器措置,并把成果返回给客户端。nginx通常为把要求发fastcgi治理过程措置,fastcgi治理过程选择cgi子过程措置成果并返回被nginx。
nginx触及到两个账户,一个是nginx的运行账户,一个是php-fpm的运行账户。假定拜候的是一个静态文件,则只需要nginx的运行账户对文件具有读取权限;而假定拜候的是一个php文件,则起首需要nginx的运行账户对文件有读取权限,读取到文件后发现是一个php文件,则转发给php-fpm,此时则需要php-fpm账户对文件具有读取权限。
0x02 研究发现的结论
1. linux下,要读取一个文件,起首需要具有对文件地点文件夹的履行权限,然后需要对文件的读取权限。
2. php文件的履行不需要文件的履行权限,只需要nginx和php-fpm运行账户的读取权限。
3. 上传木马后,能不克不及列出一个文件夹的内容,跟php-fpm的运行账户对文件夹的读取权限有关。
4. 木马履行号令的权限跟php-fpm的账户权限有关。
5. 假定木马要履行号令,需要php-fpm的账户对响应的sh有履行权限。
6. 要读取一个文件夹内的文件,是不需要对文件夹有读取权限的,只需要对文件夹有履行权限。
0x03 Nginx办事器触及到的安然建设
1. Nginx.conf的建设
2. php-fpm.conf的建设
3. nginx和php-fpm的运行账户对磁盘的权限建设
4. Php.ini的建设
0x04 常见需要建设的把持编制
1. 避免一个目次的拜候
示例:避免拜候path目次
location ^~ /path {
deny all;
}
可以把path换成实际需要的目次,目次path后是不是带有"/",带"/"只避免拜候目次,不带"/"避免拜候目次中的文件;寄望要放在fastcgi建设之前。
2. 避免php文件的拜候及履行
示例:往掉落单个目次的PHP履行权限
location ~ /attachments/.*\.(php|php5)?$ {
deny all;
}
示例:往掉落多个目次的PHP履行权限
location ~
/(attachments|upload)/.*\.(php|php5)?$ {
deny all;
}
3. 避免IP的拜候
示例:避免IP段的写法:
deny 10.0.0.0/24;
示例:只承诺某个IP或某个IP段用户拜候,其它的用户全都避免
allow
x.x.x.x;
allow 10.0.0.0/24;
deny all;
0x05 需要解决的常见标题问题
1. 让木顿时传后不克不及履行
针对上传目次,在nginx建设文件中加进建设,使此目次没法解析php。
2. 让木马履行后看不到非网站目次文件
打消php-fpm运行账户对其他目次的读取权限。
3. 木马履行后号令不克不及履行
打消php-fpm账户对sh的履行权限。
4. 号令履行后权限不克不及太高
Php-fpm账户不要用root或加进root组。
nginx本身不克不及措置PHP,它只是个web办事器,当领遭到要求后,假定是php要求,则发给php诠释器措置,并把成果返回给客户端。nginx通常为把要求发fastcgi治理过程措置,fastcgi治理过程选择cgi子过程措置成果并返回被nginx。
0x06 Nginx安然建设方案
1. 点窜网站目次所有者为非php-fpm运行账户,此处点窜所有者为root。
号令:
chown -R root:root html/
2. 点窜nginx及php-fpm的运行账户及组为nobody
nginx.conf
Php-fpm.conf
3. 打消nobody对所有目次的的读取权限,然后添加对网站目次的读取权限
号令:
chmod o-r –R /
chmod o+r –R html/
4. 打消nobody对/bin/sh 的履行权限
chmod 776 /bin/sh
5. 确认网站目次对nobody的权限为可读可履行,对网站文件的权限为可读
6. 对上传目次或写进写文件的目次添加nobody的写进权限
7. 建设nginx.conf 对上传目次无php的履行权限
8. 建设nginx.conf避免拜候的文件夹,如后台,或限制拜候ip
9. 建设nginx.conf避免拜候的文件类型,如一些txt日记文件