似乎无法找到包含我的情况的所有具体情况的答案。我按照中的说明进行操作在 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
在哪里。对我来说已经足够了,但有些用于更详细的显示。Z
l
getfacls
https://superuser.com/questions/617777/how-do-i-auto-mount-a-usb-drive-that-all-users-can-write-to
我也曾想到过user
mount 选项,但现在没有必要了,至少对于我来说解决这个问题是不必要的。
另外 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>