nginx 读取 ssl 证书的权限问题请教

2024-12-03 19:40:42 +08:00
 raysonlu
nginx 是用 nobody 运行,另外有一个用户 petter 主要是维护一大堆证书(公钥和私钥),我以为,根据 linux 的文件权限读取规则,建立一个 ssl 用户组,让 nobody 和 petter 都加入进去,再把整个证书存放目录设置为 petter:ssl ,就可以让 nginx 读取。

但实测并不能,nginx 处理访问触发读取 ssl 证书的时候,会报错无权限读取 ssl 证书,摸索了一番后,发现只有把证书拥有者改为 nobody ,nginx 才能读取并正常处理访问。

“进程的拥有者只能读取自己拥有的证书”?这与理解的 linux 文件权限读取逻辑有点不一样,这是 linux 内核对这种操作的特殊处理,还是 nginx 自己定的规则?
2672 次点击
所在节点    NGINX
11 条回复
saka1zd
2024-12-03 19:51:44 +08:00
证书的权限设置了啥
adoal
2024-12-03 19:57:48 +08:00
想多了,证书文件只是普通文件,对 Linux 内核来说跟其它文件没有什么不同。
不如先找一个能登录的其它用户,加入 ssl 组,看看能不能打开证书文件。
dzdh
2024-12-03 19:58:57 +08:00
acl
goodryb
2024-12-03 20:25:28 +08:00
同一个用户组也要看你给文件的权限 600 同一个用户组也访问不了,起码 640
liaohongxing
2024-12-03 20:29:38 +08:00
要用 chmod 给文件夹加组读权限, 也 644 ,ls 表现为: -rw-r--r-- (644) 只有拥有者有读写权限;而属组用户和其他用户只有读权限。
liaohongxing
2024-12-03 20:30:13 +08:00
或者楼上 640
hguandl
2024-12-03 20:37:59 +08:00
我感觉更常见的方案是用 nginx.conf 来设置用户。master process 启动时一般是 root 权限,读取配置后再 fork 出 worker process 并 setuid 。
ysc3839
2024-12-03 20:45:02 +08:00
我个人是让证书更新程序和 nginx 都使用 www 用户。隔离不需要太细,能起到隔离作用就行了。
@hguandl 这么干问题更多,master process 还是 root 身份运行,还是有安全风险。且更新证书后要 reload 的话,只能以 root 权限发信号。
swLoXtOtd89pGg8t
2024-12-04 17:33:58 +08:00
setfacl -Rm u:nginx-user:r /path/of/certs
setfacl -Rm u:petter:rw /path/of/certs
setfacl -dm u:nginx-user:r /path/of/certs
setfacl -dm u:petter:rw /path/of/certs


setfacl -Rm u:nginx-user:x /path
setfacl -Rm u:petter:rx /path

setfacl -Rm u:nginx-user:x /path/of
setfacl -Rm u:petter:rx /path/of


# 解释说明: 第一组的四条分别设置 nginx-user 允许读取权限,petter 允许 rw ,新的文件默认也遵循前两条;第二和第三组允许俩用户进入证书所在的父目录。

注意:nginx-user 只是一个名字,可以直接设置 nginx 运行的 uid ,权限也设置成相同 uid 就好,比如 setfacl -Rm u:81:r /path/of/certs
raysonlu
2024-12-05 10:03:14 +08:00
@NevadaLi 谢谢学到新的命令工具,但原生的已经足够灵活使用,无需额外安装适用性广
swLoXtOtd89pGg8t
2024-12-05 10:05:43 +08:00
@raysonlu #10 acl 也是各发行版原生自带的(除非极致精简的系统),这东西就是设计被用来弥补 rwxrwxrwx 中 other 权限过于宽泛的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1094763

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX