Samba

SELinux 允許 samba 讀取 /var/log

  • October 12, 2016

TL;博士

SELinux 阻止 samba 讀取 /var/log 和所有內容

問題

禁用 SELinux 後,我的 samba 使用者(加入 AD 2008 R2 的 sssd/kerberos)可以瀏覽我的共享目錄 /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但我仍然無法通過 samba 訪問 /var/log。

我不能做什麼

最終結果

我最終做的是啟用布爾 samba_export_all_ro。

我的解決方案

最初的問題說我不打算使用samba_export_all_ro布爾值。不幸的是,這是我找到的唯一解決方案。

所以,為了解決這個問題,我跑了

setsebool samba_export_all_ro 1

當 SELinux 處於強制模式時,只會記錄第一次拒絕,因為拒絕會導致呼叫失敗。

您應該暫時在 Permissive 模式下執行您的系統 ( setenforce 0)。這將導致記錄所有拒絕,而不僅僅是第一次。一旦你完全使用了你的系統,你應該在記錄的消息上使用 audit2why 和 audit2allow 來了解正在發生的事情並創建一個自定義模組。

如果您對審核結果感到滿意,則可以安裝自定義模組。

監控您的審核日誌以了解其他拒絕情況並採取適當的措施。

當你高興時設置執行模式 ( setenforce 1)

注意:您可以

kill -USR1 <PIDofAuditd>

讓 auditd 刷新它的日誌並啟動另一個,以便輕鬆檢查您是否已清除所有相關的拒絕。

引用自:https://serverfault.com/questions/799808