Apache跨虚拟主机PHP读写目录权限问题求助
解决Apache跨虚拟主机目录访问的权限拒绝问题
1. 确认Apache运行用户与目录权限匹配
Apache一般以www-data(Debian/Ubuntu系)或apache(RHEL/CentOS系)用户运行,先查清楚当前Apache的运行用户:
ps aux | grep apache | head -1
然后确保目标目录的所属组包含Apache运行用户(以www-data为例):
chown -R :www-data /home/storage/public_html/comp_folders/
另外要注意父目录的执行权限——目录访问需要从根到目标目录每一层都有x权限,补全权限:
chmod o+x /home/storage/ chmod o+x /home/storage/public_html/
2. 检查PHP的open_basedir限制
如果主主机的PHP配置里开了open_basedir,会限制PHP只能访问指定目录。先查看当前配置:
<?php phpinfo(); ?>
如果结果里没有包含/home/storage/public_html/comp_folders/,就在主主机的虚拟主机配置里添加:
php_admin_value open_basedir "/home/example/public_html/:/home/storage/public_html/comp_folders/"
改完重启Apache生效:
systemctl restart apache2
3. 排查SELinux限制(如果服务器启用了SELinux)
先看SELinux状态:
getenforce
如果显示Enforcing,临时关闭测试:
setenforce 0
如果问题消失,就添加永久规则允许Apache访问该目录:
setsebool -P httpd_read_user_content 1 semanage fcontext -a -t httpd_sys_content_t "/home/storage/public_html/comp_folders(/.*)?" restorecon -Rv /home/storage/public_html/comp_folders/
4. 验证目录权限链完整性
用以下命令查看从根到目标目录的每一层权限:
namei -l /home/storage/public_html/comp_folders/
确保每一级目录的所有者/组包含Apache运行用户,且都有x执行权限。
内容的提问来源于stack exchange,提问作者Marcelo4k
相关产品推荐
相关产品推荐

