Nginx安全配置文档
1.配置文档中有多处明确写出了nginx的配置文件路径,该路径是测试环境中的路径,线上系统的nginx配置文件与文档中所写的路径可能不一样,在进行相关配置时,应以线上配置文件的实际路径为准。
线上系统nginx的安装目录在:/usr/local/nginx,默认配置文件在/usr/local/nginx/conf/nginx.conf,此外也引用了/usr/local/nginx/conf/conf.d目录下的配置文件。
2.本文档仅包括了用于提升安全的配置方法。
3.在遵从本文档的方法进行配置前,请做好相关配置文件的备份,以便在配置失败时可以回退到变更前状态。
1.新安装,选用安全稳定版本
编号: |
Nginx_Sec_001 |
适用: |
LINUX下新安装或者升级nginx服务器 |
配置要求: |
1.安装包要求从nginx官方网站获取,官方网站地址:nginx。 2.安装包优先选用稳定版(stable)最新版,如果要跨大版本升级nginx,则要求在测试环境测试不存在兼容性问题后才在生产环境进行部署。 3.要求对下载的源码安装包文件进行完整性验证。 具体方法参考“备注”处的方法。 |
安全增强说明: |
1.从官方网站下载安装包及对安装包进行指纹验证可以最大程度确保安装文件未被篡改; 2.使用最新版本,最大避免旧版版中已发现安全漏洞的威胁,使用稳定版可以确保功能稳定。 |
备注: |
完整性验证方法: (1)每个nginx源码包都有一个签名文件,从官网访问下载nginx源码包的同时也下载该源码包的签名文件到同一目录,该签名文件是nginx官方使用pgp私钥对源码包进行签名得到,该文件后缀.为.asc,获取pgp签名文件方法: (2)nginx源码包使用的是pgp签名,进行签名验证时需要到GnuPG程序,如果没有安装该工具,可以使用yum install gnupg进行安装。 (3)获取pgp签名文件的公钥ID,执行:# sudo gpg --verify nginx-1.11.3.tar.gz.asc gpg: Signature made Tue 26 Jul 2016 09:59:49 PM CST using RSA key ID A1C052F8 gpg: Can't check signature: No public key (4)根据ID号从公钥服务器中下载公钥,如下: #sudo gpg --keyserver hkp://keys.gnupg.net --recv-keys A1C052F8 gpg: requesting key A1C052F8 from hkp server keys.gnupg.net gpg: /root/.gnupg/trustdb.gpg: trustdb created gpg: key A1C052F8: public key "Maxim Dounin " imported gpg: key A1C052F8: public key "Maxim Dounin " imported gpg: no ultimately trusted keys found gpg: Total number processed: 2 gpg: imported: 2 (RSA: 2) (5)利用公钥验证nginx源码包和签名文件,如下,说明文件没有被篡改: # sudo gpg --verify nginx-1.11.3.tar.gz.asc gpg: Signature made Tue 26 Jul 2016 09:59:49 PM CST using RSA key ID A1C052F8 gpg: Good signature from "Maxim Dounin " gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: B0F4 2533 73F8 F6F5 10D4 2178 520A 9993 A1C0 52F8 |
2.使用普通账号运行nginx服务
编号: |
Nginx_Sec_002 |
适用: |
LINUX下新安装部署或已上线nginx服务器 |
配置要求: |
nginx服务器的work进程不能使用root账号运行,要求以普通账号运行,具体方法参考“备注”处的方法。 |
安全增强说明: |
防范或降低攻击者通过上传webshell来获取到的执行权限 |
备注: |
配置普通账号运行nginx服务方法: 1.nginx(worker进程)默认以nobody运行,创建普通账号nginx,使用nginx账号来运行 # sudo groupadd -g 1001 nginx #创建nginx组 # sudo useradd -s /sbin/nologin -M -g nginx -u 1001 nginx #创建nginx用户并加入到nginx组,不创建家目录,不允许nginx账号登录。 说明:GID和UID定义为1000,避免与nis系统上的账号的ID冲突。 2.以普通账号nginx来运行Nginx,两个方法: 方法1:如果是新安装nginx,编译时添加--user=nginx --group=nginx参数; 方法2:已完成nginx的安装,通过修该配置文件来指定,如下: 1)# sudo vim /usr/local/nginx/conf/nginx.conf 2)将#user nobody;改成user nginx nginx; 3)测试配置文件是否正确,执行命令# sudo /usr |