我们有一台运行 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