linux - 为什么我的 Apache 只能访问 root 拥有的文件?

标签 linux apache permissions centos file-permissions

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

ps 辅助 | 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,它也不会工作,我需要以 root 身份实际 cp file.php file.php 才能工作。我不明白!

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

最佳答案

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... 希望对您有所帮助。

关于linux - 为什么我的 Apache 只能访问 root 拥有的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16577055/

相关文章:

php - Phalcon在Centos上安装报错: make: *** [phalcon. lo] Error 1

linux - 我如何找到一个库是否安装在 linux 中?

apache - 如何让邮件发送到特定地址触发 Web 服务器上的操作?

mysql - 树结构中用户的 CRUD 权限

asp.net-mvc - 在 ASP.Net MVC View 中显示/隐藏链接

linux - Yocto 从较新的内核版本添加驱动程序

linux - 从 .net core Linux 调用 shell 命令的问题

mysql - 将实时网站从一台服务器迁移到另一台服务器的完整步骤列表

Linux机器上的PHP api在访问时抛出连接被拒绝错误

swift - 错误域=NSCocoaErrorDomain 代码=257 无法打开 fil ""- Firebase