Назад | Перейти на главную страницу

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.

Что я делаю не так?

По умолчанию 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 для загрузки показано выше.