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

一、目的

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

二、范围

本规范适用于我司所有Nginx web server。

三、内容

3.1 版本

使用较新的稳定版本

3.2 启动帐号

使用非root帐号启动

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

记录access log

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目录下。

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

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

即属主是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;选项,请移除禁用该功能。


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。