允许 Samba 共享访问已挂载的远程文件存储

允许 Samba 共享访问已挂载的远程文件存储

我在同一个网络上有两台服务器。一台运行 Windows Server 2016,另一台运行 CentOS 8。Windows 服务器是我的主要文件存储,所有数据都存放在这里。CentOS 服务器已安装 Windows 共享,可以访问其文件。

在 CentOS 上,我设置了一个 samba 共享。为什么?因为我在同一台服务器上运行了一个 Web 应用程序,我希望该 Web 应用程序控制谁可以访问哪个文件。因此,我们的(内部)用户不会直接安装 Windows 共享,而是安装 CentOS 共享,该共享将“把关”对文件的访问。

在 samba 文件夹中,每个用户都有文件夹,并且有一个配置允许用户只访问自己的文件夹。Web 应用程序配置为在这些文件夹中添加符号链接,以链接到“真实”文件。

问题就在这里。如果我将“普通”文件添加到用户的文件夹中,他们可以正常访问它。但如果我添加符号链接(到已安装的 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
    

然后我尝试在 Windows VM 中安装\\CentOS\adminShare,但我看不到该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(/.*)?"

答案1

我修好了!我必须挂载 Windows 共享并强制上下文samba_share_t

挂载时添加context=unconfined_u:object_r:samba_share_t:s0

sudo mount -t cifs //WindowsShare/data /media/WinShare \
    -o ip=192.168.1.5,username=user,gid=sambashare,context=unconfined_u:object_r:samba_share_t:s0

相关内容