如何让 Samba 共享不询问密码

hij*_*ian 27 file-sharing samba

注意:我已经阅读了大约 50 个不同的页面,这些页面描述了如何在2 年的时间内设置公共 Samba 共享,但没有任何内容对我有用。我不知道设置这些东西需要多少 RTFM。

我需要/想要在我的家庭服务器上为两个工作站设置一个完全开放的公共文件共享。

设置如下:

服务器:

  • Debian Wheezy
  • sudo smbd --version给我Version 3.6.6
  • 我想共享的 2 个本地分区,由于旧并从 Windows 机器上获取而格式化为 NTFS。我无法将它们格式化为 ext* FS,因为它们有很多我无法(还)移动到其他任何地方的数据。
  • 由于缺乏原创性,名为“homeserv”的机器。

客户

  1. Debian 测试 (Jessie)
  2. Windows 7(2 台不同的机器)。事实上,我的机器是Debian/Windows dualboot,而我妻子的机器只是Windows。

蒸馏后我的 smb.conf 如下所示(逐字逐句,没有其他内容):

[global]
  workgroup = WORKGROUP
  security = user
  map to guest = Bad User

[disk1]
  comment = Disk 1 on 400GB HDD
  path = /media/disk1
  browsable = yes
  guest ok = yes
  read only = no
  create mask = 0755

[disk2]
  comment = Disk 2 on 400GB HDD
  path = /media/disk2
  browsable = yes
  guest ok = yes
  read only = no
  create mask = 0755
Run Code Online (Sandbox Code Playgroud)

在两台客户端机器上,在 Debian 和 Windows 中,我得到相同的结果:登录/密码对话框。NO的组合security = usermap to guest = Bad usersecurity = shareguest ok = yes和这样的帮助。

在我单击网络邻居中的共享机器后,Windows 7 立即显示登录/密码对话框。smb://homeserv/Debian 中的文件路径(在任何文件浏览器中)向我显示了两个文件夹:disk1disk2,正如预期的那样,通过尝试打开它们带来登录/密码对话框。

那么,我在不需要输入登录名/密码的方案中缺少什么?这是可用性问题,我不会为文件垃圾场创建基于用户的身份验证。

hij*_*ian 20

好的,我自己找到了答案。

由于这在文档和 HOWTO 等中绝对不明显,所以这个东西要求密码的原因是因为它无法将来宾用户映射到共享目录所有者

我有需要挂载 RW 的 NTFS 分区,所以我在我的文件中使用了以下设置/etc/fstab

/dev/sdb1  /media/disk1  ntfs defaults,noexec,noatime,relatime,utf8,uid=1000,gid=1000 0       2
/dev/sdb2  /media/disk2  ntfs defaults,noexec,noatime,relatime,utf8,uid=1000,gid=1000 0       2
Run Code Online (Sandbox Code Playgroud)

最重要的配置部分是uidgid(也许只有uid,不知道)。它们被设置为在jonnie服务器上设置的用户的 UID 和 GID (显然不是 root)。所以,当ntfs-3g挂载这些磁盘时,一切都归他所有。

之后,我将此用户添加到 Samba 注册表(或者可能创建了新的相同的用户,不在乎):

# smbpasswd -a jonnie
Run Code Online (Sandbox Code Playgroud)

它要求输入密码,我输入的与主系统相同。

之后,我已将force userforce group设置添加到smb.conf

[global]
  workgroup = WORKGROUP
  netbios name = HOMESERV
  security = share

[disk1]
  comment = Disk 1 on 400GB HDD
  path = /media/disk1
  browsable = yes
  guest ok = yes
  read only = no
  create mask = 666
  directory mask = 777
  force user = jonnie
  force group = jonnie

[disk2]
  comment = Disk 2 on 400GB HDD
  path = /media/disk2
  browsable = yes
  guest ok = yes
  read only = no
  create mask = 666
  directory mask = 777
  force user = jonnie
  force group = jonnie
Run Code Online (Sandbox Code Playgroud)

因此,与我相关的最重要的配置是force user.

Samba HOWTO 提供

  • “显然不是root”。这实际上并不是那么明显。Samba 有数十种故障模式。大多数都会导致相同的错误消息。这就是为什么你花了这么多时间在谷歌搜索上毫无结果。一次搜索不仅会带来一系列问题,而且找到的答案也会遇到同样的混乱。使用 root 消除了 Linux 方面的安全性,但也允许您诊断问题。如果它以 root 身份运行,那么您在 Linux 级别上存在安全问题,如果 Samba 仍然失败,则问题出在 Samba 的用户概念内(它们是不同的,并且应该有独特的错误) (2认同)

小智 6

配置可以更短:

创建unix用户jonnie

sudo useradd jonnie -s /usr/sbin/nologin
Run Code Online (Sandbox Code Playgroud)

创建smbuser

sudo smbpasswd -a jonnie
Run Code Online (Sandbox Code Playgroud)

创建Linux目录进行共享

mkdir /mysmbshare
Run Code Online (Sandbox Code Playgroud)

将目录的所有者更改为 jonnie

sudo chown jonnie /mysmbshare
Run Code Online (Sandbox Code Playgroud)

smb配置文件

[global]
  workgroup = MyWorkGroup
  server string = Hello, use me
  security = user
  map to guest = Bad User
  guest account = jonnie
  passdb backend = tdbsam
  
[the_public_share]
   path = /mysmbshare
   writable = yes
   printable = no
   public = yes
Run Code Online (Sandbox Code Playgroud)

所有文件均归 jonnie 所有,每个人都可以对文件进行读写访问。