Samba 4 OpenLDAP 身份验证问题

Samba 4 OpenLDAP 身份验证问题

我目前所做的

  • 为客户端的本地网络安装 DHCP 服务器和 bind9(服务器应充当网关)
  • 使用 bind9_dlz 作为 dns 后端从源代码构建 Samba4
  • 使用安装 OpenLDAPapt-get install slapd ldap-utils
  • 390,637由于 samba 阻塞,将 slapd 端口更改为389,636
  • 导入 samba ldap 方案,初始设置 ldap 目录并配置域
  • 安装libnss-ldapd用于 ldap 身份验证(getent passwd正确输出 LDAP 用户)
  • 为 Samba 提供了我的 ldap 目录的管理员密码(smbpasswd -w xxx

问题

我将 Windows 7 客户端加入域并尝试登录使用 创建的用户smbldap-useradd。我从 Windows 收到密码错误消息,但 Samba 绝对没有错误/警告。我的测试用户确实存在于 LDAP 中(使用 检查phpldapadmin),因此我认为 Samba 未正确与 ldap 通信。我被困在这一点上,需要一些帮助!

我注意到

我已经设置了passdb backend = ldapsam:ldap://testsrv.alfr.local:390/不会出现在输出中testparm(见下文)。

我正在使用的软件

  • Ubuntu Server 12.04 已更新
  • 从源代码编译的 Samba 4.1.6(官方 git 存储库)
  • 绑定 9.8.1
  • slapd 2.4.28
  • isc-dhcp-服务器 4.1

配置和输出

  • 服务器主机名:testsrv
  • 域名:alfr.local
  • 2 个网络接口,eth0 = DHCP,外部 WAN,eth1 = 192.168.25.1(服务器充当此网络的 DHCP,范围从 25.50 到 25.254)

输出testparm

root@testsrv:~# testparm 
Load smb config files from /usr/local/samba/etc/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[profiles]"
Processing section "[netlogon]"
Processing section "[sysvol]"
Processing section "[homes]"
Loaded services file OK.
Server role: ROLE_ACTIVE_DIRECTORY_DC
Press enter to see a dump of your service definitions

[global]
    workgroup = ALFR
    realm = alfr.local
    server role = active directory domain controller
    passdb backend = samba_dsdb
    add user script = /usr/sbin/smbldap-useradd -m '%u' -t 1
    rename user script = /usr/sbin/smbldap-usermod -r '%unew' '%uold'
    delete user script = /usr/sbin/smbldap-userdel '%u'
    add group script = /usr/sbin/smbldap-groupadd -p '%g'
    delete group script = /usr/sbin/smbldap-groupdel '%g'
    add user to group script = /usr/sbin/smbldap-groupmod -m '%u' '%g'
    delete user from group script = /usr/sbin/smbldap-groupmod -x '%u' '%g'
    add machine script = /usr/sbin/smbldap-useradd -w '%u' -t 1
    domain logons = Yes
    os level = 10
    preferred master = Yes
    domain master = Yes
    dns proxy = No
    wins support = Yes
    ldap admin dn = cn=admin,dc=alfr,dc=local
    ldap group suffix = ou=Groups
    ldap idmap suffix = ou=Idmap
    ldap machine suffix = ou=Computers
    ldap suffix = dc=alfr,dc=local
    ldap ssl = no
    ldap user suffix = ou=Users
    server services = rpc, nbt, wrepl, cldap, ldap, kdc, drepl, winbind, ntp_signd, kcc, dnsupdate, smb
    dcerpc endpoint servers = epmapper, wkssvc, rpcecho, samr, netlogon, lsarpc, spoolss, drsuapi, dssetup, unixinfo, browser, eventlog6, backupkey, dnsserver, winreg, srvsvc
    rpc_server:tcpip = no
    rpc_daemon:spoolssd = embedded
    rpc_server:spoolss = embedded
    rpc_server:winreg = embedded
    rpc_server:ntsvcs = embedded
    rpc_server:eventlog = embedded
    rpc_server:srvsvc = embedded
    rpc_server:svcctl = embedded
    rpc_server:default = external
    idmap config * : backend = tdb
    map archive = No
    map readonly = no
    store dos attributes = Yes
    vfs objects = dfs_samba4, acl_xattr

[profiles]
    path = /srv/samba/profiles
    read only = No
    create mask = 0611
    directory mask = 0700
    profile acls = Yes
    map hidden = Yes
    map system = Yes
    browseable = No
    csc policy = disable

[netlogon]
    path = /usr/local/samba/var/locks/sysvol/alfr.local/scripts
    read only = No

[sysvol]
    path = /usr/local/samba/var/locks/sysvol
    read only = No

[homes]
    comment = Eigener Ordner
    path = /srv/samba/homes/%S
    read only = No
    create mask = 0611
    directory mask = 0711
    browseable = No
    vfs objects = acl_xattr, full_audit
    full_audit:failure = connect opendir disconnect unlink mkdir rmdir open rename
    full_audit:success = connect opendir disconnect unlink mkdir rmdir open rename

输出ps aux(删除不重要的内容)

root@testsrv:~# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root       699  0.0  0.0   7272   608 ?        Ss   08:08   0:00 dhclient3 -e IF_METRIC=100 -pf /var/run/dhclient.eth0.pid -lf /var/lib/dhcp/dhclient.eth0.leases -1 eth
bind       827  0.0  2.8 502280 58392 ?        Ssl  08:08   0:01 /usr/sbin/named -u bind
dhcpd      833  0.0  0.2  14552  4476 ?        Ss   08:08   0:00 /usr/sbin/dhcpd -f -q -4 -pf /run/dhcp-server/dhcpd.pid -cf /etc/ltsp/dhcpd.conf
openldap  1024  0.0  0.3 722000  6524 ?        Ssl  08:08   0:00 /usr/sbin/slapd -h ldap://127.0.0.1:390/ ldaps://127.0.0.1:637/ ldapi://%2fvar%2frun%2fslapd%2fldapi/??
root      1051  0.0  0.0 693092  1172 ?        Ssl  08:08   0:00 /usr/sbin/nscd
nslcd     1075  0.0  0.0 443600  1376 ?        Ssl  08:08   0:00 /usr/sbin/nslcd
ntp       1279  0.0  0.0  25960  1836 ?        Ss   08:08   0:00 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 107:114
root      1595  0.0  2.2 534364 46152 ?        Ss   09:52   0:00 samba start
root      1597  0.0  1.8 538976 38532 ?        S    09:52   0:00 samba start
root      1598  0.0  1.7 539772 35624 ?        S    09:52   0:00 samba start
root      1599  0.0  1.6 536876 33716 ?        S    09:52   0:00 samba start
root      1600  0.0  1.6 534364 34568 ?        S    09:52   0:00 samba start
root      1601  0.0  1.8 534804 37568 ?        S    09:52   0:00 samba start
root      1602  0.0  1.8 538516 37212 ?        S    09:52   0:00 samba start
root      1603  0.0  1.6 534364 34328 ?        S    09:52   0:00 samba start
root      1604  0.0  1.6 537192 33928 ?        S    09:52   0:00 samba start
root      1605  0.0  1.5 534364 32716 ?        S    09:52   0:00 samba start
root      1606  0.0  2.0 534364 41264 ?        S    09:52   0:00 samba start
root      1607  0.0  1.6 534364 33884 ?        S    09:52   0:00 samba start
root      1608  0.0  1.6 534364 33360 ?        S    09:52   0:00 samba start

/etc/nsswitch.conf

root@testsrv:~# cat /etc/nsswitch.conf 
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

# pre_auth-client-config # passwd:         compat
passwd: files ldap
# pre_auth-client-config # group:          compat
group: files ldap
# pre_auth-client-config # shadow:         compat
shadow: files ldap

hosts:          files dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

# pre_auth-client-config # netgroup:       nis
netgroup: nis

答案1

我没有在您的配置文件中看到任何安全指令。我假设您想要 security=ad。上个月我一直在尝试做同样的事情 - 使用 OpenLDAP 作为用户登录信息的主要数据库。

我测试了几种方法:

  1. Samba 4 AD 目前无法信任(Samba 团队将在撰写本文时很快发布 Samba 4.2),因此您无法使用信任机制。

  2. 据我所知,AD 中的 Samba 4 不能基于 OpenLDAP,因为缺少 Active Directory 所需的模式。

  3. 我厌倦了使用名为 LSC 的软件,它基本上允许您在 AD 和 OpenLDAP 之间同步用户和组。这里也没有运气。LSC 文档和示例已过时,与当前版本不兼容。我终于设法使用户同步工作,但有一些错误(至少在 LSC v2.0 中我已经厌倦了),当您在 OpenLDAP 中更新密码时,LSC 不会捕获它。您必须以纯文本形式存储密码才能使其工作。

目前没有以 OpenLDAP 作为后端的 Samba AD 控制器。我计划在 Samba 支持信任后立即使用经典 NT 域控制器,然后我想委托单向信任(从 samba4 NT DC 到 Samba4 AD)并在 AD 域控制器上使用它,用户信息位于 OpenLDAP。

如果有人能在这里发现任何错误,我会很高兴听到它。;-)

