Linux
SELinux 阻止 Samba 目錄列表
我在 CentOS 伺服器上執行 Samba,我遇到了一個問題,它允許我連接到伺服器並查看共享,但將共享顯示為空目錄。我覺得這種行為很奇怪。
這是給定共享的我的 smb.conf 中的節:
[seanm] path = /home/seanm writeable = yes valid users = seanm, root read only = No
這是我在伺服器端看到的:
[seanm@server ~]$ ls -l -rw-r--r-- 1 seanm seanm 40 Jan 4 13:45 pangram.txt
但是:
[seanm@client ~]$ smbclient //server/seanm -U seanm -W WORKGROUP Enter seanm's password: Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.0.33-3.29.el5_5.1] smb: \> ls . D 0 Fri Jan 7 10:08:55 2011 .. D 0 Fri Jan 7 07:58:31 2011 58994 blocks of size 262144. 50356 blocks available
此行為在 Windows 客戶端和 Linux 客戶端系統上都存在。該行為在防火牆打開和防火牆關閉的情況下都存在,所以不是那樣的。/var/log/messages 和 /var/log/secure 都沒有關於 Samba 的任何抱怨。如果我 mkdir 共享中的一個目錄,則會顯示該目錄以及子目錄,但文件仍然沒有出現。
我懷疑 SELinux 是個問題:以防萬一,這裡是相關設置。
[root@server ~]# getsebool -a | grep samba samba_domain_controller --> off samba_enable_home_dirs --> on samba_export_all_ro --> off samba_export_all_rw --> off samba_share_fusefs --> off samba_share_nfs --> off use_samba_home_dirs --> on virt_use_samba --> off
我在這裡做錯了什麼,我能做些什麼來解決它?
編輯:SELinux 可能是問題所在,當我將 SELinux 設置為“許可”或問題時,問題就消失了
setsebool -P samba_export_all_rw on
——這兩種情況對於生產環境都是不可接受的。目錄需要什麼樣的上下文才能讓 Samba 使用者真正從中獲取文件?我認為滾動你自己的規則和/或上下文是非常次優的。
現在問題似乎解決了。它是SELinux;未正確設置主目錄的上下文。
[seanm@server /home]$ ls -alZ drwx------ larry stooges system_u:object_r:home_root_t larry drwx------ seanm seanm system_u:object_r:home_root_t seanm
問題出現了。
[seanm@server /home]$ chcon -hR system_u:object_r:user_home_dir_t /home/seanm [seanm@server /home]$ restorecon -Rv /home/seanm [seanm@server /home]$ ls -alZ drwx------ larry stooges system_u:object_r:home_root_t larry drwx------ seanm seanm system_u:object_r:user_home_dir_t seanm
問題不是針對 seanm 展示的,而是針對 larry 展示的。
我最好的猜測是它與 Cobbler 相關:“larry”和“seanm”都是在使用 Cobbler 的安裝過程中創建的,我注意到 system_u 對他們來說也不是一個合適的上下文,因為它不是使用者創建的
useradd
得到:[root@server /home]# useradd selinuxtest [seanm@server /home]$ ls -alZ drwx------ larry stooges system_u:object_r:home_root_t larry drwx------ seanm seanm system_u:object_r:user_home_dir_t seanm drwx------ selinuxtest selinuxtest user_u:object_r:user_home_dir_t setest
我想是時候通過 Cobbler 文件 grep 了。