SELinux 阻止 Samba 目录列表

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 a目录在显示的共享中,以及子目录中,但是文件仍然没有出现。

我怀疑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 用户真正从中获取文件?我认为制定自己的规则和/或上下文远远达不到最优水平。

答案1

问题现在似乎已经解决了。曾是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 实际上也不是它们的适当上下文,因为它不是用户使用 get 创建的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 文档进行查找了。

答案2

你试过了吗 ....

browseable = yes

相关内容