Nginx安全配置标准(for web server)

1、目的

本标准是信息系统安全技术标准的一部分,主要目的是根据信息安全管理政策要求,为我司"Nginx web server"配置提供安全标准。php

2、范围

本规范适用于我司全部Nginx web server。html

3、内容

3.1 版本

使用较新的稳定版本java

3.2 启动账号

使用非root账号启动nginx

user www wwww;
或者
user nginx nginx;
3.3 日志记录

记录access logweb

3.4 预防php fastcgi文件名解析漏洞

若是nginx启用了php fastcgi功能,必须添加以下配置,以预防文件名解析漏洞:正则表达式

server {
    ....    if ( $fastcgi_script_name ~ \..*\/.*php ) {        return 403;
    }
    ....
}

上述配置将拦截相似这样的请求:安全

/1.jpg/x.php
/my.dir/x.php
3.5 web目录权限设置

nginx启动账号应对web目录下全部文件及子目录无写权限,若是web应用需写日志文件,不该该放在web目录下。spa

假设web目录是/var/www/html,正确的权限设置应该是:日志

chown -R root:root /var/www/html && chmod -R 0755 /var/www/htmlcode

即属主是root,权限是0755,子目录权限跟父目录彻底同样。

3.6 可写目录禁止执行

若是web应用确实须要支持文件上传功能,或因其它缘由须要对WEB目录可写,应在nginx里面限制可写目录无脚本执行权限。假设可写目录为"/upload",配置示例以下:

server {
    ....
    location ~ ^/upload/.*\.php {        return 403;
    }
    ....
    location ~ \.php$ {
        fastcgi_pass *;
    }
}

注意1:"location ~ ^/upload/.*\.php"必须写在前面!对于location的正则表达式,nginx是按照前后顺序来匹配的,具体可参见http://wiki.nginx.org/HttpCoreModule#location

注意2:假设web服务启动账号为nobody,可写目录是/var/www/html/upload,正确的权限设置应该是:

chown -R nobody:nobody /var/www/html/upload && chmod -R 0755 /var/www/html/upload

便可写目录的属主应该为web启动账号,权限应该为0755,子目录的权限应该跟父目录彻底一致。

注意3:这里指的不是去除文件系统rwx权限中的x,文件系统权限中的x能够保留,无危害。
3.7 禁止列目录

Nginx默认是不容许列出整个目录的,若是在nginx.conf文件,在location server 或 http段中手工设定了autoindex on;选项,请移除禁用该功能。

相关文章
相关标签/搜索