admin 发表于 2023-3-2 19:25:52

Nginx服务器安全配置研究

<p></p>
<p>操作系统:CentOS6.5<br>
Web服务器:Nginx1.4.6<br>
Php版本:Php5.4.26</p>
<h2>Nginx介绍</h2>
<p><ahref="http://www.wangchao.info/tag/nginx">Nginx</a>本身不能处理PHP,它只是个web<ahref="http://www.wangchao.info/tag/server">服务器</a>,当接收到请求后,如果是php请求,则发给php解释器处理,并把结果返回给客户端。nginx一般是把请求发fastcgi管理进程处理,fastcgi管理进程选择cgi子进程处理结果并返回被nginx。</p>
<p>Nginx涉及到两个账户,一个是nginx的运行账户,一个是php-fpm的运行账户。如果访问的是一个静态文件,则只需要nginx的运行账户对文 件具有读取权限;而如果访问的是一个php文件,则首先需要nginx的运行账户对文件有读取权限,读取到文件后发现是一个php文件,则转发给php- fpm,此时则需要php-fpm账户对文件具有读取权限。</p>
<h2>研究发现的结论</h2>
<p>1. linux下,要读取一个文件,首先需要具有对文件所在文件夹的执行权限,然后需要对文件的读取权限。<br>
2. php文件的执行不需要文件的执行权限,只需要nginx和php-fpm运行账户的读取权限。<br>
3. 上传木马后,能不能列出一个文件夹的内容,跟php-fpm的运行账户对文件夹的读取权限有关。<br>
4. 木马执行命令的权限跟php-fpm的账户权限有关。<br>
5. 如果木马要执行命令,需要php-fpm的账户对相应的sh有执行权限。<br>
6. 要读取一个文件夹内的文件,是不需要对文件夹有读取权限的,只需要对文件夹有执行权限。</p>
<h2>Nginx服务器涉及到的安全配置</h2>
<p>1. Nginx.conf的配置<br>
2. php-fpm.conf的配置<br>
3. nginx和php-fpm的运行账户对磁盘的权限配置<br>
4. Php.ini的配置</p>
<h2>常见需要配置的操作方法</h2>
<p>1. 禁止一个目录的访问<br>
示例:禁止访问path目录<br>
location ^~ /path {<br>
deny all;<br>
}<br>
可以把path换成实际需要的目录,目录path后是否带有”/”,带”/”只禁止访问目录,不带”/”禁止访问目录中的文件;注意要放在fastcgi配置之前。</p>
<p>2. 禁止php文件的访问及执行<br>
示例:去掉单个目录的PHP执行权限<br>
location ~ /attachments/.*\.(php|php5)?$ {<br>
deny all;<br>
}<br>
示例:去掉多个目录的PHP执行权限<br>
location ~<br>
/(attachments|upload)/.*\.(php|php5)?$ {<br>
deny all;<br>
}<br>
3. 禁止IP的访问<br>
示例:禁止IP段的写法:<br>
deny 10.0.0.0/24;<br>
示例:只允许某个IP或某个IP段用户访问,其它的用户全都禁止<br>
allow<br>
x.x.x.x;<br>
allow 10.0.0.0/24;<br>
deny all;</p>
<h2>需要解决的常见问题</h2>
<p>1. 让木马上传后不能执行<br>
针对上传目录,在nginx配置文件中加入配置,使此目录无法解析php。<br>
2. 让木马执行后看不到非网站目录文件<br>
取消php-fpm运行账户对于其他目录的读取权限。<br>
3. 木马执行后命令不能执行<br>
取消php-fpm账户对于sh的执行权限。<br>
4. 命令执行后权限不能过高<br>
Php-fpm账户不要用root或者加入root组。</p>
<h2>Nginx安全配置方案</h2>
<p><strong>1. 修改网站目录所有者为非php-fpm运行账户,此处修改所有者为root。</strong></p>
<p><strong>命令:</strong><br>
1. chown-R root:root html/<br>
<ahref="http://www.wangchao.info/wp-content/uploads/2015/02/1.jpg"></a><br>
2. 修改nginx及php-fpm的运行账户及组为nobody<br>
nginx.conf<br>
<ahref="http://www.wangchao.info/wp-content/uploads/2015/02/2.jpg"></a><br>
Php-fpm.conf<br>
<ahref="http://www.wangchao.info/wp-content/uploads/2015/02/3.jpg"></a><br>
3. 取消nobody对所有目录的的读取权限,然后添加对网站目录的读取权限<br>
<strong>命令:</strong><br>
1. chmodo-r –R /<br>
2. chmodo+r –R html/<br>
4. 取消nobody对于/bin/sh 的执行权限<br>
chmod 776 /bin/sh<br>
5. 确认网站目录对于nobody的权限为可读可执行,对网站文件的权限为可读<br>
6. 对于上传目录或者写入写文件的目录添加nobody的写入权限<br>
7. 配置nginx.conf 对于上传目录无php的执行权限<br>
8. 配置nginx.conf禁止访问的文件夹,如后台,或者限制访问ip<br>
9. 配置nginx.conf禁止访问的文件类型,如一些txt日志文件</p>
                                        <p class="post-copyright">未经允许不得转载:<ahref="https://www.wangchao.info/">王超博客</a> &raquo; <ahref="https://www.wangchao.info/244.html">Nginx服务器安全配置研究</a></p>
页: [1]
查看完整版本: Nginx服务器安全配置研究