Httpd 和 selinux - 更改根目录

Httpd 和 selinux - 更改根目录

我的 centos 7 服务器和 httpd 有问题。我已经安装了 http,但我需要将主目录从 /var/www/html 更改为 /home/pawel/domains。我添加了 vhost:

<VirtualHost *:80>
    ServerName local.nauka
    ServerAlias www.local.nauka
    DocumentRoot /home/pawel/domains/nauka
    <Directory "/home/pawel/domains/nauka">
        AllowOverride All
        Require all granted
    </Directory>
    ErrorLog /home/pawel/domains/nauka/error.log
    CustomLog /home/pawel/domains/nauka/requests.log combined
</VirtualHost>

我执行这个命令:

 systemctl enable httpd && systemctl start httpd
 firewall-cmd --permanent --add-service={http,https}
 firewall-cmd --reload
 sudo setsebool -P httpd_enable_homedirs on
 sudo chcon -R -t httpd_sys_content_t ~/domains/
 sudo semanage fcontext -a -t httpd_sys_content_t "/home/pawel/domains(/.*)?"
 sudo restorecon -R ~/domains/
 setsebool -P httpd_can_network_connect 1

当我执行时

ls -lZ ~/domains/

我有

drwxr-xr-x. apache apache unconfined_u:object_r:httpd_sys_content_t:s0 nauka

But when i open webrowser with url local.nauka i have
Forbidden

You don't have permission to access / on this server.

我做错了什么?

答案1

默认情况下,SELinux 将阻止 Web 服务器访问用户主目录。如果您确实需要 Web 服务器访问用户主目录中的文件,则可以设置布尔值httpd_read_user_content

# setsebool -P httpd_read_user_content 1

你显然设置了布尔值httpd_enable_homedirs,它确实完全不同的东西

不过,将网站托管在用户主目录中并不是一个好主意。例如,如果您使用上述布尔值,Web 服务器的漏洞可能会允许读取网站文件以外的其他文件。此外,虽然您可以使用该布尔值允许读取访问,但 SELinux 永远不会允许 Web 服务器将文件写入用户主目录。最好将它们放在文件系统的其他位置,例如 的子目录中/srv/www,其中 SELinux 已经允许使用 类型进行访问httpd_sys_content_t,并且可以将包含上传文件的目录指定为 类型httpd_sys_rw_content_t。这不能在用户主目录中完成,否则可能会造成破坏。

例如,您可以创建目录/srv/www/local.nauka,将其所有权设置为所需的用户,并使用以下方式使任何上传目录可由 Web 服务器用户写入允许上传的 SELinux 上下文如上所示。

相关内容