我正在运行 CentOS 6.3 和 Apache 2.2.15。
我使用的是 Apache 的默认设置。我提供的文件位于
/var/www/html
以下是其中两个
[root@gisele html]# ls -l *-production-1.0.6.pdf
-r--r--r--. 1 root root 171769 Jan 1 21:12 copy-installation-production-1.0.6.pdf
-r--r--r--. 1 root root 171769 Jan 1 20:59 installation-production-1.0.6.pdf
复制文件是通过执行以下操作创建的文件
cp installation-production-1.0.6.pdf copy-installation-production-1.0.6.pdf
通过虚拟主机映射我可以访问这些文档。
copy-installation-production-1.0.6.pdf
将提供服务。
installation-production-1.0.6.pdf
返回 403 禁止。
唯一的区别是,原始文件是从另一台机器复制到服务器上的。
知道为什么原始文件无法使用但副本可以使用吗?
答案1
嗯,禁用 SELinux 只是一个临时的解决办法,而不是解决方案。我们不想让 Dan Walsh 哭泣;)
请尝试以下选项之一:
chcon --reference=/var/www/html/FileThatCanBeServed /var/www/html/FileWithError403
或者
chcon -R --reference=/var/www/html /var/www/html/
或者
chcon -R -t httpd_sys_content_t /var/www/html/
始终检查可使用 访问的文件的 SELinux 上下文ls -lZ
,然后使用chcon
选项--reference
将上下文复制到其他文件。
答案2
啊,SELinux。和这个问题一样的问题: Apache 提供一些文件,其他文件则出现 403
关闭 SELinux 就是解决方案。
http://www.crypt.gen.nz/selinux/disable_selinux.html
CentOS 安装中应该会出现提示
Is this machine primarily a
Server (1) / Desktop (2)
1/2...? 1
Would you like to run into bizarre errors later on?
Y/N...? y
Installing SELinux.