CentoOS 7 Samba 共享 USB NTFS

CentoOS 7 Samba 共享 USB NTFS

似乎无法找到包含我的情况的所有具体情况的答案。我按照中的说明进行操作在 CentOS7 上与 samba 共享已安装的驱动器,但仍然有问题。我有 CentOS 7 和连接到它的 NTFS USB 驱动器。我想使用 Samba 与我的其他 Windows 计算机 (Windows 10) 共享该驱动器。我已成功将驱动器安装到 /mymnt/win 文件夹,并且我可以从 Linux 主机读取驱动器并查看 Windows 10 计算机的共享。但是,当我尝试从 Windows 浏览共享时,我收到一条消息“您无权访问 \mediapc\LewisData7TB”。我也可以从 Windows 匿名访问纯 Linux 共享。

这是相关的 /etc/fstab 文件条目:

/dev/sda2 /mymnt/win ntfs-3g rw,umask=0000,默认值 0 0 -o context="system_u:object_r:samba_share_t:s0"

这是我的 /etc/samba/smb.conf 文件(homes/printers/print$ 均被注释掉):

[global]
workgroup = LEWISFAM
server string = Samba Server %v
netbios name = mediapc
dns proxy = no
security = user
map to guest = Bad User
passdb backend = tdbsam

printing = cups
printcap name = cups
load printers = yes
cups options = raw

[Anonymous]
path = /shares/anonymous
guest ok = yes
browsable = yes
writeable = yes

[LewisData7TB]
path = /mymnt/win
browsable =yes
writable = yes
guest ok = yes
read only = no

当我尝试配置 SELinux 时,我执行以下命令:

chcon -t samba_share_t /mymnt/win/

我收到此错误:

chcon:无法将 /mymnt/win/ 的上下文更改为 system_w:object_r:samba_share_t:s0:不支持操作。

所以,我的目标是从 Windows 访问读取/写入该驱动器,但还没有完全实现。

答案1

我本来打算发布更多错误消息作为某种形式的进展,但我想再次尝试一些命令,发现其中一个命令成功结束了我的旅程,并且由于我没有看到已经发布的答案,所以我我将从 Kenneth 那里获取对我有帮助的内容,然后自己将其添加到此处:

这给我在带有 exFAT USB 外部硬盘驱动器的 Fedora Linux 35 工作站上带来了问题,我已经在 Files/Nautilus 中很好地使用了该驱动器,该驱动器仅适用于我的用户帐户。

为了确保我不仅仅是不熟悉 Samba,我还使用了诸如man smb.conf以更多知识来编辑/etc/samba/smb.conf文件以及testparm验证配置等命令。

sudo mount /dev/sd?? '/mnt/...' -o 'nosuid,nodev,nofail,noauto,x-gvfs-show,context="system_u:object_r:samba_share_t:s0"'

https://ask.fedoraproject.org/en/question/62838/selinux-ntfs-samba-share-problemworkaround/

这是完成我的解决方案的命令。

它使用与我在 Fedora Linux 发行版的教程页面中找到的相同的屏蔽文件系统属性的方法:https://docs.fedoraproject.org/en-US/quick-docs/samba/ https://www.howtoing.com/setup-samba-file-sharing-for-linux-windows-clients/

sudo semanage fcontext --add --type "samba_share_t" /mnt/...
sudo restorecon -R /mnt/...

我能够使用这些更广泛的命令来测试这是必要的:

> sudo setenforce Permissive
> sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Memory protection checking:     actual (secure)
Max kernel policy version:      33

https://www.thegeekdiary.com/centos-redhat-how-to-set-selinux-modes/ 我还注意到,未安装时的裸目录是 a mnt_t,而安装后且无法使用 Samba 时,裸目录是dosfs_t

我用这个命令检查了这些:关键 ls -ldZ在哪里。对我来说已经足够了,但有些用于更详细的显示。Zlgetfacls

https://superuser.com/questions/617777/how-do-i-auto-mount-a-usb-drive-that-all-users-can-write-to 我也曾想到过usermount 选项,但现在没有必要了,至少对于我来说解决这个问题是不必要的。

另外 2 个 SELinux 命令可能会有帮助,但我无法使用它们生成任何控制台或日志输出,无论是否带有“-d”选项,audit2why以及audit2allow. https://opensource.com/article/18/12/troubleshooting-hardware-problems-linux

防火墙命令允许其他系统连接。

我可以使用这些在本地进行测试:

> smbclient --user="<user>%<password>" -L '//<machine>/<share>'

    Sharename       Type      Comment
    ---------       ----      -------
    print$          Disk      Printer Drivers
    ...             Disk      
    smbtest         Disk      testing
    IPC$            IPC       IPC Service (Samba #.#.#)
SMB1 disabled -- no workgroup available

> smbclient --user="<user>%<password>" '//<machine>/<share>' --command 'ls'
`NT_STATUS_ACCESS_DENIED listing \*`
> journalctl -u smb -b
......
chdir_current_service: vfs_ChDir(<path>) failed: Permission denied. Current token: uid=#, gid=#, 1 groups: #
......
...NT_STATUS_INTERNAL_ERROR...

我已经/etc/fstab通过磁盘 GUI 设置了自定义手动安装线,并且还手动将其安装在我的用户下,/mnt/...而不是仅安装在我的用户下,/run/...试图打开更多用户和组的权限,但其他人自始至终都有读取权限,所以这是误导性的。

我可能已经尝试过诸如此类的文章中的其他方法,但在混乱的情况下遇到了这些错误消息,并认为它们完全无效: 在 CentOS7 上与 samba 共享已安装的驱动器

mount: <path>: wrong fs type, bad option, bad superblock on /dev/sd??, missing codepage or helper program, or other error.

SELinux: mount invalid.  Same superblock, different security settings for (dev sd??, type exfat)
> sudo semanage fcontext --add --type "samba_share_t" '/mnt/...'
ValueError: File specification can not include spaces

无论如何,这是不正确的,因为无论如何我都需要安装提到的掩码选项,所以我不需要找出正确的文件上下文模式,例如后缀(/.*)?或带有通配符的部分名称,我在尝试这个时有这个想法命令:sudo semanage fcontext -l | less

这对我来说不起作用,因为我看到我无法通过重新安装来更改安全设置,因此为什么它后来只能使用context我认为已经完成的选项来工作。

既然我已经更新了文件系统表文件,那么使用终端挂载驱动器与磁盘 GUI 之间也可能仍然存在一些奇怪的情况。我认为我有相同的选项行并且顺序正确,但一种方法仍然给我一个dosfs_t..

其他有用的命令: sudo umount '/mnt/...'
lsblk
dmesg | less由于我在 var 文件夹中几乎没有任何服务的日志,因此可能使用 systemd 来包含它们。
smbpasswd
smbstatus
sudo pdbedit -L
cat /etc/passwd | grep <user>

相关内容