Samba
SELinux 允許 samba 讀取 /var/log
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。我不能做什麼
- 禁用 SELinux
- https://lists.samba.org/archive/samba/2006-May/120632.html建議修改原始碼,但我不確定是否要嘗試修改 selinux 包的原始碼(selinux-policy-targeted-sources在此連結中命名)。如有必要,有人可能會說服我這樣做。
最終結果
我最終做的是啟用布爾 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 刷新它的日誌並啟動另一個,以便輕鬆檢查您是否已清除所有相關的拒絕。