You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

配置Passenger为应用所有者后为何仍需开放其他用户执行权限?

问题原因分析

这个现象的核心在于Nginx worker进程的权限与Passenger运行用户的权限是分离的:

  • Nginx主进程以root启动,但实际处理请求的worker进程通常以非root用户(比如默认的www-data)运行。
  • 在Passenger切换到dog_park用户执行应用代码前,Nginx的worker进程需要先完成对/var/www/dog_park/public/的stat()操作,这一步的权限校验是基于Nginx worker用户的,而非dog_park用户。
  • 当目录权限为drwxr-x--x时,其他用户拥有执行权限,Nginx worker用户属于“其他用户”范畴,所以能正常访问;如果去掉其他用户的执行权限,worker用户就无法遍历路径完成stat操作,触发权限拒绝错误。
解决思路

1. 确认Nginx worker进程的运行用户

查看Nginx主配置文件(通常是/etc/nginx/nginx.conf)顶部的user指令,比如:

user www-data;

记录下这个用户(比如www-data),后续权限调整都围绕这个用户展开。

2. 调整目录权限的正确姿势(无需开放其他用户权限)

方式一:将Nginx worker用户加入dog_park用户组

  • 执行命令将worker用户添加到dog_park组:
    usermod -aG dog_park www-data
    
  • 给应用路径上的所有父目录设置组执行权限:
    chmod g+x /var/www /var/www/dog_park /var/www/dog_park/public
    
  • 若目录组归属不是dog_park,执行以下命令修正:
    chgrp -R dog_park /var/www/dog_park
    

方式二:使用ACL单独授权(无需修改用户组)

如果不想调整用户组,可通过ACL权限单独给Nginx worker用户授权:

setfacl -m u:www-data:x /var/www /var/www/dog_park /var/www/dog_park/public

3. 验证完整路径的权限链

注意:从根目录到public目录的每一级父目录(比如/、/var、/var/www)都需要对Nginx worker用户有执行权限(执行权限允许用户遍历目录),否则即使dog_park目录权限正确,上层目录权限不足也会导致同样的错误。

4. 重启服务生效

调整权限后,重启Nginx服务使配置生效:

systemctl restart nginx

内容的提问来源于stack exchange,提问作者dcgenjin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 12:37:16