/ srv/www的Apache权限被拒绝:无法检查.htaccess文件,但无法检查/ var/www

web*_*der 3 apache permissions .htaccess denied srv

我在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开发人员)

2)添加用户a(gid 501),root,apache,nobody到上面的组(usermod -G开发者和&& usermod -G开发者apache && usermod -G开发者root && usermod -G开发者没人)

3)将所有文件夹和文件复制到/ srv/www

4)将整个/ srv/www的所有权更改为apache:开发人员(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抛出OK)

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>
Run Code Online (Sandbox Code Playgroud)

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文件夹?

web*_*der 7

我终于找到了问题的根源.这是由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
Run Code Online (Sandbox Code Playgroud)

有关SELinux在Centos的更多信息.一旦我切换到Permissive模式,我/ srv /就开始工作了.

如果您知道这样做以及为什么这样做,那么您可以通过更改以下行来永久禁用/ etc/selinux/config中的SELinux:

SELINUX=enforcing
Run Code Online (Sandbox Code Playgroud)

SELINUX=disabled
Run Code Online (Sandbox Code Playgroud)

重新启动服务器,您应该永久禁用它.

注意:从"禁用"切换到"允许"或"强制"模式时,强烈建议重新启动系统并重新标记文件系统.