У меня проблема с моим сервером 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.
Что я делаю не так?
По умолчанию SELinux предотвращает доступ веб-сервера к домашним каталогам пользователей. Если вам действительно нужен веб-сервер для доступа к файлам в домашнем каталоге пользователя, вы можете установить логическое значение httpd_read_user_content
.
# setsebool -P httpd_read_user_content 1
Вы, по-видимому, установили логическое значение httpd_enable_homedirs
, что делает что-то совсем другое.
Однако размещать веб-сайты в домашних каталогах пользователей - не лучшая идея. Например, эксплойт веб-сервера может разрешить чтение других файлов, кроме файлов веб-сайта, если вы использовали указанное выше логическое значение. Кроме того, хотя вы можете использовать это логическое значение для разрешения доступа для чтения, SELinux никогда не позволит веб-серверу записывать файлы в домашний каталог пользователя. Лучше разместить их в другом месте файловой системы, например, в подкаталоге /srv/www
, где SELinux уже разрешает доступ с типом httpd_sys_content_t
, а каталогам, которые будут содержать загруженные файлы, можно присвоить тип httpd_sys_rw_content_t
. Это невозможно сделать с домашними каталогами пользователей, не нарушив при этом ничего.
Например, вы можете создать каталог /srv/www/local.nauka
, установите его право собственности на пользователя, которого вы хотите, и сделайте все каталоги загрузки доступными для записи пользователю веб-сервера с помощью Контекст SELinux для загрузки показано выше.