在我的 Fedora 20 上,我了解到,要允许 PHP 等进程通过 Apache 对文件进行写访问,进程所有者(在我的情况下是)apache
必须对文件具有写权限。此外,由于启用了 SELinux,文件必须具有上下文httpd_system_rw_content_t
。
看起来 SELinux 策略还阻止 httpd 访问 下的任何文件/home
。几乎每个人都同意,要解决这个问题,您想要访问的文件必须具有安全上下文httpd_user_content_t
或httpd_user_rw_content_t
。我已经确定这样做了,但 Apache 仍然说它无权访问目录。当这些文件没有 user_content 上下文时,我确实会收到 SELinux 警告。设置上下文后,我不会收到警告,但 Apache 仍然无法访问文件。 下的所有内容都/home/me/game
具有以下用户权限和安全上下文:
$ sudo chcon -Rv --type=httpd_user_rw_content_t game
$ sudo setsebool -P httpd_read_user_content 1
$ sudo chown -R :apache game
$ ll -Zd game
drwxrwxr-x. me apache unconfined_u:object_r:httpd_user_rw_content_t:s0 game
然而 Apache 告诉我:
禁止
您无权访问此服务器上的 /game。
有人知道我还可以检查什么吗?
答案1
唉……大家一定要检查权限。尽管 SELinux 设置很好,但在我想要访问的路径上有一个目录apache
不允许该用户读取/执行它。
首先,我应该看一下上面/var/log/httpd/error_log
明确写着的内容:
(13)权限被拒绝:[客户端 127.0.0.1:38628] AH00035:访问 /game/ 被拒绝(文件系统 > 路径‘/home/me/game’),因为路径的某个组件缺少搜索权限
在 Google 上查找错误,我发现这一页这也说明了问题所在。由于它没有问题,所以/var/www
我检查了目录权限:
$ ll -d /
drwxr-xr-x. 18 root root 4096 Jun 22 18:52 /
$ ll -d /var
drwxr-xr-x. 21 root root 4096 Jun 22 12:51 /var
$ ll -d /var/www
drwxr-xr-x. 8 root root 4096 Jun 21 09:19 /var/www
我在我的主目录中做了同样的事情:
$ ll -d /home
drwxr-xr-x. 4 root root 4096 Jun 13 21:31 /home
$ ll -d /home/me
drwx------. 35 me me 4096 Jun 22 19:05 /home/me
是的……一个简单的sudo chmod o=rx /home/me
动作让我开始行动。如果没有检查你们要求我做的一切,我就无法做到这一点,非常感谢你们。