Fedora配置Apache自定义站点目录报权限拒绝问题求助
问题原因
该权限报错和文件系统权限、Apache VirtualHost配置无关,是Fedora默认启用的SELinux强制访问控制拦截了httpd进程的访问请求。
Fedora默认SELinux策略对httpd服务有严格的访问约束:
- httpd进程默认仅能读取标注了
httpd_sys_content_t安全上下文的文件 - 默认禁止httpd进程访问用户家目录(
/home/路径下)的内容
即使你给目录设置了755权限、在Apache配置里放通了访问规则,SELinux层面的拦截依然会触发Permission denied错误,和你日志里的报错完全匹配。
验证方式
执行以下命令临时关闭SELinux强制模式做验证:setenforce 0
临时关闭后重新访问站点,如果页面可以正常打开,即可确认问题由SELinux规则导致。验证完成后务必执行setenforce 1重新开启SELinux,不要长期关闭SELinux降低系统安全等级。
解决方法
二选一即可,优先选择第一种符合安全规范的方案:
方案1:为站点目录配置正确的SELinux上下文(推荐)
- 为站点目录递归添加httpd可读的SELinux上下文规则:
semanage fcontext -a -t httpd_sys_content_t "/home/concasse_master/Desktop/sample/public(/.*)?" - 将规则应用到实际目录文件:
restorecon -Rv /home/concasse_master/Desktop/sample/public/ - 如果站点存在需要httpd写入的目录(比如文件上传目录、缓存目录),单独为这些目录配置可写上下文:
semanage fcontext -a -t httpd_sys_rw_content_t "/home/concasse_master/Desktop/sample/public/[需要写入的目录路径](/.*)?"
配置后同样执行restorecon -Rv对应路径即可生效。
方案2:放通httpd访问家目录的SELinux布尔值
直接开启SELinux允许httpd访问家目录的规则,执行命令:setsebool -P httpd_enable_homedirs on
参数-P表示将规则写入永久配置,重启后依然生效,执行完成后即时生效无需重启服务。
补充检查项
确认站点路径的所有上层目录(/home/concasse_master/、/home/concasse_master/Desktop/、/home/concasse_master/Desktop/sample/)都配置了可执行权限(即755权限包含的x位),保证httpd进程可以遍历进入下层目录,你已经给全路径设置755的话可跳过该检查。
配置调整完成后执行systemctl reload httpd重载Apache配置即可。
内容的提问来源于stack exchange,提问作者concasse_master
相关产品推荐
相关产品推荐

