普通用户启动 nginx 带来的若干思考(1-3)
发布网友
发布时间:2024-09-25 19:57
我来回答
共1个回答
热心网友
时间:2024-12-11 09:41
Linux只允许root用户使用1024以下的端口,这包括了Nginx常用的80端口。因此,普通用户想要管理Nginx会遇到权限不足的问题。
需要注意的是,这里涉及两个基本权限:nginx命令本身的可执行权限和需要root身份使用80端口的权限。前者可以通过简单的赋权解决,而后者受到操作系统安全*,是本文需要解决的问题。
对于这样一个经典的提权问题,首先想到的是赋予普通用户sudo权限,但这种过于宽泛的放权违背了精细管理的初衷。
这里先放下常规的两种解决方法:
实验委托方式(setuid/gid)
常规的是使用编译方式安装(后文将被其他同学打脸,说最好用包管理软件安装,后面单独说)。
1、安装依赖(比如你需要http压缩模块,则需要安装zlib)
2、编译安装pcre(熟悉我的同学都知道,我们通常放在/usr/local/share/applications/目录)
3、编译安装nginx
4、创建www用户
5、配置
6、赋权和测试
7、配置setuid(核心)
setuid就像你朋友拿着你的身份证和委托书来代替你办理业务。加上+s权限,相当于root用户开启了对该程序的委托模式:凡是能启动这个程序,将以root身份启动。
此处依然要感叹linux设计之精巧,学海无涯啊。
8、普通用户使用
至此完成以普通用户启动nginx的任务。
后续将带来将nginx配置成系统服务解决问题,敬请期待。
附录我的震撼时刻
我的常规操作,在找到解决方案后,快速测试一下,期望能解决问题,恰好解决了,就把一切抛在脑后了……
然后这次犹豫了一下,我就在想:什么时候,chmod多可以+s了?!我这天天跟linux打交道,打了个寂寞啊,在山顶洞里独自狂欢吗。不得不做了把反思,切好我在无脑搜索的时候,发现了一个回答:hu.com/question/3409...,总结下震撼我的4点:
我想必须要做几件事情了: