我在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时问题消失这一事实判断 – 这两种情况对于生产环境都是不可接受的.目录需要什么样的上下文才能使Samba用户真正从中获取文件?我认为rolling your own rules and/or context是非常次优的.
解决方法
现在问题似乎已经解决了.这是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,但是表现为拉里.
我最好的猜测是它与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文档了.