[网络安全] 网站安全配置优化 之 nginx

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;
}

 

如果没有加后面的 / ,任何开头为 “path” 的访问都会禁止,如:path/11.php 或 pathabc

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
posted @ 2021-02-20 17:44  代码堆里的看客  阅读(94)  评论(0编辑  收藏  举报