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;選項,請移除禁用該功能。

相關文章
相關標籤/搜索