以“nobody”而不是给定用户名的身份连接到 samba 共享的特定 Windows 用户?

以“nobody”而不是给定用户名的身份连接到 samba 共享的特定 Windows 用户?

我们有一台运行 samba 的 Ubuntu 9.04 服务器,密码为空,有主目录共享,并且我们有相应的用户在 Windows 计算机上挂载上述共享。本质上,每个用户在服务器上都有一个帐户(用户名与 Windows 计算机上的用户名相同),并在/home/用户名将其安装在本地机器上\\SAMBABOX\用户名然后他们就可以完全访问它了。

对于大多数用户来说,这没有问题;他们可以毫无问题地读取、写入、创建和删除共享上的文件。以下是在 samba 日志中看到的一个这样的初始连接:

[2009/12/02 10:30:22,  1] smbd/service.c:make_connection_snum(1115)
  somewindowsbox (192.168.2.123) connect to service ekaufman initially as user ekaufman (uid=1002, gid=1002) (pid 22574)

但是,对于某个用户来说,他们至少无法创建某些文件(锁定 SVN 工作副本的文件)。请注意,这是从我们 AD 域中的任何 Windows 计算机进行的。查看他们的 samba 日志,他们的初始连接是以用户身份进行的没有人,我无论如何也想不出为什么。

[2009/11/18 10:19:32,  1] smbd/service.c:make_connection_snum(1115)
  somewindowsbox (192.168.2.123) connect to service jdoe initially as user nobody (uid=65534, gid=65534) (pid 15570)

他们在 ubuntu 服务器上的用户帐户与其他人大致相同,如密码文件 /etc/passwd

ekaufman:x:1002:1002:,,,:/home/ekaufman:/bin/bash
jdoe:x:1015:1015:,,,:/home/jdoe:/bin/bash

/etc/组

ekaufman:x:1002:
jdoe:x:1015:

乃至/etc/shadow(当然,在发布之前已经删除了密码哈希值):

ekaufman:!:14580:0:99999:7:::
jdoe:!:14572:0:99999:7:::

我甚至删除了他们在 ubuntu 上的帐户并重新创建了它,没有任何变化。根据 AD 域控制器管理员的说法,他们在那里的帐户与其他人的帐户大致相同(删除并在那里重新创建它会非常复杂)。

如果我从 Windows 机器上手动安装我自己帐户的共享,强制使用用户名,它就会顺利运行:

C:\> net use z: \\sambabox.local\ekaufman /user:ekaufman
The command was completed successfully

如果我为该特定用户执行相同操作,它仍会连接为没有人,默默失败:

C:\> net use z: \\sambabox.local\jdoe  /user:jdoe
The command was completed successfully

这给我的印象是,无论问题是什么,它都与 Linux 方面有关。

这是正在使用的整个 smb 配置:

[global]
   null passwords = yes
   guest ok = yes
   security = user
   workgroup = WORKGROUP
   server string = %h server (Samba, Ubuntu)
   dns proxy = no
   log file = /var/log/samba/log.%m
   max log size = 1000
   syslog = 0
   panic action = /usr/share/samba/panic-action %d
   encrypt passwords = true
   passdb backend = tdbsam
   obey pam restrictions = yes
   unix password sync = yes
   passwd program = /usr/bin/passwd %u
   passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
   pam password change = yes
   map to guest = bad user
   usershare allow guests = yes

[homes]
   comment = Home Directories
   browseable = no
   read only = no

[printers]
   comment = All Printers
   browseable = no
   path = /var/spool/samba
   printable = yes
   guest ok = no
   read only = yes
   create mask = 0700

[print$]
   comment = Printer Drivers
   path = /var/lib/samba/printers
   browseable = yes
   read only = yes
   guest ok = no

答案1

我发现错误是 users.map 中的用户名映射,我之前曾用它将 NIS 用户名与 AD 帐户关联起来。将所有 NIS 切换到 AD ServicesForUNIX NIS 后,我忘记删除这些旧的用户名映射。

答案2

在我的系统上,有一个名为“sambashare”的组。查看杰多是一名成员(和其他人一样)。

答案3

事实证明,答案看似简单。除了用户需要在 Linux 机器上拥有一个帐户外,还必须将他们添加到文件中smbpasswd此外,由于连接是使用空密码建立的,我们需要使用空密码将它们添加到上述文件中:

# -a flag adds the new user (must already exist in /etc/passwd)
# -n flag indicates a null password (different from an empty password)
smbpasswd -an jdoe

相关内容