nginx 涉及到两个账户,一个是 nginx 的运行账户,一个是 php-fpm 的运行账户。如果访问的是一个静态文件,则只需要 nginx 的运行账户对文件具有读取权限;而如果访问的是一个 php 文件,则首先需要 nginx 的运行账户对文件有读取权限,读取到文件后发现是一个php 文件,则转发给 php-fpm,此时则需要 php-fpm 账户对文件具有读取权限。
一。研究发现的结论
1. linux 下,要读取一个文件,首先需要具有对文件所在目录的执行权限,然后需要对文件的读取权限。
2. php 文件的执行不需要文件的执行权限,只需要 nginx 和 php-fpm 运行账户的读取权限。
3. 上传木马后,能不能列出一个目录的内容,跟 php-fpm 的运行账户对目录的读取权限有关。
4. 木马执行命令的权限跟 php-fpm 的账户权限有关。
5. 如果木马要执行命令,需要 php-fpm 的账户对相应的 sh 有执行权限。
6. 要读取一个目录内的文件,是不需要对目录有读取权限的,只需要对目录有执行权限。
二。Nginx服务器涉及到的安全配置
以下内容需要积分高于 1 才可浏览
本帖隐藏的内容
1. Nginx.conf 的配置2. php-fpm.conf 的配置
3. nginx 和 php-fpm 的运行账户对磁盘的权限配置
4. php.ini 的配置
三。常见需要配置的操作方法
1. 禁止一个目录的访问
示例:禁止访问 path 目录下的任何内容(注意:后面的 / 一定要加)
location ^~ /path/ {
deny all;
}
2. 禁止某个目录下 php 文件的访问及执行
示例:禁止单个目录下的 php 文件访问和执行
location ~ /data/.*.php$ {
deny all;
}
示例:禁止多个目录下 php 文件的访问执行
location ~ /(data|temp|img|m)/.*.php {
deny all;
}
3. 禁止 IP 的访问
示例:禁止 IP 段访问的写法
deny 10.0.0.0/24;
示例:只允许某个 IP 或某个 IP 段用户访问,其它的用户全都禁止
allow 120.24.0.0/14; allow 10.0.0.0/24; deny all;
四。需要解决的常见问题
1. 让木马上传后不能执行
针对上传目录,在nginx配置文件中加入配置,使此目录无法解析php。
2. 让木马执行后看不到非网站目录文件
取消 php-fpm 运行账户对于其他目录的读取权限。
3. 木马执行后命令不能执行
取消 php-fpm 账户对于 sh 的执行权限。
4. 禁止 php-fpm、nginx 等账号可以登陆 shell
创建用户时在后面加上 -s /sbin/nologin