Nginx 的安全加固核心围绕最小权限原则、配置硬 ening、访问控制和审计监控展开权限设置则是其中最基础也最关键的一环。下面我会分模块给出可落地的加固方案所有操作都提供具体命令和配置示例。一、基础权限加固核心1. 创建专用低权限用户 / 组Nginx 默认可能以root或nginx用户运行需确保运行进程的用户无登录权限、无系统管理权限123456# 1. 创建专用用户禁止登录、无家目录useradd-r -s/sbin/nologin-M nginx# 2. 验证用户是否创建成功idnginx# 输出示例uid998(nginx) gid996(nginx) groups996(nginx)2. 配置 Nginx 以低权限用户运行编辑主配置文件通常/etc/nginx/nginx.conf确保user指令指向专用用户1234567# 开头添加/修改指定运行用户和组user nginx nginx;# 其他核心配置保持默认即可worker_processes auto;error_log/var/log/nginx/error.log warn;pid/var/run/nginx.pid;3. 修复文件 / 目录权限遵循「最小权限」原则不同目录 / 文件设置不同权限避免过度开放123456789101112131415161718192021# 1. 核心目录权限仅 root 可写nginx 可读# Nginx 配置目录chown-R root:root/etc/nginxchmod-R 755/etc/nginx# 目录root可读写执行其他只读执行chmod644/etc/nginx/*.conf# 配置文件root可读写其他只读# 2. 日志目录nginx 可写其他无权限chown-R nginx:nginx/var/log/nginxchmod-R 700/var/log/nginx# 仅 nginx 用户可访问# 3. 运行目录pid/锁文件chown-R nginx:nginx/var/run/nginxchmod-R 700/var/run/nginx# 4. 网站根目录根据业务调整示例为 /usr/share/nginx/htmlchown-R root:nginx/usr/share/nginx/html# root 可写nginx 可读chmod-R 750/usr/share/nginx/html# 禁止其他用户访问# 5. Nginx 二进制文件仅 root 可修改chownroot:root/usr/sbin/nginxchmod755/usr/sbin/nginx# 禁止普通用户修改4. 禁止 Nginx 进程提权确保nginx.conf中无user root;配置避免以 root 运行禁止 nginx 用户执行 sudo检查/etc/sudoers和/etc/sudoers.d/确保无 nginx 相关配置。二、配置层面安全加固1. 隐藏 Nginx 版本信息避免暴露版本号被针对性攻击编辑nginx.conf1234567http {# 隐藏版本号server_tokens off;# 可选修改 Server 响应头需编译时开启模块或用第三方模块# more_set_headers Server: WebServer;}2. 限制请求参数防止攻击在http或server块中添加123456789101112131415161718http {# 限制请求体大小防止 POST 大文件攻击根据业务调整client_max_body_size 10M;# 限制请求头大小client_header_buffer_size 1k;large_client_header_buffers 4 1k;# 超时设置防止 Slowloris 攻击client_body_timeout 10s;client_header_timeout 10s;keepalive_timeout 65s 20s;send_timeout 10s;# 限制并发连接可选根据服务器性能调整limit_conn_zone $binary_remote_addr zoneperip:10m;limit_conn perip 20;# 单个 IP 最大 20 个并发连接}3. 访问控制限制 IP 访问如后台管理页面1234location/admin/{allow 192.168.1.0/24;# 仅允许内网 IP 访问deny all;# 拒绝其他所有 IP}禁止访问敏感文件123456789# 禁止访问 .htaccess、.env 等敏感文件location ~ /\.(ht|env|git|svn) {deny all;}# 禁止访问配置文件/日志文件location ~* (\.conf|\.log)$ {deny all;}4. 启用 HTTPS 并加固必做1234567891011121314151617181920212223242526272829303132server {listen 443 ssl http2;server_name yourdomain.com;# SSL 证书路径ssl_certificate/etc/nginx/ssl/server.crt;ssl_certificate_key/etc/nginx/ssl/server.key;# 禁用弱加密算法ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;ssl_prefer_server_ciphers on;# 会话缓存ssl_session_cache shared:SSL:10m;ssl_session_timeout 10m;# HSTS强制 HTTPSadd_header Strict-Transport-Securitymax-age31536000; includeSubDomainsalways;# 其他安全头add_header X-Frame-Options DENY;# 禁止iframe嵌入add_header X-Content-Type-Options nosniff;# 防止MIME类型嗅探add_header X-XSS-Protection1; modeblock;# 防XSS}# 重定向 HTTP 到 HTTPSserver {listen 80;server_name yourdomain.com;return301 https://$host$request_uri;}三、系统层面加固1. 启用 SELinuxLinux 系统12345678# 1. 查看 SELinux 状态getenforce# 2. 若为 Disabled临时启用重启失效setenforce 1# 3. 永久启用修改配置文件sed-is/^SELINUX.*/SELINUXenforcing//etc/selinux/config2. 限制 Nginx 端口访问通过防火墙firewalld/iptables仅开放必要端口如 80/443123456789# firewalld 示例firewall-cmd --permanent --add-port80/tcpfirewall-cmd --permanent --add-port443/tcpfirewall-cmd --reload# 禁止其他无关端口firewall-cmd --permanent --remove-all-ports# 先清空谨慎仅新服务器firewall-cmd --permanent --add-port80/tcp--add-port443/tcpfirewall-cmd --reload3. 定期审计日志12345678910111213141516171819# 1. 配置日志轮转避免日志过大# 编辑 /etc/logrotate.d/nginx通常已存在检查配置/var/log/nginx/*.log {dailyrotate 30compressdelaycompressmissingoknotifemptycreate 0640 nginx nginxpostrotate/usr/bin/systemctlreload nginx /dev/null21endscript}# 2. 定期检查错误日志关注权限/攻击行为tail-f/var/log/nginx/error.loggrep-ierror/var/log/nginx/error.loggrep-idenied/var/log/nginx/access.log四、验证加固效果1234567891011121314151617# 1. 检查 Nginx 运行用户psaux |grepnginx# 输出应显示 nginx 进程以 nginx 用户运行master 进程可能为 root正常# 2. 检查配置语法nginx -t# 3. 重启 Nginx 使配置生效systemctl restart nginx# 4. 验证版本号是否隐藏curl -I http://yourdomain.com# 响应头中不应包含 Server: nginx/1.20.1 这类版本信息# 5. 检查文件权限ls-l/etc/nginx/nginx.conf# 应为 -rw-r--r-- 1 root rootls-ld/var/log/nginx# 应为 drwx------ 2 nginx nginx总结权限核心创建专用nginx低权限用户配置文件归root所有只读日志 / 运行目录归nginx所有仅自身可访问配置加固隐藏版本号、限制请求参数、启用 HTTPS 并禁用弱加密、添加安全响应头系统层面启用 SELinux、防火墙仅开放必要端口、定期审计日志形成完整安全闭环。所有操作完成后建议用 Nmap、OpenVAS 等工具扫描 Nginx 服务验证加固效果。