Bri*_*ell 5 linux selinux samba smb-conf
我在 CentOS 服务器上运行 Samba,遇到一个问题:它允许我连接到服务器并查看共享,但将共享显示为空目录。我觉得这种行为很奇怪。
这是我的 smb.conf 中给定共享的节:
[seanm]
path = /home/seanm
writeable = yes
valid users = seanm, root
read only = No
Run Code Online (Sandbox Code Playgroud)
这是我在服务器端看到的:
[seanm@server ~]$ ls -l
-rw-r--r-- 1 seanm seanm 40 Jan 4 13:45 pangram.txt
Run Code Online (Sandbox Code Playgroud)
但是:
[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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
我在这里做错了什么,我能做些什么来解决它?
编辑: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
Run Code Online (Sandbox Code Playgroud)
问题已显现。
[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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
我想是时候 grep 一下 Cobbler 文档了。