我正在学习 php,在编写文件上传页面时遇到了问题。在 docroot 中,我有 index.php(调用 fopen 的页面)和一个名为“images”的目录,我希望将临时文件移动到该目录。但是,fopen 失败,并显示“权限被拒绝”(参见 /var/log/httpd/error_log )。调用 fopen 请求写入。
我搜索了网络,发现问题出在图片目录的权限上。我首先将目录的组所有者更改为非 root 组,并将“apache”添加到该组。组对该目录具有 w 权限。(我发现我的 Apache 以用户 apache 的身份运行,并且
# ps aux| grep httpd
这失败了。(应该可以,不是吗?)
再次,我徒劳地将整个 images/ 目录的所有权移交给“apache”。
是的,我在完成上述每个更改后都重新启动了服务器。
谢谢,
亚提
PS:我的名声不允许我在 8 小时内自行回答,因此决定在这里进行编辑。在 Ignacio 的帮助下,更改图像目录的 SELinux 上下文的命令是:
# chcon -R -h -t httpd_sys_rw_content_t ./images
从 docRoot 内部。
再次感谢。
答案1
SELinux 阻止 HTTPd 写入该目录。使用chcon
将 的文件上下文更改images/
为httpd_sys_rw_content_t
,如果这样可以正常工作,则使用semanage
使其永久生效。