Linux 将/var/www更改为/srv将获得403

Linux 将/var/www更改为/srv将获得403,linux,apache,web,permissions,Linux,Apache,Web,Permissions,我习惯于使用/srv作为apache的webroot。创建新的CentOS计算机后,默认DocumentRoot设置为/var/www/html。我已经更改了这个/srv,但是当我访问我的域名时,我得到了403 从创建的默认httpd.conf文件中,我更改了以下内容: DocumentRoot "/srv/www/html" <Directory "/srv/www"> AllowOverride None Require all granted </Dir

我习惯于使用
/srv
作为apache的webroot。创建新的CentOS计算机后,默认DocumentRoot设置为
/var/www/html
。我已经更改了这个
/srv
,但是当我访问我的域名时,我得到了403

从创建的默认httpd.conf文件中,我更改了以下内容:

DocumentRoot "/srv/www/html"

<Directory "/srv/www">
    AllowOverride None
    Require all granted
</Directory>
<Directory "/srv/www/html">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

777
d目录只是为了让它工作。我会在找出问题后改变这个
chmod-ra=rwx/srv
就是我所做的。

默认情况下,CentOS在
强制执行
模式下运行SELinux,强制执行文件系统上的其他安全限制。为了使SELinux允许Apache读取文件系统位置,它们必须具有正确的SELinux上下文

/var/www/html
的典型上下文是
httpd\u sys\u content\u t
。您需要使用
/usr/bin/chcon
/srv/www
上设置该上下文

# Set the correct context for readable web server documents
$ chcon -t httpd_sys_content_t /srv/www
要递归地执行此操作,请使用
chcon-R
。我不希望您需要在父级
/srv
上设置该上下文,而是专门针对
/srv/www
。之后,请确保限制当前拥有的
777
文件系统的正常
chmod
文件系统权限

如果您有Apache web服务器必须可写的路径,除了使用
chmod
使这些路径可写之外,还需要设置读/写上下文:
httpd\u sys\u rw\u content\u t

要列出Apache使用的和SELinux已知的上下文以及它们所属的路径,请运行:

$ semanage fcontext -l | grep httpd
要检查现有文件上的上下文,请将
-Z
标记用于
ls
。这可以帮助您为新目录匹配正确的上下文

$ ls -lZ /var/www

drwxr-xr-x. 2 root root system_u:object_r:httpd_sys_script_exec_t:s0 4096 Jan  4 02:25 cgi-bin
drwxr-xr-x. 2 root root system_u:object_r:httpd_sys_content_t:s0     4096 Jan  4 02:25 html

您的CentOS服务器是否运行SELinux?如果是这样,您需要更改
/srv
的上下文以匹配
/var/www/html
的上下文。默认的CentOS安装将运行它。使用
getenforce
进行检查。如果
强制执行
,SELinux被启用。@MichaelBerkowski它确实说
强制执行
。。。我将研究什么是切换上下文,看看这是否有效。
$ ls -lZ /var/www

drwxr-xr-x. 2 root root system_u:object_r:httpd_sys_script_exec_t:s0 4096 Jan  4 02:25 cgi-bin
drwxr-xr-x. 2 root root system_u:object_r:httpd_sys_content_t:s0     4096 Jan  4 02:25 html