【Nginx】使用普通用户安装和运行Nginx经验分享

各位做运维的小伙伴在日常工作中,可能都会习惯性的使用 root 超级用户来安装和运行 Nginx。但是,如果所在的公司有安全部门,他们就可能会强烈的建议你将 Nginx 的运行用户整改为普通用户,来提升系统的安全性。下面我来分享下自己整改的一个过程和细节经验。

Nginx 的安装是需要使用 root 超级用户的,但是我们可以在安装命令中添加参数,让 Nginx 被安装到指定的用户和组(如 app 用户、app 组)目录下。

安装命令如下:

objectivec 复制代码
./configure --prefix=/data/nginx --user=app --group=app
make
make install

备注:如果之前已经安装过nginx,编译的参数建议和原先的参数(可以使用 ./nginx -V 命令来查看)保持一致,即在原参数的基础上增加 --user--group 参数。

安装完成以后,还需要将 nginx.conf 配置文件中的第一行设置为 app 用户和组,并将默认的 80 监听端口,修改为 1024 以上的端口(如下所示),否则使用普通启动 Nginx 时会报错、无法启动。

复制代码
user app app;
...
http{
    ...
    server{
        listen 1026;
        ...
    }
}

上面这种,是最简单的一种情况。

但是,如果当你的软负载环境使用了 Keepalived + Nginx 来实现双机主备,那整改起来就相对复杂一点了。因为 Keepalived 一般都是使用 root 超级用户来安装和运行的,而且我们还会将 Keepalived 注册为 Linux 系统的一个服务,即让 Keepalived 服务随操作系统一起停、启,来实现宕机后 Keepalived 服务的自动拉起。同时,我们还会在 Keepalived 的主配置里面设置自动监控 Nginx 进程的配置,即监测到 Nginx 进程不存在,Keepalived 就会通过配置信息以及对应的脚本自动拉起 Nginx 进程。

这样就会带来一个问题,虽然我们已经将 Nginx 安装到了普通用户和组下了,但是 Keepalived 拉起后的 Nginx 进程会出现一个问题,即 master 进程是 root 超级用户,而 worker 进程是普通用户。另外, Nginx 的 pid 文件也会变成 root 超级用户和组权限,而 Nginx 的主执行程序是普通用户和组,就无法去执行配置校验和热加载。

这个时候,我们就需要对安装在普通用户和组下面的 Nginx 的主程序的权限进行改造,来让普通用户也有权限去执行配置校验和热加载。

上面这几段文字看起来有点绕,但是也是我们在生产环境比较常见的一种情况,希望各位小伙伴能耐心的看完,并且能理解其中的含义。

下面我们就需要对 Nginx 的主程序的权限进行改造,很简单的几行命令:

objectivec 复制代码
$ cd /data/nginx/sbin/

// 设置nginx主程序的用户和组权限为root
$ chown root:root ./nginx

// 设置nginx主程序的权限为755
# chmod 755 ./nginx

// 设置nginx主程序在普通用户权限下具备执行root权限的功能
$ chmod u+s ./nginx

// 修改后的权限
# ls -ltr /data/nginx/sbin/
-rwsr-xr-x 1 root root 7145848 Feb 29 10:36 nginx

备注:这样整改以后,大家会发现使用netstat -tnlp| grep master_pid来查看端口,会发现没有数据返回了,这个时候就需要使用第一个 worker 进程的 pid 来匹配和查看即可,也就是所有代理的后端业务的应用端口都已经使用普通用户和组来运行了。

相关推荐
幸福指北1 天前
我用 Tauri + Vue 3 + Rust 开发了这款跨平台网络连接查看工具PortView,性能炸裂!
运维·网络·监控
黎阳之光1 天前
【黎阳之光:以无线专网与视频孪生,赋能智慧广电与数字中国】
算法·安全·智慧城市·数字孪生
青柠代码录1 天前
【Linux】路径区分:testdir、testdir/、testdir/*
linux·运维·服务器
Benszen1 天前
Docker容器化解决方案全解析
运维·docker·容器
badhope1 天前
Docker从零开始安装配置全攻略
运维·人工智能·vscode·python·docker·容器·github
lplum_1 天前
2025第十届“楚慧杯”湖北省网络与数据安全实践能力竞赛 wp
网络·安全·web安全·网络安全·系统安全·密码学·新人首发
mounter6251 天前
基于MLX设备的Devlink 工具全指南与核心架构演进
linux·运维·服务器·网络·架构·kernel
xuanwojiuxin1 天前
[linux] what‘s the kdump?
linux·运维·服务器
透明的玻璃杯1 天前
关于QT客户端和服务器端之前状态监控
运维·服务器
软件资深者1 天前
Coze自动化工作流+Agent智能体实战教程(0基础入门,附多场景实操)
运维·人工智能·ai·自动化·工作流·扣子·课程