Nginx 如何在源码安装时指定安装目录的组权限防止其他用户篡改

作者:袖梨 2026-08-15

源码安装Nginx时,目录组权限不由configure直接设置,而是通过三步协同控制:一、编译前创建专用系统组(如nginx)并添加无登录用户;二、configure仅用--prefix指定根目录,不支持--user/--group;三、安装后执行chown -R nginx:nginx和chmod 750锁定权限,并在nginx.conf中用user指令明确worker进程身份。

源码安装 Nginx 时,安装目录本身不靠 configure 参数直接设“组权限”,而是靠三步协同控制:编译时指定根路径(--prefix)、安装后调整目录属主与权限、再通过 nginx.conf 的 user 指令限定工作进程身份。单纯设“组权限”不能防篡改,关键在于隔离+最小权限+所有权明确。

一、编译前创建专用组并分配给目标用户

先建立仅用于 Nginx 运行的系统组(如 nginx 或 www-data),避免使用 wheel、root 等高权限组:

  1. 创建组:sudo groupadd -r nginx
  2. 创建无登录权限的系统用户,并加入该组:sudo useradd -r -g nginx -s /sbin/nologin nginx
  3. 确认组存在且用户归属正确:getent group nginxid nginx

二、configure 阶段用 --prefix 指定安装根目录,并确保路径可写

安装目录(如 /usr/local/nginx)必须提前存在,且属主为构建者(如 root),但要预留后续 chown 空间:

  1. 执行 configure 时明确指定:./configure --prefix=/usr/local/nginx ...
  2. 不要用 --user--group(Nginx 最新 configure 不支持这两个参数,加了会报错或被忽略)
  3. 确保 /usr/local/nginx 目录存在且 root 可写:sudo mkdir -p /usr/local/nginx && sudo chown root:root /usr/local/nginx

三、安装后立即重置目录属主与权限,锁定组写入能力

make install 后,所有子目录(conf、logs、html、sbin)默认属 root。必须手动降权,只允许 nginx 用户及其组访问:

  1. 递归变更属主:sudo chown -R nginx:nginx /usr/local/nginx
  2. 收紧目录权限(禁止其他用户遍历或写入):sudo chmod -R 750 /usr/local/nginx

    → 这样只有 owner(nginx)和 group(nginx)可读写执行,others 仅可读(对 conf 目录尤其重要)

  3. 特别加固 logs 和临时目录:sudo chmod 750 /usr/local/nginx/logs /usr/local/nginx/client_body_temp

四、在 nginx.conf 中固定运行身份,让 worker 进程真正以该组上下文操作

编辑 /usr/local/nginx/conf/nginx.conf,在 events 块之前添加:

  1. user nginx nginx; —— 显式声明 worker 进程以 nginx 用户 + nginx 组运行
  2. 该指令必须位于全局块顶部(http 块外),否则会报错
  3. 验证配置:/usr/local/nginx/sbin/nginx -t;启动后检查进程:ps aux | grep nginx,worker 应显示 UID/GID 均为 nginx

相关文章

精彩推荐