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