简洁版本
如何配置 CentOS 7 机器,使用 Samba 4.8.0 为 Windows 7 客户端上的用户提供服务认证使用他们的域登录凭据(winbindd
和 Active Directory),但已授权(即针对单独的 OpenLDAP 服务器执行用户/组查找)?
这是简单的使用 CentOS 6 和 Samba 回退机制。一旦必须使用 winbind,情况似乎会更加复杂。
长版本
我们有一台 CentOS 7 计算机,需要与 Active Directory 域(我不控制)中的 Windows 7 计算机共享文件,供 EXAMPLE.COM 域中的用户使用,但针对 ldap.mydomain.com 上的单独 OpenLDAP 服务器(我控制)执行用户/组查找。使用当前版本的 CentOS 7(截至 Samba 4.8.0),winbindd 后备不再可用,需要 winbindd。
因此我们执行以下操作:
- 打开防火墙端口 445(但为了测试,
systemctl stop firewalld
) - 设置 SELinux 布尔值以共享主目录(但用于测试,
setenforce 0
) - 添加对已认证 ldap.mydomain.com 的证书颁发机构的信任(已测试并且 LDAP 查找在系统上正常运行)
- 安装包
samba
,,,,和samba-client
samba-winbind
samba-winbind-clients
samba-winbind-krb5-locator
net ads join -U 'user'
(域允许非管理员创建机器账户;net ads testjoin
返回‘加入成功’)authconfig --enablesssd --enablesssdauth --disablemkhomedir --update
以下是smb.conf
针对 winbind 的规定,上面没有对其进行配置authconfig
:
[global]
strict locking = no
workgroup = EXAMPLE
server string = Samba Server Version %v
disable netbios = yes
log file = /var/log/samba/log.%m
max log size = 50
security = ads
realm = EXAMPLE.COM
ldap ssl = off
idmap config * : backend = ldap
idmap config * : ldap_url = ldaps://ldap.mydomain.com:636/
idmap config * : ldap_base_dn = dc=mydomain,dc=com
idmap config * : ldap_user_dn = uid=samba,ou=agents,dc=mydomain,dc=com
idmap config * : read only = yes
idmap config * : range = 1000-65535
kerberos method = secrets and keytab
load printers = no
printcap name = /dev/null
printing = bsd
disable spoolss = yes
[home]
comment = Home Directories
path = /home/%U
browseable = no
writable = yes
create mask = 0600
directory mask = 0700
valid users = EXAMPLE\%U
preexec = ls /home/%U
[share]
path = /home/share
writable = yes
valid users = @share
force group = share
create mask = 0660
directory mask = 0770
preexec = ls /home/share
问题如下:
smbclient //myhost.fqdn/home -U <user>
执行 winbind 身份验证并成功连接到共享,任何值为<user>
smbclient //myhost.fqdn/share -U <user
执行 winbind 身份验证,但无法确定 ldap.mydomain.com 是否<user>
属于“共享”组,因此返回tree connect failed: NT_STATUS_ACCESS_DENIED
附加信息:
testparm
没有显示任何错误或警告wbinfo -u
返回 EXAMPLE.COM 域用户列表wbinfo -g
返回 EXAMPLE.COM 域组列表- 域用户的 SSH 登录(即 ssh user@host)有效
log.winbindd-idmap
显示:
[2019/06/08 15:58:23.175342, 3] ../source3/winbindd/idmap.c:397(idmap_init_domain)
idmap backend ldap not found
[2019/06/08 15:58:23.177972, 3] ../lib/util/modules.c:167(load_module_absolute_path)
load_module_absolute_path: Module '/usr/lib64/samba/idmap/ldap.so' loaded
[2019/06/08 15:58:23.179407, 2] ../source3/lib/smbldap.c:847(smbldap_open_connection)
smbldap_open_connection: connection opened
[2019/06/08 15:58:23.340963, 3] ../source3/lib/smbldap.c:1069(smbldap_connect_system)
ldap_connect_system: successful connection to the LDAP server
[2019/06/08 15:58:23.343603, 1] ../source3/winbindd/idmap_ldap.c:484(idmap_ldap_db_init)
idmap_ldap_db_init: failed to verify ID pool (NT_STATUS_UNSUCCESSFUL)
[2019/06/08 15:58:23.343810, 1] ../source3/winbindd/idmap.c:447(idmap_init_domain)
idmap initialization returned NT_STATUS_UNSUCCESSFUL
设置更高的调试级别表明最终的 NT_STATUS_UNSUCCESSFUL 来自于尝试对 basedn 进行更改,但我不明白为什么idmap backend ldap not found
会出现这种情况,或者为什么 Samba/winbind 需要对 LDAP 数据库进行更改,特别是在设置 readonly 属性时smb.conf
。最后,我不确定这些行是否能解释问题。
我们有一个有效的 CentOS 6 部署,它在执行此拆分 Active Directory 身份验证并使用单独的 LDAP 用户/组查找时,无需 winbind 即可完美运行。我们如何在 CentOS 7 中使用 Samba 4.8.0 实现我们想要的功能?为什么idmap config
smb.conf 中的行没有指示 Samba 从中获取组成员身份信息ldap.mydomain.com
?