最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Nginx 如何在源码安装时指定安装目录的组权限防止其他用户篡改
时间:2026-08-15 20:16:49 编辑:袖梨 来源:一聚教程网
源码安装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 等高权限组:
- 创建组:
sudo groupadd -r nginx - 创建无登录权限的系统用户,并加入该组:
sudo useradd -r -g nginx -s /sbin/nologin nginx - 确认组存在且用户归属正确:
getent group nginx和id nginx
二、configure 阶段用 --prefix 指定安装根目录,并确保路径可写
安装目录(如 /usr/local/nginx)必须提前存在,且属主为构建者(如 root),但要预留后续 chown 空间:
- 执行 configure 时明确指定:
./configure --prefix=/usr/local/nginx ... - 不要用
--user或--group(Nginx 最新 configure 不支持这两个参数,加了会报错或被忽略) - 确保
/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 用户及其组访问:
- 递归变更属主:
sudo chown -R nginx:nginx /usr/local/nginx - 收紧目录权限(禁止其他用户遍历或写入):
sudo chmod -R 750 /usr/local/nginx→ 这样只有 owner(nginx)和 group(nginx)可读写执行,others 仅可读(对 conf 目录尤其重要)
- 特别加固 logs 和临时目录:
sudo chmod 750 /usr/local/nginx/logs /usr/local/nginx/client_body_temp
四、在 nginx.conf 中固定运行身份,让 worker 进程真正以该组上下文操作
编辑 /usr/local/nginx/conf/nginx.conf,在 events 块之前添加:
-
user nginx nginx;—— 显式声明 worker 进程以 nginx 用户 + nginx 组运行 - 该指令必须位于全局块顶部(http 块外),否则会报错
- 验证配置:
/usr/local/nginx/sbin/nginx -t;启动后检查进程:ps aux | grep nginx,worker 应显示 UID/GID 均为 nginx