我们正在从旧的 NT4 域升级,我刚刚在新的 Ubuntu 20.04 服务器上设置了 Samba AD。DC 和域成员服务器上的当前 Samba 版本都是 4.11.6-Ubuntu,域成员服务器也运行着 Ubuntu 20.04。我遵循了 Samba 官方指南(同时替换发行版目录),我可以kinit
正常使用,我可以wbinfo -a
正常运行并且它会进行身份验证,但如果我运行,getent passwd DOMAIN\\USER
则不会得到任何输出,我已在文件中启用winbind enum users = yes
并启用,但仍然什么都没有。有趣的是,&返回了我所有的用户和组。winbind enum groups = yes
/etc/samba/smb.conf
wbinfo -u
wbinfo -g
我也尝试过getent group
,它返回了我的部分组(似乎在 gid 2300 以上),但getent user
无论我为任何测试用户分配什么 ID,它都只返回本地用户。
我还确保了我在 DC 上的配置也设置好了,并且我可以使用我在成员服务器上尝试过的参数运行 getent 命令,而且它可以工作,它会提取 ID 和所有内容。
另外,需要注意的是,我使用 samba-tool 手动从旧域中提取所有用户和组(包括 uid/gid),并使用适当的参数添加它们。我们的 UID 范围是 1004-4000,gid 范围是 900-950。
我的想法是它与 idmap 范围有关,/etc/samba/smb.conf
但无论我放在那里什么都不起作用(是的,我也一直在重新启动/重新加载/重新启动服务)。我也无法登录,即使我已确认 PAM 配置为使用 winbind 并且我的/etc/nsswitch.conf
文件设置正确(用户和组已附加 winbind)
所以最终,我的问题归结为:Ubuntu 20.04 是否有任何变化,我需要调整才能使 Samba 正常工作?或者,我只是做错了什么?(下面的配置)
DC SMB 配置文件
# Global parameters
[global]
dns forwarder = 192.168.1.1
netbios name = DC1
realm = DOMAIN.COM
server role = active directory domain controller
workgroup = DOMAIN
idmap_ldb:use rfc2307 = yes
# Template settings for login shell and home directory
template shell = /bin/false
template homedir = /home/%U
winbind enum users = yes
winbind enum groups = yes
成员服务器SMB.conf
[global]
workgroup = DOMAIN
security = ADS
realm = DOMAIN.COM
username map = /etc/samba/user.map
log file = /var/log/samba/%m.log
log level = 1
# Default ID mapping configuration for local BUILTIN accounts
# and groups on a domain member. The default (*) domain:
# - must not overlap with any domain ID mapping configuration!
# - must use a read-write-enabled back end, such as tdb.
idmap config * : backend = tdb
idmap config * : range = 10000-17999
# - You must set a DOMAIN backend configuration
# idmap config for the DOMAIN domain
idmap config DOMAIN : backend = ad
idmap config DOMAIN : schema_mode = rfc2307
idmap config DOMAIN : range = 1000-5000
idmap config DOMAIN : unix_nss_info = yes
vfs objects = acl_xattr
map acl inherit = yes
store dos attributes = yes
dedicated keytab file = /etc/krb5.keytab
kerberos method = secrets and keytab
winbind enum users = yes
winbind enum groups = yes
nsswitch.conf
passwd: files systemd winbind
group: files systemd winbind
shadow: files
gshadow: files
hosts: files dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis
成员服务器 KRB5 会议
[libdefaults]
default_realm = DOMAIN.COM
dns_lookup_realm = false
dns_lookup_kdc = true
答案1
感谢@Rowland 的帮助,我得出结论,这个问题源于多个问题:
主要是域用户不是有一个 gid(通过检查 Windows 用户和组控制台中的属性来确认)。添加该 gid 并扩展 idmap 范围后,我的问题似乎已解决,所有组和用户都已显示。我还能够成功测试域用户的访问权限。
编辑:我现在已经扩展到包括我们所有的组,并且与用户/组和 ACL 相关的一切都运行良好!