我正在尝试使用 CentOS 6 和 Apache 启动网络服务器。网站文件托管在 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 屏幕。一时兴起,我去了网址http://sub.domain.com/index.html;并且浏览器说我无权访问该页面-对于http://sub.domain.com/index2.txt也是如此。对于网址http://sub.domain.com/index2.html,浏览器表示该文件不存在。这告诉我我的“手指”都指向正确的方向。 知道我的问题可能是什么吗?
文件中的日志行vhost.conf
被注释掉,因为httpd
不会重新启动。我认为这是同样的问题。
既然Apache设置本身没有明显问题,那肯定是操作系统设置的权限有问题。
Apache 要求 apache 用户也可以访问父目录。
由于 CentOS 带有 SELinux,这也可能是问题所在。也许您没有对 SELinux 进行主动权限设置,但 Linux 本身具有用于远程挂载的默认 SELinux 设置。
您可以使用
ls -Z
.这是 askubuntu 中一个有趣的 OP:https ://askubuntu.com/questions/451922/apache-access-denied-because-search-permissions-are-missing
我们可以在您的问题中看到您正在运行 SELinux,并试图让 Apache 从 CIFS 共享中读取 Web 内容。默认情况下,SELinux 不允许这样做,但您可以通过设置适当的布尔值来启用它。
问题出在 SELinux 上。我挂载共享的方式,SELinux 安全上下文不允许 Apache 访问共享中的文件。SELinux How Tos中的示例恰好是针对 Apache 的。
我使用了命令
ls -Z
,不只是ls -l
,我看到挂载文件的 SELinux 安全上下文是错误的。我将fstab
文件中的行更改为我需要 SELinux 允许 Apache 访问文件的这个添加的上下文参数。