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

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

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

“进程的拥有者只能读取自己拥有的证书”?这与理解的 linux 文件权限读取逻辑有点不一样,这是 linux 内核对这种操作的特殊处理,还是 nginx 自己定的规则?
1279 次点击
所在节点    NGINX
11 条回复
saka1zd
37 天前
证书的权限设置了啥
adoal
37 天前
想多了,证书文件只是普通文件,对 Linux 内核来说跟其它文件没有什么不同。
不如先找一个能登录的其它用户,加入 ssl 组,看看能不能打开证书文件。
dzdh
37 天前
acl
goodryb
37 天前
同一个用户组也要看你给文件的权限 600 同一个用户组也访问不了,起码 640
liaohongxing
37 天前
要用 chmod 给文件夹加组读权限, 也 644 ,ls 表现为: -rw-r--r-- (644) 只有拥有者有读写权限;而属组用户和其他用户只有读权限。
liaohongxing
37 天前
或者楼上 640
hguandl
37 天前
我感觉更常见的方案是用 nginx.conf 来设置用户。master process 启动时一般是 root 权限,读取配置后再 fork 出 worker process 并 setuid 。
ysc3839
37 天前
我个人是让证书更新程序和 nginx 都使用 www 用户。隔离不需要太细,能起到隔离作用就行了。
@hguandl 这么干问题更多,master process 还是 root 身份运行,还是有安全风险。且更新证书后要 reload 的话,只能以 root 权限发信号。
NevadaLi
36 天前
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
36 天前
@NevadaLi 谢谢学到新的命令工具,但原生的已经足够灵活使用,无需额外安装适用性广
NevadaLi
36 天前
@raysonlu #10 acl 也是各发行版原生自带的(除非极致精简的系统),这东西就是设计被用来弥补 rwxrwxrwx 中 other 权限过于宽泛的。

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

https://www.v2ex.com/t/1094763

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

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

© 2021 V2EX