www-data用户无法访问文件权限异常求助:如何正确设置权限?
问题排查与解决方法
1. 先处理ACL权限(权限位后的+号是核心线索)
你看到目录权限末尾的+了吗?这说明该目录设置了ACL访问控制列表,标准的chmod/chown设置会被ACL规则覆盖。先查看当前ACL规则:
getfacl /home/deploy/rpma/public getfacl /home/deploy/rpma/public/index.html
如果输出里www-data用户没有读/执行权限,直接添加:
setfacl -m u:www-data:rx /home/deploy/rpma/public setfacl -m u:www-data:r /home/deploy/rpma/public/index.html
要是确认不需要ACL,也可以直接清空:
setfacl -b /home/deploy/rpma/public setfacl -b /home/deploy/rpma/public/index.html
2. 检查父目录的遍历权限
别只盯着public目录,www-data需要能一路从/home走到public,每个父目录都得有执行权限(x)。依次执行以下命令查看权限:
ls -ld /home ls -ld /home/deploy ls -ld /home/deploy/rpma
比如如果/home/deploy是drwx------权限,www-data根本进不去,得修改:
chmod o+x /home/deploy chmod o+x /home/deploy/rpma
或者把www-data加到deploy组(更安全):
usermod -aG deploy www-data chmod g+x /home/deploy /home/deploy/rpma
3. 排查SELinux(针对RHEL/CentOS等发行版)
如果你的服务器用的是这类系统,SELinux可能会拦截访问。先查看状态:
sestatus
要是显示Enforcing,临时关闭测试:
setenforce 0
如果能正常访问了,别直接永久关闭,给目录添加SELinux标签:
chcon -R -t httpd_sys_content_t /home/deploy/rpma/public
4. 核对Nginx配置
确认Nginx的server块里root路径确实指向/home/deploy/rpma/public,而且没有多余的deny规则:
server { listen 80; server_name your-domain.com; root /home/deploy/rpma/public; index index.html; location / { try_files $uri $uri/ =404; # 这里不要写 deny all; 之类的规则 } }
修改后重启Nginx:
systemctl restart nginx
内容的提问来源于stack exchange,提问作者stats
相关产品推荐
相关产品推荐

