莫名其妙的 Apache 403

莫名其妙的 Apache 403

我的根目录中有两个文档。其中一个文档运行正常,而另一个文档总是返回 403。

以下是来自 access_log 的输出:

xx.xx.xx.xx - - [22/Nov/2012:09:53:21 -0500] "GET /index.html HTTP/1.1" 200 6 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11"
xx.xx.xx.xx - - [22/Nov/2012:09:53:22 -0500] "GET /sales.html HTTP/1.1" 403 309 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11"

error_log 的内容如下:

[Thu Nov 22 09:53:22 2012] [error] [client xx.xx.xx.xx] (13)Permission denied: file permissions deny server access: /var/www/html/sales.html

以下是目录列表:

09:55:52 myhost /var/www/html> ls -la
total 104
drwxr-xr-x. 2 root   root    4096 Nov 21 16:05 .
drwxr-xr-x. 6 root   root    4096 Nov 21 11:06 ..
-rwxrwxrwx. 1 apache apache     6 Nov 22 09:47 index.html
-rwxrwxrwx. 1 apache apache 91196 Nov 21 16:05 sales.html

最后在httpd.conf中设置

<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

这真是让我头疼。我尝试了各种文件/目录权限,并多次重新启动 Apache,但都无济于事。有什么想法吗?为什么一个文件可以访问,而另一个却不行?

答案1

嗯,我不太了解 SELinux 或安全环境,但这似乎就是这里发生的事情。

12:10:24 myhost /var/www/html> ls -laZ
drwxr-xr-x. root   root   system_u:object_r:httpd_sys_content_t:s0 .
drwxr-xr-x. root   root   system_u:object_r:httpd_sys_content_t:s0 ..
-rwxrwxrwx. apache apache unconfined_u:object_r:httpd_sys_content_t:s0 index.html
-rwxrwxrwx. apache apache unconfined_u:object_r:user_home_t:s0 sales.html

执行以下命令似乎可以修复 Apache 的权限问题。

12:10:28 iceberg /var/www/html> sudo restorecon -r sales.html

经过再检查,我们可以看到,行为异常的文件的安全上下文现在已经不同了。

12:10:34 myhost /var/www/html> ls -laZ
drwxr-xr-x. root   root   system_u:object_r:httpd_sys_content_t:s0 .
drwxr-xr-x. root   root   system_u:object_r:httpd_sys_content_t:s0 ..
-rwxrwxrwx. apache apache unconfined_u:object_r:httpd_sys_content_t:s0 index.html
-rwxrwxrwx. apache apache unconfined_u:object_r:httpd_sys_content_t:s0 sales.html

答案2

我认为你应该看看 Monkey Boso 的说法。但如果没有,那么你可以尝试暂时使用 SELinux。不过,确实要在公共互联网上的生产服务器上执行此操作......

sudo setenforce 0

你检查后...

sudo setenforce 1

当然,别忘了将其重新打开。

相关内容