我在同一个网络上有两台服务器。一个运行 Windows Server 2016,另一个运行 CentOS 8。Windows 服务器是我的主要文件存储,它是我所有数据的所在。CentOS 服务器安装了 Windows 共享并且可以访问其文件。
在 CentOS 上,我设置了一个 samba 共享。为什么?因为我有一个 webapp 在同一台服务器上运行,我希望 webapp 控制谁可以访问什么文件。因此,与其让我们的(内部)用户直接安装 Windows 共享,他们将安装 CentOS 共享,这将是对文件的“看门人”访问。
在 samba 文件夹中,每个用户都有一个文件夹和一个配置,以允许用户仅访问他们的文件夹。webapp 被配置为将符号链接添加到链接到“真实”文件的这些文件夹中。
这就是问题所在。如果我将“普通”文件添加到用户的文件夹中,他们就可以正常访问它。但是,如果我添加一个符号链接(到已安装的 Windows 共享中的文件),它就不会出现在他们面前。我很确定这是一个 SELinux 问题。
这是设置的方式。
Windows 共享已挂载
sudo mount -t cifs //WindowsShare/data /media/WinShare \ -o ip=192.168.1.5,username=user,gid=sambashare ls -alhZ /media/WinShare drwxr-xr-x. 2 root sambashare system_u:object_r:cifs_t:s0 0 Jan 10 16:57 files
创建并使用一个 samba 共享
/srv/smb
(所有 samba 用户都在sambashare
组中)ls -alhZ /srv drwxrwx---. 2 root sambashare unconfined_u:object_r:samba_share_t:s0 6 Jan 13 11:20 smb
具有以下
/etc/samba/smb.conf
内容:[global] allow insecure wide links = yes unix extensions = no [adminShare] path = /srv/smb wide links = yes follow symlinks = yes
作为测试,我添加了一个符号链接和一个文件
ln -s /media/WinShare/files/test.pdf /srv/smb/test.pdf touch /srv/smb/file.bin
然后我尝试安装\\CentOS\adminShare
在 Windows VM 中,但我没有看到该test.pdf
文件,但我看到了file.bin
.
如何让 CentOS samba 共享访问已安装的 Windows Server 数据?在设置 CentOS 服务器时,我运行:
sudo semanage fcontext -a -t samba_share_t "/srv/smb(/.*)?"
这是让我看到file.bin
的,但我还是看不到file.pdf
。我找到了这个,但我不知道是否要更改所有内容:
sudo setsebool -P samba_export_all_rw=1
如何允许 samba 访问该/media/WinShare
文件夹?这行得通吗?
sudo semanage fcontext -a -t samba_share_t "/media/WinShare(/.*)?"
我修好了它!我必须挂载 Windows 共享并强制使用
samba_share_t
.安装时添加
context=unconfined_u:object_r:samba_share_t:s0
.