nginx 读取 ssl 证书的权限问题请教 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
raysonlu
V2EX    NGINX

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

  •  
  •   raysonlu 310 天前 2451 次点击
    这是一个创建于 310 天前的主题,其中的信息可能已经有所发展或是发生改变。
    nginx 是用 nobody 运行,另外有一个用户 petter 主要是维护一大堆证书(公钥和私钥),我以为,根据 linux 的文件权限读取规则,建立一个 ssl 用户组,让 nobody 和 petter 都加入进去,再把整个证书存放目录设置为 petter:ssl ,就可以让 nginx 读取。

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

    “进程的拥有者只能读取自己拥有的证书”?这与理解的 linux 文件权限读取逻辑有点不一样,这是 linux 内核对这种操作的特殊处理,还是 nginx 自己定的规则?
    第 1 条附言    309 天前
    贴一下自己新的摸索结果:
    1 、nginx1.15.9+openssl 1.0.2 就开始支持证书路径使用变量配置,一旦使用了变量,ssl 证书的读取就交给 worker 进程(也就是这里的 nobody 用户),否则会由主进程读取(一般是 root 用户);

    2 、如果是 worker 进程读取,将会每次请求都去读,吞吐性能大概下降 4 成;

    3 、root 是权限大王 ,所以它读取的时候可以无视文件配置,但如果是非 root 用户(假设就是这里的 nobody 用户)读取,就要遵循 linux 文件权限规则;

    4 、上面失败的主要原因,是只关注了整个路径的“目录”和“文件”的 r 权限,实际需要对每一个“目录”增加 x 权限,才能给到相应的用户(或用户组所在用户)“找得到”,我理解为可当作对目录执行 ls 命令所以需要 x 权限;

    5 、回到开始自己的需求,是希望在 nginx 配置中,可以对 ssl 证书的存放“目录前缀”进行统一设置,以便我更改 ssl 证书存放目录时,不需要对每个配置文件都一一修改,但奈何 nginx 的 ssl 路径的变量处理有点“激进”,目前能想到的只有依赖系统的 symbolic link 来实现。
    11 条回复    2024-12-05 10:05:43 +08:00
    saka1zd
        1
    saka1zd  
       310 天前
    证书的权限设置了啥
    adoal
        2
    adoal  
       310 天前   1
    想多了,证书文件只是普通文件,对 Linux 内核来说跟其它文件没有什么不同。
    不如先找一个能登录的其它用户,加入 ssl 组,看看能不能打开证书文件。
    dzdh
        3
    dzdh  
       310 天前
    acl
    goodryb
        4
    goodryb  
       310 天前
    同一个用户组也要看你给文件的权限 600 同一个用户组也访问不了,起码 640
    liaohongxing
        5
    liaohongxing  
       310 天前
    要用 chmod 给文件夹加组读权限, 也 644 ,ls 表现为: -rwr--r-- (644) 只有拥有者有读写权限;而属组用户和其他用户只有读权限。
    liaohongxing
        6
    liaohongxing  
       310 天前
    或者楼上 640
    hguandl
        7
    hguandl  
       310 天前
    我感觉更常见的方案是用 nginx.conf 来设置用户。master process 启动时一般是 root 权限,读取配置后再 fork 出 worker process 并 setuid 。
    ysc3839
        8
    ysc3839  
       310 天前 via Android
    我个人是让证书更新程序和 nginx 都使用 www 用户。隔离不需要太细,能起到隔离作用就行了。
    @hguandl 这么干问题更多,master process 还是 root 身份运行,还是有安全风险。且更新证书后要 reload 的话,只能以 root 权限发信号。
    swLoXtOtd89pGg8t
        9
    swLoXtOtd89pGg8t  
       309 天前   1
    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
        10
    raysonlu  
    OP
       308 天前
    @NevadaLi 谢谢学到新的命令工具,但原生的已经足够灵活使用,无需额外安装适用性广
    swLoXtOtd89pGg8t
        11
    swLoXtOtd89pGg8t  
       308 天前
    @raysonlu #10 acl 也是各发行版原生自带的(除非极致精简的系统),这东西就是设计被用来弥补 rwxrwxrwx 中 other 权限过于宽泛的。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2757 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 14:09 PVG 22:09 LAX 07:09 JFK 10:09
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86