【问题标题】:changing /var/www to /srv gets 403将 /var/www 更改为 /srv 得到 403
【发布时间】:2016-09-30 04:38:20
【问题描述】:

我习惯于使用 /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>

这是/srv 中的ls -lhA

rwxrwxrwx. 3 root root 34 Jan 29 06:51 www

777d 目录只是为了让它工作。在我找出问题所在后,我将更改此设置。 chmod -R a=rwx /srv 是我做的。

【问题讨论】:

  • 您的 CentOS 服务器是否运行 SELinux?如果是这样,您需要更改/srv 的上下文以匹配/var/www/html 的上下文。默认的 CentOS 安装将运行它。请与getenforce 联系。如果Enforcing,则启用 SELinux。
  • @MichaelBerkowski 它确实说Enforcing...我会研究一下什么是切换上下文,看看它是否有效。

标签: linux apache web permissions


【解决方案1】:

默认情况下,CentOS 以Enforcing 模式运行 SELinux,这会对文件系统实施额外的安全限制。为了让 SELinux 允许 Apache 读取文件系统位置,它们必须具有正确的 SELinux 上下文。

/var/www/html 的典型上下文是httpd_sys_content_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_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

【讨论】:

    猜你喜欢
    • 2018-06-12
    • 1970-01-01
    • 1970-01-01
    • 2015-03-25
    • 1970-01-01
    • 1970-01-01
    • 2016-08-27
    • 2015-05-30
    • 1970-01-01
    相关资源
    最近更新 更多