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

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

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

“进程的拥有者只能读取自己拥有的证书”?这与理解的 linux 文件权限读取逻辑有点不一样,这是 linux 内核对这种操作的特殊处理,还是 nginx 自己定的规则?
793 次点击
所在节点    NGINX
9 条回复
saka1zd
1 天前
证书的权限设置了啥
adoal
1 天前
想多了,证书文件只是普通文件,对 Linux 内核来说跟其它文件没有什么不同。
不如先找一个能登录的其它用户,加入 ssl 组,看看能不能打开证书文件。
dzdh
1 天前
acl
goodryb
1 天前
同一个用户组也要看你给文件的权限 600 同一个用户组也访问不了,起码 640
liaohongxing
1 天前
要用 chmod 给文件夹加组读权限, 也 644 ,ls 表现为: -rw-r--r-- (644) 只有拥有者有读写权限;而属组用户和其他用户只有读权限。
liaohongxing
1 天前
或者楼上 640
hguandl
1 天前
我感觉更常见的方案是用 nginx.conf 来设置用户。master process 启动时一般是 root 权限,读取配置后再 fork 出 worker process 并 setuid 。
ysc3839
1 天前
我个人是让证书更新程序和 nginx 都使用 www 用户。隔离不需要太细,能起到隔离作用就行了。
@hguandl 这么干问题更多,master process 还是 root 身份运行,还是有安全风险。且更新证书后要 reload 的话,只能以 root 权限发信号。
NevadaLi
9 小时 43 分钟前
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

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

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

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

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

© 2021 V2EX