【问题标题】:How come my Apache can only access root owned files?为什么我的 Apache 只能访问 root 拥有的文件?
【发布时间】:2013-05-10 17:36:28
【问题描述】:

在 centos 6.4 上运行 apache 并且我的 web 服务器看不到任何文件,除非 root 用户创建或复制它们。

ps aux | grep apache 表明 apache 以 apache 用户而不是 root 用户身份运行。 我在文件上尝试了chown apache:apache。 我什至在文件上设置了chmod 777

-rwxrwxrwx. 1 apache apache 2300 May 15 17:46 example.php

我仍然收到 http 500 错误,还有什么问题?

即使我将文件 chown 到 root:root,它也不会工作,我实际上需要 cp file.php file.php 作为 root 才能工作。没看懂!

chcon -t httpd_sys_content_t example.php 让我到达那里! - 谢谢克里斯。 这是否意味着我需要更改我的 FTP 用户的安全上下文设置,以便他们可以上传这样的文件,还是我需要更改 SELinux 中的规则以允许执行更广泛的文件?

【问题讨论】:

  • 对于不起作用的文件,我得到“unconfined_u:object_r:user_home_t:s0”,对于有效的文件,我得到“unconfined_u:object_r:httpd_sys_content_t:s0”。禁用 SELinux 确实可以正确访问文件

标签: linux apache permissions centos file-permissions


【解决方案1】:

SELinux 可能是个问题。

ls -lZ example.php

要排除 SELinux,您可以:

getenforce

然后

setenforce 0

然后尝试再次访问此文件...

这将暂时将 SELinux 置于许可模式。 您可能必须更改文件的上下文!告诉我们进展如何,我们将从那里着手。

更新:

正如预期的那样,SELinux 正在阻止 apache 访问该文件。如果你信任这个文件,你可以改变它的上下文:

chcon -v --type=httpd_sys_content_t example.php

如果有多个文件,你可以使用-R标志,所以:

chcon -vR --type=httpd_sys_content_t /html/

如您所见,使用ls 您有-Z 标志来显示SELlinux 上下文。您可以尝试将此标志与其他程序一起使用,例如 ps

为了解决 SELinux 问题,我推荐 sealert - setroubleshoot-server 的一部分。

我怎么知道您最有可能使用 SELinux?您的文件系统已标记。 我怎么知道你的fs被贴上了标签? -rwxrwxrwx**.** - 权限末尾的点表示 fs 已标记。

别忘了更改权限!你真的不想要777... 希望对您有所帮助。

【讨论】:

  • 对于不起作用的文件,我得到“unconfined_u:object_r:user_home_t:s0”,对于有效的文件,我得到“unconfined_u:object_r:httpd_sys_content_t:s0”。禁用 SELinux 确实可以正确访问文件
  • 非常感谢克里斯,你帮我省了很多麻烦。根据您的建议,我将开始研究 Sealert。
【解决方案2】:

如果您启用了 suphp,那么具有 777 权限的文件将无法正常工作并给出 500 错误,请更改权限 644。

如果您仍然面临同样的问题,请检查错误日志。

你为什么要尝试使用相同名称的 'cp file.php file.php',复制使用下面的其他名称或复制到 file.php 不存在的另一个位置。

cp file.php file.php-bak

cp file.php another-dir/file.php

【讨论】:

  • 我不确定 suphp 是什么,但我认为我没有启用它?我只是观察到以 root 用户身份复制文件使它们正常运行。 644 权限也不起作用
猜你喜欢
  • 2013-08-30
  • 2021-06-21
  • 2020-12-20
  • 1970-01-01
  • 2013-01-31
  • 1970-01-01
  • 1970-01-01
  • 2010-10-08
  • 2015-09-10
相关资源
最近更新 更多