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

Ubuntu服务器上Nginx的www-data用户无法访问目录求助

解决Nginx的www-data用户无法访问指定目录的问题

1. 排查AppArmor访问限制

Ubuntu默认启用AppArmor,它会限制Nginx进程的访问路径范围,这是此类问题最常见的原因:

  • 查看Nginx的AppArmor状态:
    sudo aa-status
    
    若输出中nginx处于enforce模式,说明规则在生效。
  • 临时切换到宽容模式测试:
    sudo aa-complain /etc/apparmor.d/usr.sbin.nginx
    
    再次执行sudo -u www-data stat /home/mainuser/projectname/,如果能正常访问,说明是AppArmor的问题。
  • 永久修改规则:
    编辑/etc/apparmor.d/usr.sbin.nginx,找到类似/var/www/** rw,的行,在下方添加:
    /home/mainuser/projectname/** rw,
    
    重新加载规则:
    sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.nginx
    

2. 检查并设置ACL权限

基础的chmod/chown可能被ACL(访问控制列表)覆盖:

  • 查看目录的ACL配置:
    getfacl /home/mainuser/projectname/
    
  • 如果输出中没有www-data的权限条目,添加递归权限:
    sudo setfacl -R -m u:www-data:rwx /home/mainuser/projectname/
    
  • 验证设置:
    getfacl /home/mainuser/projectname/
    
    应能看到user:www-data:rwx的条目。

3. 确认主目录的执行权限

虽然你测试过www-data能访问/home/mainuser/,但仍需确保主目录的执行权限未被意外修改:

sudo chmod 755 /home/mainuser/

执行权限允许用户进入目录并访问其子项,这是访问子目录的前提。

4. 排查SELinux限制(Ubuntu默认不启用)

如果你的系统手动安装了SELinux,可能会拦截访问:

  • 查看SELinux状态:
    sestatus
    
  • 临时关闭测试:
    sudo setenforce 0
    
    若访问恢复正常,设置目录的SELinux上下文:
    sudo chcon -R -t httpd_sys_content_t /home/mainuser/projectname/
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 13:12:15