尽管有 samba_share_t,SELinux 仍阻止 Samba 访问已安装的卷

尽管有 samba_share_t,SELinux 仍阻止 Samba 访问已安装的卷

我把地下室里积满灰尘的一台旧 AMD A10 APU 机器改造成 NAS,并最终用于其他一些轻型技术工作。它运行 CentOS 8.1,启动盘是我闲置的 340GB 硬盘,我有一个 2TB、2 驱动器 RAID-1 阵列,我把它组装起来,mdadm主要用于 NAS。RAID 阵列 ( /dev/md0) 被安装到/media/raid0,里面有一个名为nas设置为模式 777 的目录。我在 中有这样一行/etc/fstab

/dev/md0    /media/raid0    ext4    defaults    0    0

Samba 设置/media/raid0/nas为以名为“fileshare”的共享进行共享。Samba 的 SELinux 秘诀,我samba_share_t以递归方式应用标签/media/raid0/nas并使用命令使其永久生效semanage

但是,当我尝试在 Windows 机器上浏览时\\SERVER\fileshare,系统提示无法连接。当我尝试smbclient在服务器上使用 访问时,系统提示我被踢出NT_STATUS_BAD_NETWORK_NAME。Samba 的日志显示重复的错误,提示为canonicalize_connect_path failed for service fileshare, path /media/raid0/nas

但是,如果我使用 禁用 SELinux setenforce 0,共享就会像拨动开关一样突然正常工作。没有错误,我连接时没有任何问题。

回顾一下:

  • /media/raid0/nas路径被共享为fileshare
  • /media/raid0/nas极其宽容(模式 777)
  • 我已将samba_share_t标签应用到/media/raid0/nas,并将其设置为在 SELinux 中递归执行
  • setenforce 0如果 SELinux 被禁用( ),我可以毫无问题地连接到共享。

为什么 SELinux 仍然阻止此共享?请注意,我也尝试过移动挂载点,/raid0但得到了相同的结果。

编辑:我在审计日志中看到如下条目:

time->Mon Nov  2 22:41:39 2020
type=AVC msg=audit(1604374899.147:1102): avc:  denied  { read } for  pid=8091 
comm="smbd" name="/" dev="md0" ino=2 scontext=system_u:system_r:smbd_t:s0 tcontext=system_u:object_r:unlabeled_t:s0 tclass=dir permissive=1

答案1

审计日志条目显示您的挂载点/media/raid0没有 SELinux 标签。别管目录了nas,它不可能走到那一步!

您需要为 设置适当的 SELinux 上下文/media/raid0。恢复默认上下文mnt_t就足够了。

restorecon -v /media/raid0

答案2

看起来它试图从根目录、inode=2、目录名=/ 开始下降。这意味着您要么需要从顶部相应地调整权限,要么将 samba 放入类似 chroot 的命名空间环境中,在该环境中相同的限制将被放宽。

相关内容