Linux

SELinux 阻止 Samba 目錄列表

  • January 10, 2011

我在 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 了。

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