前言:我知道多年来很多人都问过类似的问题。我读过很多对这些问题的回答,以及其他网站上的博客文章,但我仍然无法配置 samba 来做我想做的事情。
我在本地网络上有两台 Linux 计算机(运行 Fedora 37),pw-tower 和 pw72。pw-tower 有一些数据文件,我希望能够从 pw72 读取(而不是写入)。因为数据文件不是敏感文件,而且因为我从 pw72 将文件设置为只读,所以我希望每次挂载共享时都不必输入密码。
pw-tower 托管 Samba 服务器。以下是 /etc/samba/smb.conf 中的相关部分:
[global]
workgroup = WORKGROUP
server string = Samba Server Version %v
netbios name = pw-tower
hosts deny = ALL
hosts allow = 192.168.1. 127.
interfaces = enp1s0 lo
guest account = repair
security = user
passdb backend = tdbsam
[data]
comment = Shared data stored on a large removeable drive
path = /run/media/david/D2T-07202016/data
browseable = yes
read only = yes
guest ok = yes
writable = no
pw-tower 和 pw72 上都有一个“修复”帐户。它们都有相同的密码。另外,我使用 smbpasswd 在 pw-tower 上为“修复”设置了相同的密码。
我设置了 /run/media/david/D2T-07202016/data 的权限,以便“修复”用户可以读取该目录。
$ ls -ld /run/media/david/D2T-07202016/data
drwxrwxrwx. 14 david samba_file_readers 4096 Jun 3 09:32 /run/media/david/D2T-07202016/data
“david”和“repair”都是“samba_file_readers”组的成员。
最后,我尝试使用以下命令在 pw72 上挂载“数据”共享:
sudo mount -t cifs //pw-tower/data /mounts/pw-tower-data -o username=repair,sec=none,guest
我要么被提示输入密码,要么收到权限被拒绝错误(mount error(13): Permission denied
)。
我唯一能够不输入密码登录的方法是,在 pw72 上为“david”设置一个凭证文件。但这不是永久的解决方案,因为无论文件的权限如何,我都不愿意将密码放在纯文本文件中。当我为“repair”设置类似的凭证文件时,权限被拒绝。虽然这不是最理想的选择,但我还是愿意将“repair”密码放在文件中。
我知道 Samba 在某些 Linux 计算机上的工作方式略有不同。我知道它支持访客访问,而且许多人都让它工作了。我愿意听取任何建议。
答案1
您做错了所有事情。Samba 的“guest”用户对 Samba 来说应该是未知的,因此请删除您创建的 Samba 用户。将“guest only = yes”添加到共享,并将“map to guest = bad user”添加到 smb.conf 的“global]”部分。最后,Samba 应该在所有发行版上以相同的方式工作(前提是它们使用相同的版本)。
答案2
我弄清楚了问题所在:我想要共享的路径中的一个目录具有权限rwxr-x---
。
$ ls -ld /run
drwxr-xr-x. 52 root root 1520 Jun 4 12:49 /run
$ ls -ld /run/media
drwxr-xr-x. 3 root root 60 Jun 3 01:51 /run/media
$ ls -ld /run/media/david
drwxr-x---+ 3 root root 60 Jun 3 01:51 /run/media/david
为了解决这个问题,我这样做了:
$ sudo chmod 755 /run/media/david
$ ls -ld /run/media/david
drwxr-xr-x+ 3 root root 60 Jun 3 01:51 /run/media/david
经过上述更改后,mount
pw72(客户端计算机)上的命令就可以正常工作了。
我还遵循了 Rowland Perry 的建议,在 smb.conf 的 [data] 共享中添加“guest only = yes”,在 [global] 部分中添加“map to guest = bad user”。然后我使用 运行testparm
并重新启动了 smb 和 nmb 。接下来我在客户端计算机上sudo systemctl restart smb nmb
发出以下命令:mount
sudo mount -t cifs //pw-tower/data /mounts/pw-tower-data -o guest
以下是上述命令的输出(在我修复 /run/media/david 上的权限问题之前):
mount error(13): Permission denied
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs) and kernel log messages (dmesg)
输出如下dmesg
:
[1184391.470699] CIFS: Attempting to mount \\pw-tower\data
[1184391.484290] CIFS: VFS: cifs_mount failed w/return code = -13
在托管 Samba 服务器的计算机上,我运行sudo systemctl status smb
并得到了以下输出:
Jun 04 11:54:03 pw-tower smbd[86079]: [2023/06/04 11:54:03.635577, 0] ../../source3/smbd/smb2_service.c:168(chdir_current_service)
Jun 04 11:54:03 pw-tower smbd[86079]: chdir_current_service: vfs_ChDir(/run/media/david/D2T-07202016/data) failed: Permission denied. Current token: uid=99, gid=99, 1 groups: 99
Jun 04 11:54:03 pw-tower smbd[86079]: [2023/06/04 11:54:03.636304, 0] ../../source3/smbd/smb2_service.c:168(chdir_current_service)
Jun 04 11:54:03 pw-tower smbd[86079]: chdir_current_service: vfs_ChDir(/run/media/david/D2T-07202016/data) failed: Permission denied. Current token: uid=99, gid=99, 1 groups: 99
Jun 04 11:54:03 pw-tower smbd[86079]: [2023/06/04 11:54:03.636968, 0] ../../source3/smbd/smb2_service.c:168(chdir_current_service)
Jun 04 11:54:03 pw-tower smbd[86079]: chdir_current_service: vfs_ChDir(/run/media/david/D2T-07202016/data) failed: Permission denied. Current token: uid=99, gid=99, 1 groups: 99
请注意,uid=99 是用户nobody
。
根据 Samba 日志文件,问题似乎出在data
目录的权限上。但权限是开放的。
$ ls -ld /run/media/david/D2T-07202016/data
drwxrwxrwx. 14 david samba_file_readers 4096 Jun 3 09:32 /run/media/david/D2T-07202016/data
为了确保万无一失,我将用户添加nobody
到了组中samba_file_readers
,但结果还是一样。
底线:问题现在解决了。感谢大家的建议。