我曾经使用/srv
作为apro的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>
这是ls -lhA
中的/srv
:
rwxrwxrwx. 3 root root 34 Jan 29 06:51 www
我777
目录只是为了让它发挥作用。在我弄清楚错误之后,我会改变这一点。 chmod -R a=rwx /srv
就是我做的。
答案 0 :(得分:1)
默认情况下,CentOS以Enforcing
模式运行SELinux,这会对文件系统施加额外的安全限制。为了让SELinux允许Apache读取文件系统位置,它们必须具有正确的SELinux上下文。
/var/www/html
的典型背景是httpd_sys_content_t
。您需要使用/srv/www
在/usr/bin/chcon
上设置该上下文。
# Set the correct context for readable web server documents
$ chcon -t httpd_sys_content_t /srv/www
要递归执行此操作,请使用chcon -R
。我不希望您需要在父/srv
上设置该上下文,而是专门针对/srv/www
。之后,请务必限制您当前拥有的chmod
的正常777
文件系统权限。
如果您的路径必须可由Apache Web服务器写入,除了使那些可写chmod
之外,您还需要设置读/写上下文:httpd_sys_rw_content_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