【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 来匹配和查看即可,也就是所有代理的后端业务的应用端口都已经使用普通用户和组来运行了。

相关推荐
大霞上仙24 分钟前
Ubuntu系统电脑没有WiFi适配器
linux·运维·电脑
weixin_4426434243 分钟前
推荐FileLink数据跨网摆渡系统 — 安全、高效的数据传输解决方案
服务器·网络·安全·filelink数据摆渡系统
Karoku0661 小时前
【企业级分布式系统】Zabbix监控系统与部署安装
运维·服务器·数据库·redis·mysql·zabbix
为什么这亚子1 小时前
九、Go语言快速入门之map
运维·开发语言·后端·算法·云原生·golang·云计算
星尘安全1 小时前
安全工程师入侵加密货币交易所获罪
安全·区块链·漏洞·加密货币
布值倒区什么name1 小时前
bug日常记录responded with a status of 413 (Request Entity Too Large)
运维·服务器·bug
。puppy2 小时前
HCIP--3实验- 链路聚合,VLAN间通讯,Super VLAN,MSTP,VRRPip配置,OSPF(静态路由,环回,缺省,空接口),NAT
运维·服务器
颇有几分姿色2 小时前
深入理解 Linux 内存管理:free 命令详解
linux·运维·服务器
光芒再现dev3 小时前
已解决,部署GPTSoVITS报错‘AsyncRequest‘ object has no attribute ‘_json_response_data‘
运维·python·gpt·语言模型·自然语言处理
AndyFrank3 小时前
mac crontab 不能使用问题简记
linux·运维·macos