У меня две машины с одинаковыми настройками JBoss и HTTPD. Они начали с одной и той же установки RedHat 7, и последовал один и тот же процесс, чтобы установить все на обеих машинах.
На одной машине все прекрасно работает с SELinux, работающим с настройками по умолчанию. Я никогда не касался SELinux на нем.
На другом компьютере, когда я пытаюсь получить к нему доступ в веб-браузере, Я получаю 403 запрещенных сообщения об ошибке. Когда я поискал в Интернете почему, я нашел предложение отключить на нем SELinux и посмотреть, сработает ли он тогда. Итак, я запустил setenforce 0
, перезапустил jboss и httpd, обновил мой браузер, и запретное сообщение исчезло, все снова заработало. Я снова включаю SELinux с помощью setenforce 1
, перезапускаю приложения, обновляю браузер, и запрещенное сообщение возвращается.
Итак, на моей второй машине определенно что-то не так с SELinux. Это странно, потому что я не трогал SELinux ни на одной из машин, пока не попытался выключить его на второй. Я проверил, что на первой машине, когда я запускаю getenforce
, он возвращает Enforcing
.
У меня вопрос - как мне просмотреть конфигурации SELinux на каждой машине? Как я могу сравнить их, чтобы узнать, в чем разница между ними, и отредактировать или скопировать их, чтобы я мог запускать SELinux на втором компьютере, не мешая моим приложениям, как на моем первом компьютере?
Изменить - Я выполнил эту команду для поиска в журналах аудита:
cat /var/log/audit/audit.log | grep httpd | grep denied
Первая строка повторяется несколько раз. Последние две строки появлялись только один раз в самом конце.
type=AVC msg=audit(1468877854.297:22110): avc: denied { getattr } for pid=5193 comm="httpd" path="/var/www/html/sfo/index.htm" dev="dm-0" ino=70334613 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:var_t:s0 tclass=file
type=AVC msg=audit(1468877854.297:22111): avc: denied { read } for pid=5193 comm="httpd" name="index.htm" dev="dm-0" ino=70334613 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:var_t:s0 tclass=file
type=AVC msg=audit(1468877854.297:22111): avc: denied { open } for pid=5193 comm="httpd" path="/var/www/html/sfo/index.htm" dev="dm-0" ino=70334613 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:var_t:s0 tclass=file
Я не вижу подобных сообщений на машине, на которой работает SELinux без неправильной блокировки страницы. Обе машины имеют одинаковые флаги разрешений, установленные для / var, / var / www, / var / www / html, / var / www / html / sfo и /var/www/html/sfo/index.htm[1299ptingAll в каталогах указано drwxr-xr-x
, в файле index.htm указано -rw-r - r -
. Все они принадлежат пользователю root и группе root. md5sum
говорит, что / etc / sudoers идентичны. В /etc/sudoers.d на обеих машинах ничего нет.
Обе машины имеют одинаковый вывод для getsebool -a | grep httpd
:
httpd_anon_write --> off
httpd_builtin_scripting --> on
httpd_can_check_spam --> off
httpd_can_connect_ftp --> off
httpd_can_connect_ldap --> off
httpd_can_connect_mythtv --> off
httpd_can_connect_zabbix --> off
httpd_can_network_connect --> off
httpd_can_network_connect_cobbler --> off
httpd_can_network_connect_db --> off
httpd_can_network_memcache --> off
httpd_can_network_relay --> off
httpd_can_sendmail --> off
httpd_dbus_avahi --> off
httpd_dbus_sssd --> off
httpd_dontaudit_search_dirs --> off
httpd_enable_cgi --> on
httpd_enable_ftp_server --> off
httpd_enable_homedirs --> off
httpd_execmem --> off
httpd_graceful_shutdown --> on
httpd_manage_ipa --> off
httpd_mod_auth_ntlm_winbind --> off
httpd_mod_auth_pam --> off
httpd_read_user_content --> off
httpd_run_stickshift --> off
httpd_serve_cobbler_files --> off
httpd_setrlimit --> off
httpd_ssi_exec --> off
httpd_sys_script_anon_write --> off
httpd_tmp_exec --> off
httpd_tty_comm --> off
httpd_unified --> off
httpd_use_cifs --> off
httpd_use_fusefs --> off
httpd_use_gpg --> off
httpd_use_nfs --> off
httpd_use_openstack --> off
httpd_use_sasl --> off
httpd_verify_dns --> off
С SELinux файловая система имеет дополнительные "разрешения" сверх обычных UNIX. Если вы запустите ls -Z ...
( -Z
- это расширение SELinux для ls (1)
) в файлах под / var / www / html
на обеих машинах, я подозреваю, вы увидите следующее :
На сервере A:
drwxr-xr-x корневая корневая system_u: object_r: httpd_sys_content_t / var / www / html /
На сервере B:
drwxr-xr-x корневая корневая system_u: object_r : var_t /var/www/html/[1236 sizesetc.[1237 impression На сервере A этот правильно помечен, чтобы Apache мог читать этот каталог с активным SELinux. На сервере B каталог не помечен правильно, чтобы Apache мог его читать, пока активен SELinux.
Чтобы исправить это, попробуйте сначала запустить restorecon -Rvn / var / www /
, который покажет вам, как файловая система будет изменена в соответствии с текущей политикой SELinux. Если это кажется разумным, удалите флаг -n
и перезапустите.
Также есть полезная справочная страница httpd_selinux (8)
, которая документирует SELinux в отношении Apache.