我正在尝试让 Linux 主机使用端口 389 和 tls 针对 Active Directory 服务器进行身份验证。我似乎做了很多工作,但用户无法通过 passwd 更改密码。
我以为在更改密码时,它会绑定用户名和旧密码,而不是 ldap.conf 中的 binddn/bindpw,但我可能错了。如果是这样,我该如何让它工作,因为 test\ldap 域用户没有更改其他用户密码的权限,我不想给它这个权限,因为这个配置文件将存在于每个客户端上。
这是在 rhel5 上(如果我能让它工作,那么 rhel4 上也可以)
这是我在客户端上的配置文件:
/etc/hosts 127.0.0.1 本地主机 192.168.0.2 TESTSRV.TEST.COM TESTSRV 192.168.0.1 WIN-JERS4CCKFGM.TEST.COM WIN-JERS4CCKFGM
/etc/ldap.conf
调试 0uri ldap://WIN-JERS4CCKFGM.TEST.COM/ 基本 cn=用户,dc=测试,dc=com ldap_version 3
binddn TEST\ldap bindpw Pwldap1 bind_policy 软
范围子 时限 30
nss_base_passwd cn=用户,dc=测试,dc=com?一 nss_base_shadow cn=用户,dc=测试,dc=com?一 nss_base_group cn=用户,dc=测试,dc=com?sub nss_schema rfc2307bis nss_map_objectclass posixAccount 用户 nss_map_objectclass shadowAccount 用户 nss_map_objectclass posixGroup 组 nss_map_attribute uniqueMember 成员 nss_map_attribute 主目录 Unix主目录 nss_map_attribute gecos 名称 nss_map_attribute ou 描述
/etc/nsswitch.conf
密码:文件 ldap 影子:文件 ldap 组:文件 ldap
主机:文件 dns以太:文件 网络掩码:文件 网络:文件 协议:文件 rpc:文件 服务:文件 网络组:文件 ldap 自动挂载:文件 ldap 别名:文件
/etc/pam.d/系统身份验证
身份验证需要 pam_env.so 身份验证充分 pam_unix.so nullok try_first_pass auth requisite pam_succeed_if.so uid >= 500 quiet 身份验证充分 pam_ldap.so use_first_pass 身份验证需要 pam_deny.so帐户需要 pam_unix.so broken_shadow 帐户足够 pam_succeed_if.so uid < 500 安静 帐户 [默认=错误 成功=确定 用户未知=忽略] pam_ldap.so 帐户需要 pam_permit.so
密码要求 pam_cracklib.so retry=3 密码足够 pam_unix.so md5 shadow nullok try_first_pass use_authtok 密码足够 pam_ldap.so use_authtok 需要密码 pam_deny.so
会话可选 pam_keyinit.so 撤销 会话需要 pam_limits.so 会话可选 pam_mkhomedir.so 会话 [成功 = 1 默认 = 忽略] pam_succeed_if.so 服务在 crond 中安静 use_uid 会话需要 pam_unix.so 会话可选 pam_ldap.so
/etc/pam.d/passwd 中仅包含通常的 3 个 system-auth 行。
答案1
您是否在使用 Kerberos 或 Samba winbind?还是您只是尝试直接使用 LDAP?
如果是后者,您的 /etc/ldap.conf 文件应该有一系列似乎缺失的“pam_*”参数。特别是“pam_password 广告' 必须指定 ADSI 作为密码更改协议。您可能还需要“pam_login_attribute sAMAccountName”(+ 其他)
我个人一直都是使用 winbind 绑定 Linux 机器,然后更改密码就像使用“net ads password”一样