Ubuntu服务器上Nginx的www-data用户无法访问目录求助
解决Nginx的www-data用户无法访问指定目录的问题
1. 排查AppArmor访问限制
Ubuntu默认启用AppArmor,它会限制Nginx进程的访问路径范围,这是此类问题最常见的原因:
- 查看Nginx的AppArmor状态:
若输出中sudo aa-statusnginx处于enforce模式,说明规则在生效。 - 临时切换到宽容模式测试:
再次执行sudo aa-complain /etc/apparmor.d/usr.sbin.nginxsudo -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 - 临时关闭测试:
若访问恢复正常,设置目录的SELinux上下文:sudo setenforce 0sudo chcon -R -t httpd_sys_content_t /home/mainuser/projectname/
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

