Nginx 源码编译后需通过创建无登录系统用户(如 nginx)并配置 nginx.conf 中的 user 指令来锁定运行权限,同时加固密码锁定与目录权限。

源码编译安装 Nginx 后,锁定运行用户权限不是靠编译参数实现的,而是在安装完成后通过系统账户管控 + Nginx 配置双重落实。关键点是:让 Nginx 进程以专用低权用户(如 nginx)运行,且该用户不能登录、无 shell、无家目录、不拥有额外权限。
创建专用无登录用户
先手动创建一个仅用于运行服务的系统用户:
- 执行
sudo useradd -r -s /sbin/nologin -M nginx:
•-r表示创建系统用户(UID 1–999)
•-s /sbin/nologin禁止交互式登录
•-M不创建家目录,减少攻击面 - 验证是否生效:
sudo getent passwd nginx应显示 shell 为/sbin/nologin;sudo su - nginx -c "echo test"应报错拒绝
在 nginx.conf 中明确指定运行身份
编辑主配置文件(如 /usr/local/nginx/conf/nginx.conf),确保 user 指令位于全局块最顶部(events 和 http 块之前):
- 写法示例:
user nginx nginx;(用户名与组名一致)或user nginx www-data;(用户为 nginx,属组为 www-data) - 若漏写或位置错误,Nginx 启动时会报
"user" directive is not allowed here或默认以 root 运行,极不安全 - 改完后用
nginx -t检查语法,再nginx -s reload生效
锁定用户登录能力(二次加固)
即使已设 /sbin/nologin,仍建议显式锁定密码,防止未来误启用:
- 执行
sudo passwd -l nginx,即禁用该账户的密码认证 - 验证结果:
sudo passwd -S nginx输出中应含 Password locked - 注意:不要对 root 或其他关键系统账户执行此操作
检查目录与文件权限是否匹配
用户锁定后,还需确保 Nginx 能正常读配置、写日志、访问静态资源:
- 配置目录(如
/usr/local/nginx/conf)应至少对nginx用户可读 - 日志目录(如
/usr/local/nginx/logs)需对nginx用户可写,建议chown -R nginx:nginx logs/ - 若使用自定义路径(如
--prefix=/opt/nginx),所有子目录权限都要同步调整


















