我在Centos 6.5上遇到了问题:
[2012年12月28日星期一12:10:52] [a] [客户端127.0.0.1](13)权限被拒绝:/srv/www/website/.htaccess pcfg_openfile:无法检查htaccess文件,确保它是可读的
基本上,我正在构建一个全新的服务器并尝试将我的所有网站迁移到/ srv / www文件夹而不是/ var / www,因为它似乎是未来的标准(有关于它的整个讨论,所以只是谷歌)。
我做了什么:
1)添加了一个新组(groupadd developers)
2)向上述组添加了用户a(gid 501),root,apache,nobody (usermod -G开发者a&& usermod -G开发者apache&& usermod -G开发者root&& usermod -G开发者无人)
3)复制所有文件夹&文件到/ srv / www
4)将整个/ srv / www的所有权更改为apache:developers(chown -R apache:developers / srv / www)
5)更改模式,因此/ srv / www是组可读/可写/可搜索的(chmod -R 2775 / srv / www)
6)将'umask 002'添加到/ etc / sysconfig / httpd的末尾,使其以组可写模式运行
7)添加虚拟主机并添加到/etc/httpd/conf.d/vhosts.conf(服务httpd configtest抛出正常)
NameVirtualHost *:80
NameVirtualHost *:443
SSLStrictSNIVHostCheck off
<VirtualHost *:443>
ServerAdmin webmaster@domain.ext
DocumentRoot /srv/www/test
ServerName test.domain.com
ServerAlias test.domain
SSLEngine on
SSLCertificateFile /etc/httpd/certs/domain.com/server.crt
SSLCertificateKeyFile /etc/httpd/certs/domain.com/server.key
<Directory /srv/www/test>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>
8)重启服务器 9)手动启动httpd,因为它要求提供SSL证书密码,否则自动启动失败(需要重新启动后如何自动启动它)
我仍然收到相同的上述错误消息。
然后,我尝试将/ etc / passwd中的主文件夹更改为/ srv / www(服务器重启)的apache用户,但仍然没有快乐,即权限被拒绝。我甚至重命名了旧的/ var / www文件夹,并在/ var / www中创建了一个符号链接到/ srv / www。另一个尝试是重新回到root:root,apache:apache和:两者的开发人员组。
/ srv / www / [不工作]
drwxr-XR-X。 2根root(cgi-bin,错误,html,图标)
drwxrwsr-X。 5个apache开发人员(所有其他网站文件夹)
-rwxrwsr-X。 1个apache开发人员(所有文件)
/ SRV /
drwxrwsr-X。 4个apache开发者www
/ var / www [工作]
drwxr-XR-X。 2根root(cgi-bin,错误,html,图标)
drwxrwxr-X。 3个apache开发人员(所有其他网站文件夹)
-rwxrwxr-X。 1个apache开发人员(所有网站文件)
然后,只要将我的网站文件夹中的一个复制到/ var / www并在/etc/httpd/conf.d/vhosts.conf中指向路径,它就会开始正常工作!
是否知道为什么不在/ SRV / WWW文件夹中工作?
答案 0 :(得分:6)
我终于找到了问题的根源。这是由SELinux策略引起的,这些策略覆盖了基本的传统自主访问控制(DAC)方法,例如通常用于控制用户文件访问的文件权限或访问控制列表(ACL)!
$ sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Mode from config file: enforcing
Policy version: 24
Policy from config file: targeted
$ setenforce
usage: setenforce [ Enforcing | Permissive | 1 | 0 ]
$ setenforce Permissive
$ sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: permissive
Mode from config file: enforcing
Policy version: 24
Policy from config file: targeted
有关SELinux的更多信息Centos。一旦我切换到Permissive模式,我/ srv /就开始工作了。
如果您知道这是为什么以及为什么这样做,那么您可以通过更改以下行来永久禁用/ etc / selinux / config中的SELinux:
SELINUX=enforcing
到
SELINUX=disabled
重新启动服务器,您应该永久禁用它。
注意:从Disabled切换到Permissive或Enforcing时 模式,强烈建议重新启动系统 文件系统重新标记。
答案 1 :(得分:0)
您确定用户&#34; apache&#34;可以跨文件夹&#34; / src&#34; ? 什么是文件夹&#34; / src&#34;的所有者和权限。 ?