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

SELinux позволяет самбе читать / var / log

TL; DR

SELinux блокирует самбу от чтения / var / log и всего содержимого

Проблема

Когда SELinux отключен, мои пользователи samba (sssd / kerberos, подключенные к AD 2008 R2) могут просматривать мой общий каталог / var / log. При включенном SELinux это не работает.

Мой / var / log / messages сниппет

Aug 29 13:28:38 servername kernel: [11625.509586] type=1400 audit(1472491718.859:35): avc:  denied  { read } for  pid=7492 comm="smbd" name="spamfilter-all.log" dev="dm-3" ino=26 scontext=system_u:system_r:smbd_t:s0 tcontext=unconfined_u:object_r:var_log_t:s0 tclass=lnk_file
Aug 29 13:28:38 servername kernel: [11625.626225] type=1400 audit(1472491718.975:36): avc:  denied  { getattr } for  pid=7492 comm="smbd" path="/var/log/remote/192.168.11.1" dev="dm-3" ino=1966096 scontext=system_u:system_r:smbd_t:s0 tcontext=unconfined_u:object_r:var_log_t:s0 tclass=lnk_file

Бег audit2allow < ~/logsnippet показывает

#============= smbd_t ==============

#!!!! This avc can be allowed using one of the these booleans:
#     samba_export_all_ro, samba_export_all_rw
allow smbd_t var_log_t:lnk_file { read getattr };

Что я уже пробовал

Из https://wiki.centos.org/HowTos/SELinux, Я попытался использовать audit2allow для создания модуля, который затем загрузил:

audit2allow < ~/logsnippet -M allow_samba_var_log
semodule -i allow_samba_var_log.pp

Модуль установлен, так как вижу его в semodule -l | grep allow но я все еще не могу получить доступ к / var / log через самбу.

Что я не могу сделать

Конечные результаты

В итоге я включил логическое значение samba_export_all_ro.

Когда SELinux находится в принудительном режиме, только первое отклонение будет зарегистрировано, потому что отказ вызывает сбой вызова.

Вам следует временно запустить вашу систему в разрешающем режиме (setenforce 0). Это вызовет все отказы регистрироваться не только первые. После того, как вы полностью опробовали свою систему, вы должны использовать audit2why и audit2allow для зарегистрированных сообщений, чтобы понять, что происходит, и создать собственный модуль.

Если вас устраивают результаты аудита, вы можете установить настраиваемый модуль.

Следите за своим журналом аудита на предмет дополнительных отказов и предпринимайте соответствующие действия.

Когда вы будете счастливы, установите принудительный режим (setenforce 1)

Примечание: вы можете

kill -USR1 <PIDofAuditd>

чтобы программа auditd очистила журнал и запустила другую, чтобы легко проверить, что вы удалили все соответствующие отказы.

Мое решение

В исходном вопросе говорилось, что я не собираюсь использовать samba_export_all_ro логическое. К сожалению, это было единственное решение, которое я нашел.

Итак, чтобы решить проблему, я запустил

setsebool samba_export_all_ro 1

Вы должны сначала убедиться, что у вас есть настройка контекстов, прежде чем возиться с пользовательскими модулями.

Взгляните на ls -Z, контекст samba_share_t должен быть установлен до того, как демоны смогут получить доступ к каталогу.

Если это не так, установите его и попробуйте еще раз:

chcon -t samba_share_t /var/log