更新:根据 Francesco Malvezzi 在 Samba 4.3 中提供的信息,现在支持信任:

https://www.samba.org/samba/history/samba-4.3.0.html

改进了对受信任域(如 AD DC)的支持

对受信任域/林的支持已经有了很大的改进。

samba-tool有“域信任”子命令来管理信任:

create - 创建域或林信任。

delete - 删除域信任。

list - 列出域信任。

namespaces - 管理林信任命名空间。

show - 显示受信任域的详细信息。

validate - 验证域信任。

各个域之间的外部信任以双向方式(入站和出站)工作。这同样适用于林信任的根域。对于 Kerberos 来说,到其他林的传递路由完全正常,但尚不支持 NTLMSSP。

虽然很多事情都运行良好,但目前仍存在一些限制:

  • 信任双方需要充分的信任对方!
  • 根本没有应用任何 SID 过滤规则!
  • 这意味着域 A 的 DC 可以授予域 B 中的域管理员权限。
  • 无法将受信任域的用户/组添加到域组中。

配置示例: https://www.samba.org/samba/history/samba-4.3.0.html

信任关系已创建,可以使用 winbind 进行检查:

wbinfo -u-> 获取本地用户列表

wbinfo -u --domain=trusted.domain.tld-> 获取受信任域用户列表(也可以使用短域名)

也可以使用--local-dc-username--local-dc-password开关进行验证:

samba-tool domain trust validate trusted.domain.tld \ --local-dc-password=trustedAdminPass \ --local-dc-username=administrator \ -U administrator at trusted.domain.tld

使用 Samba 的内部 DNS 使 DNS 查询转发透明(使用我想检查的几个工具)。

为了能够使用来自 B.domain.tld 的用户连接到 machine.A.domain.tld,您必须将“经过身份验证的用户”特殊组添加到 RDP 授权人员。

我仍在等待它在我的发行版(debian 8-9)的官方渠道推出。

答案2

您是否明确需要使用 ldap?

我使用 samba 活动目录已有一年多了,唯一遇到的问题是 timescew。您应该仔细检查,尤其是在使用虚拟机时。

答案3

我一直在使用 SAMBA 制作 LDAP 服务器。我遇到的 SAMBA 问题(可能也困扰过您)与不同版本的 SAMBA 配置有关。您确定使用了适合您的 samba 版本的配置吗?如果您复制 .bash_history,我会查找任何错误配置,甚至在机器上进行测试,这将非常有帮助。

相关内容