У меня простой сценарий: я хочу создать символическую ссылку /home/leonard/apache/sandbox/markdown
к /home/leonard/github/markdown-editor
, таким образом markdown-editor
можно просмотреть в моем браузере.
Я устанавливаю ссылку с помощью ln -s /home/leonard/github/markdown-editor /home/leonard/apache/sandbox/public/markdown
и он появляется, и по нему можно перемещаться нормально.
Однако когда я просматриваю в браузере, я получаю 403 Forbidden
. Мой audit.log
показывает следующее:
type=AVC msg=audit(1461759062.021:1232192): avc: denied { read } for pid=30107 comm="httpd" name="markdown" dev=md2 ino=25300345 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=lnk_file
type=SYSCALL msg=audit(1461759062.021:1232192): arch=c000003e syscall=4 success=no exit=-13 a0=7f88e34cff28 a1=7ffc036e2dd0 a2=7ffc036e2dd0 a3=7f88dec032e0 items=0 ppid=36009 pid=30107 auid=0 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=88286 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1461759062.022:1232193): avc: denied { getattr } for pid=30107 comm="httpd" path="/home/leonard/apache/sandbox/public/markdown" dev=md2 ino=25300345 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=lnk_file
type=SYSCALL msg=audit(1461759062.022:1232193): arch=c000003e syscall=6 success=no exit=-13 a0=7f88e34d0018 a1=7ffc036e2dd0 a2=7ffc036e2dd0 a3=1 items=0 ppid=36009 pid=30107 auid=0 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=88286 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
Я видел здесь другие вопросы, в которых спрашивали, как установить контекст для символических ссылок, но я не уверен, связаны ли они, потому что ссылка такая же, как и другие (прекрасно просматриваемые в браузере) смежные каталоги:
[leonard@ombrelle public]$ ls -alZ
drwxr-xr-x. leonard developers unconfined_u:object_r:user_home_t:s0 .
drwxr-xr-x. leonard developers unconfined_u:object_r:user_home_t:s0 ..
-rw-r--r--. leonard developers unconfined_u:object_r:user_home_t:s0 .htaccess
-rw-r--r--. leonard developers unconfined_u:object_r:user_home_t:s0 index.php
lrwxrwxrwx. leonard developers unconfined_u:object_r:user_home_t:s0 markdown -> /home/leonard/github/markdown-editor
drwxr-xr-x. leonard developers unconfined_u:object_r:user_home_t:s0 notes
Как я могу заставить символьные ссылки работать таким образом?
С помощью Йен ответ, Я побежал audit2why < /var/log/audit/audit.log
и было дано:
type=AVC msg=audit(1461761590.750:1232443): avc: denied { getattr } for pid=37683 comm="httpd" path="/home/leonard/apache/sandbox/public/markdown" dev=md2 ino=25300345 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=lnk_file
Was caused by:
The boolean httpd_enable_homedirs was set incorrectly.
Description:
Allow httpd to read home directories
Allow access by executing:
# setsebool -P httpd_enable_homedirs 1
Запуск setsebool
команда волшебным образом заставила его работать. Я просто не понимаю, как все остальные сайты у нас (/home/*/apache/sitename.tld
) работали без включения этого параметра?
Вы не говорите, какой дистрибутив / выпуск вы используете, что может быть актуальным. У меня под рукой есть только Centos 6 и 7, но инструменты для использования должны быть доступны в других дистрибутивах.
Инструменты, с которыми вам следует ознакомиться: audit2why и audit2allow.
Отправка сообщений об отказе с помощью инструментов укажет вам правильное направление.
В системе CentOS 6 я должен передать инструменты, предполагающие, что текущая политика должна позволять это (так что я думаю, вы не используете это), но установка определенного логического значения SELinux поможет решить проблему.
В системе CentOS 7 я должен передать инструменты, предполагающие, что установка определенного логического значения SELinux поможет решить проблему.