我的 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 上下文如上所示。