Red Hat 服务器上的 403 Forbidden Errors

kao*_*ify 6 redhat apache-2.4

这是我第一次使用 Amazon EC2。我正在使用 Apache 2.4.6 运行服务器,但在访问公共 DNS 或弹性 IP 地址时似乎无法使其正常工作。我得到的错误信息是:

Forbidden 您无权访问此服务器上的 /index.html。

我已经检查了这个文件的权限 (755)。VirtualHost我的httpd.conf文件中有一个块,如下所示:

Listen 80
NameVirtualHost *:80

<VirtualHost *:80>
    DocumentRoot "/var/www/html"
    ServerName my-ec2-public-dns-url
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

对于 HTTP 和 HTTPS ,AWS 中的我的安全组设置都设置为Anywhere

当我检查错误日志时,它说:

AH00132:文件权限拒绝服务器访问:/var/www/html/index.html

我究竟做错了什么?

Fed*_*rra 18

尝试检查文件的现有权限:

ls -l index.html
Run Code Online (Sandbox Code Playgroud)

如有必要,请修复它们:

chmod 644 index.html
Run Code Online (Sandbox Code Playgroud)

如果所有标准权限都正确并且您仍然获得Permission Denied error,则应该检查扩展权限。例如,您可以使用该命令setenforce 0关闭 SELinux 并检查问题是否消失。如果是这样,ls -alZ可用于查看 SELinux 权限并chcon修复它们。

例如:

sudo chcon -R -v -t httpd_sys_rw_content_t index.html
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢你的帮助。就是这样。我只是在没有关闭 SELinux 的情况下使用了 `chcon` 命令。能否详细说明为什么需要这样做?SELinux 只是为文件添加了另一层保护? (3认同)
  • SELinux 是一组内核修改和用户空间工具。SELinux 有一个标签系统,每个进程和每个对象(文件、目录等)都有一个标签。然后将一个称为策略的大型规则数据库加载到内核中。内核根据策略,根据每个进程的标签和它试图访问的对象的标签来控制每个进程可以做什么。例如,SELinux 允许带有 Apache 标签 `(httpd_t)` 的进程共享标记为“只读/仅 Apache 内容”`(httpd_sys_content_thttpd_sys_content_rw_t)`的数据。参见 http://selinuxproject.org/page/Main_Page (2认同)
  • 关于 Apache 的 403 错误有很多问题,但没有一个提到 SELinux 是其原因。经过一番激烈的搜索,我终于找到了这个答案。干得好,费德里科。 (2认同)