Apache 权限被拒绝

Apache 权限被拒绝

我正在尝试使用 CentOS 6 和 Apache 启动 Web 服务器。网站的文件托管在 Windows 文件共享中。以下是文件中fstab用于挂载 Web 文件的行: \\192.168.1.10\apache /var/www/html cifs credentials=/root/secret.txt,uid=apache,gid=apache 0 0。这似乎运行良好。

这是 vhost.conf 文件:

Listen 80
<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName sub.domain.com
    DocumentRoot "/var/www/html/domain.com/sub/public_html"
    #ErrorLog /var/www/html/domain.com/sub/logs/error.log
    #CustomLog /var/www/html/domain.com/sub/logs/access.log combined
</VirtualHost>

我运行了该命令ls -l /var/www/html/domain.com/sub/public_html,以下是输出:

total 1
-rwxr-xr-x. 0 apache apache  0 Jan 26 20:43 index2.txt
-rwxr-xr-x. 0 apache apache 45 Jan 26 19:33 index.html

命令ls -l /var/www/html/domain.com/sub输出为:

total 0
drwxr-xr-x. 0 apache apache 0 Jan 26 20:00 logs
drwxr-xr-x. 0 apache apache 0 Jan 26 20:43 public_html

当我去http://sub.domain.com,我得到了通用的 Apache 屏幕。一时兴起,我访问了 URLhttp://sub.domain.com/index.html;浏览器说我没有权限访问该页面——同样的事情http://sub.domain.com/index2.txt. 对于 URLhttp://sub.domain.com/index2.html,浏览器表示文件确实不存在。这告诉我我的‘手指’都指向正确的方向。 知道我的问题可能是什么吗?

文件中的日志行vhost.conf被注释掉了,因为httpd不会用这些行重新启动。我认为这是同样的问题。

答案1

由于Apache设置本身没有明显的问题,所以一定是OS设置的权限存在问题。

Apache 要求 apache 用户也具有对父目录的访问权限。

由于 CentOS 附带 SELinux,因此这也可能是问题所在。也许您没有使用 SELinux 主动设置权限,但 Linux 本身具有用于远程挂载的默认 SELinux 设置。

您可以使用 进行检查ls -Z

以下是 askubuntu 中一个有趣的 OP:https://askubuntu.com/questions/451922/apache-access-denied-because-search-permissions-are-missing

答案2

我们从您的问题中可以看出,您正在运行 SELinux,并尝试让 Apache 从 CIFS 共享中读取 Web 内容。默认情况下,SELinux 不允许这样做,但您可以通过设置适当的布尔值来启用它。

setsebool -P httpd_use_cifs 1

答案3

问题出在 SELinux 上。我安装共享的方式,SELinux 安全上下文不允许 Apache 访问共享中的文件。示例SELinux 操作指南恰好适用于 Apache。

我使用了命令ls -Z,而不仅仅是ls -l,我发现挂载文件的 SELinux 安全上下文是错误的。我将fstab文件中的行更改为

\\192.168.1.100\apache /var/www/html cifs credentials=/root/apache.pass,uid=apache,gid=apache,context=‌​system_u:object_r:ht‌​tpd_sys_content_t:s0 0 0

我需要这个添加的上下文参数来让 SELinux 允许 Apache 访问这些文件。

相关内容