我把地下室里积满灰尘的一台旧 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 的命名空间环境中,在该环境中相同的限制将被放宽。