![为什么 Samba 没有使用“samba-tool”添加新用户?](https://linux22.com/image/1046782/%E4%B8%BA%E4%BB%80%E4%B9%88%20Samba%20%E6%B2%A1%E6%9C%89%E4%BD%BF%E7%94%A8%E2%80%9Csamba-tool%E2%80%9D%E6%B7%BB%E5%8A%A0%E6%96%B0%E7%94%A8%E6%88%B7%EF%BC%9F.png)
我正在尝试在运行服务器 14.04 LTS 的 Dell Poweredge 860 上配置 Samba 共享。Samba 已卸载(当我选择它时),因此我只需对其进行配置。我正在尝试将其连接到我的 Windows 计算机。
我的配置文件(如下所列)似乎有效。我没有收到任何错误。这是我在网上找到的教程的修改版本。
[global]
workgroup = HOME
server string = Samba Ubuntu Server
map to guest = Bad User
log file = /var/log/samba/log.%m
max log size = 50
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
local master = No
dns proxy = No
idmap config * : backend = tdb
[Queue]
comment = "A small folder to move files from/to the server. For use by server admin."
path = /serv/samba/queue
valid users = penguin
read only = No
create mask = 0777
directory mask = 0777
一切都很好。(我应该指出,我penguin
也有一个名为的帐户,但我希望所有用户都使用 进行配置,samba-tool
因为penguin
这是该帐户上唯一的用户帐户,并且用户数量将比现在更多)。
penguin@Ubuntu-Server-1:~/serv/samba$ sudo samba-tool user add penguin
New Password:
Retype Password:
ERROR(<type 'exceptions.ValueError'>): Failed to add user 'penguin': - unable to parse dn string
File "/usr/lib/python2.7/dist-packages/samba/netcmd/user.py", line 176, in run
uid=uid, uidnumber=uid_number, gidnumber=gid_number, gecos=gecos, loginshell=login_shell)
File "/usr/lib/python2.7/dist-packages/samba/samdb.py", line 343, in newuser
dnsdomain = ldb.Dn(self, self.domain_dn()).canonical_str().replace("/", "")
我也尝试使用系统上没有的其他用户名。但不起作用。
我甚至无法完成一件sudo samba-tool user list
没有错误的事情!
ERROR(ldb): uncaught exception - ldb_search: invalid basedn '(null)'
File "/usr/lib/python2.7/dist-packages/samba/netcmd/__init__.py", line 175, in _run
return self.run(*args, **kwargs)
File "/usr/lib/python2.7/dist-packages/samba/netcmd/user.py", line 271, in run
attrs=["samaccountname"])
我究竟做错了什么?
答案1
只需在终端中输入以下内容:
smbpasswd -a penguin
并且你添加的用户需要在Ubuntu系统中添加,就像一个新用户一样。
可以使用
sudo useradd penguin
或者
sudo adduser penguin
答案2
据我所知,它samba-tool
仅用于 Active Directory (AC) 配置。因此,如果您尚未将 Samba 设置为 AC 服务器,samba-tool user add
它将无法工作。
您应该问自己,您的网络中是否需要 Active Directory 服务器,或者是否只需要一个仅具有自己的用户的简单 Samba 服务器。
如果你需要 AC 服务器,你应该遵循 Samba 项目本身提供的指南(https://wiki.samba.org/index.php/Samba_AD_DC_HOWTO)。但请注意,此文档并不直接适用于 ubuntu,您需要了解依赖于它的内容(即 DNS、Kerberos、LDAP)。
如果您只需要一个简单的服务器,该服务器具有一些用于自身目的的帐户,并提供对一些共享文件夹的访问权限,则应遵循 samba3 的指南。Samba4 与 samba3 的这些设置兼容,尽管您需要smbpasswd
在 samba 中创建用户。“通用 Samba 指南”Ubuntu 服务器文档应该会给你提供你需要的所有信息。
答案3
我担心这个“错误”可能被错误分类,因为它以多种不同的形式出现。我刚刚发现了一份可追溯到 2014 年的错误报告,报告的内容与我遇到的情况完全相同:
samba-tool 用户列表...反复失败。但是,涉及 samba-tool 的所有其他命令也都失败,除了:samba-tool -V(正确报告版本号)
以下是冰山一角(或者我应该说是“一角”):
acel:/mnt/nsd#samba-tool 用户列表遇到未知参数:“acl xattr update mtime”忽略未知参数“acl xattr update mtime”错误(ldb):未捕获的异常 - ldb_search:无效的 basedn'(null)'文件“/usr/lib/python2.7/dist-packages/samba/netcmd/在里面.py”, 第 175 行, 在 _run 中返回 self.run(*args, **kwargs) 文件“/usr/lib/python2.7/dist-packages/samba/netcmd/user.py”, 第 292 行, 在运行中 attrs=[“samaccountname”]) acel:/mnt/nsd# samba-tool 用户列表 ERROR(ldb): 未捕获异常 - ldb_search: 无效 basedn'(null)'
文件“/usr/lib/python2.7/dist-packages/samba/netcmd/在里面.py”,第 175 行,在 _run 中返回 self.run(*args, **kwargs) 文件“/usr/lib/python2.7/dist-packages/samba/netcmd/user.py”,第 292 行,在运行 attrs=[“samaccountname”]) acel:/mnt/nsd# which ldb ldb:未找到命令。
问题是什么?在一个系统上遇到这个问题后,我在其他三个独立系统(都是 Ubuntu)上检查了 samba-tool,发现 samba-tool 也坏了。我在错误报告中发现了一些对类似表现的孤立引用,有些可以追溯到 4-6 年前。我还发现了几份关于该错误已被“修复”的报告……(这个变体尚未修复)。
我只想通过删除一个孤立项来确保 Samba 用户/密码数据库干净,但我做不到。显然,如果 samba-tool 不起作用(在我的例子中,我有 4 台服务器运行 Samba,但它在任何一台服务器上都不起作用),它需要修复。
我唯一能提供的线索是:我读过的一篇参考资料提到 Samba 中的密码同步功能可能是导致此问题的原因。当 Samba 遇到一个孤立的 Samba 用户 ID 时,我就遇到了这个问题,这个用户 ID 是我通过重命名 /etc/passwd 文件中的原始用户而创建的。我当时只是想使用 samba-tool 来删除这个孤立的用户。但我想,当 Samba 尝试将其用户数据库与系统同步时,可能会发现原始用户丢失,从而造成一些损害。(?)
这不是答案。这只是一个暗示,表明该错误可能仍然存在,而检查您是否受到影响的最佳方法是运行 samba-tool 简单功能,看看它是否正常工作:
例如“samba-tool user list”或“samba-tool dbcheck”。
我的所有(1 V4.7 和 3 V4.3)都坏了。(希望这有帮助。)