![莫名其妙的 Apache 403](https://linux22.com/image/797065/%E8%8E%AB%E5%90%8D%E5%85%B6%E5%A6%99%E7%9A%84%20Apache%20403.png)
我的根目录中有两个文档。其中一个文档运行正常,而另一个文档总是返回 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
当然,别忘了将其重新打开。