我已经在 centos 7 以上版本上安装了 openldap,并成功将用户 newuser01 添加到数据库中。ldapsearch 可以在主服务器和客户端上使用以下格式正常工作:
ldapsearch -H ldaps://provider.example.com -x -D "cn=Manager,dc=example,dc=com" -W
但是,客户端和主控上均不返回任何内容getent passwd -s sss newuser01
。getent passwd newuer01
这是我查看过的文件,我不确定它们是否配置正确,以及是否还有其他文件我应该查看,非常感谢您的努力:
- /etc/nsswitch.conf /etc/openldap/ldap.conf
- /etc/sssd/sssd.conf
- /etc/openldap/slapd.conf # 在 centos 7 中已弃用
- /etc/pam.d/系统身份验证
在 Master 上:
/etc/nsswitch.conf
包含:
passwd: files sss
shadow: files sss
group: files sss
hosts: files dns
bootparams: nisplus [NOTFOUND=return] files
ethers: files
netmasks: files
networks: files
protocols: files
rpc: files
services: files sss
netgroup: files sss
publickey: nisplus
automount: files
aliases: files nisplus
/etc/openldap/ldap.conf
包含:
BASE dc=example,dc=com
URI ldaps://provider.example.com
TLS_CACERTDIR /etc/openldap/certs
TLS_REQCERT demand
SASL_NOCANON on
/etc/sssd/sssd.conf
服务器上为空
/etc/pam.d/system-auth
包含:
auth required pam_env.so
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 1000 quiet_success
auth required pam_deny.so
account required pam_unix.so
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 1000 quiet
account required pam_permit.so
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password required pam_deny.so
session optional pam_keyinit.so revoke
session required pam_limits.so
-session optional pam_systemd.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
在客户端上:
/etc/nsswitch.conf
包含与服务器完全相同的内容
/etc/openldap/ldap.conf
包含:
TLS_CACERTDIR /etc/openldap/cacerts
# Turning this off breaks GSSAPI used with krb5 when rdns = false
SASL_NOCANON on
URI ldaps://provider.example.com:636
BASE dc=example,dc=com
/etc/sssd/sssd.conf
包含:
[domain/default]
autofs_provider = ldap
cache_credentials = False
ldap_search_base = dc=example,dc=com
krb5_server = #
id_provider = ldap
auth_provider = ldap
chpass_provider = ldap
ldap_uri = ldaps://provider.example.com:636
ldap_id_use_start_tls = False
ldap_tls_cacertdir = /etc/openldap/cacerts
[sssd]
services = nss, pam, autofs
config_file_version = 2
domains = default
[nss]
homedir_substring = /home
[pam]
[sudo]
[autofs]
[ssh]
[pac]
[ifp]
/etc/pam.d/system-auth
似乎包含服务器对此额外条目所执行的操作:
session optional pam_sss.so
答案1
这对我来说有效,使用 sssd-ldap 对抗 freeipa ldap 服务器(不是使用内置 idm 提供程序,而是使用要求的 sssd-ldap 提供程序)。
- 安装 sssd-ldap 和 authoconfig
- 跑步
authconfig --enablesssd --enablesssdauth --enablelocauthorize --update
- 使用适当的信息创建配置文件 /etc/sssd/sssd.conf:
[domain/default] autofs_provider = ldap ldap_schema = rfc2307bis id_provider = ldap auth_provider = ldap chpass_provider = ldap ldap_uri = ldap://your.ldap.host ldap_id_use_start_tls = True cache_credentials = True ldap_tls_cacertdir = /etc/pki/tls/certs ldap_tls_cacert = /etc/pki/tls/certs/ca-bundle.crt ldap_default_bind_dn = uid=user1,cn=users,cn=accounts,dc=your,dc=domain,dc=tld ldap_default_authtok_type = password ldap_default_authtok = secretpassword ldap_user_search_base = cn=users,cn=accounts,dc=your,dc=domain,dc=tld ldap_group_search_base = cn=groups,cn=accounts,dc=your,dc=domain,dc=tld [sssd] services = nss, pam, autofs config_file_version = 2 domains = default [nss] homedir_substring = /home [pam] [sudo] [autofs] [ssh] [pac] [ifp]
- 重新启动 sssd 服务:
systemctl restart sssd
- 验证 nsswitch.conf 中是否为 passwd、groups 和 shadow 启用了 sss。不要在 nsswitch.conf 中使用 ldap,它应该是“files sss”,而不是“files ldap”
如果您不需要绑定来获取用户列表,请删除 ldap_default_bind_dn、ldap_default_authtok_type 和 ldap_default_authtok 指令。如果您不需要 tls,请删除这些指令,但您正在对用户进行身份验证,因此应该启用它。修改 cacertdir 和 cacert 指令的路径以匹配您的情况,作为用户和组搜索基础。
在此博客中:http://www.couyon.net/blog/enabling-ldap-usergroup-support-and-authentication-in-centos-6您将找到类似的操作指南。官方 Red Hat 文档在此处:https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System-Level_Authentication_Guide/Configuring_Domains.html#Configuring_Domains-Configuring_a_Native_LDAP_Domain
一如既往,事实胜于雄辩:
[root@localhost sssd]# grep user1 /etc/passwd
[root@localhost sssd]# getent passwd user1
user1:*:1076200004:1076200004:ipa user:/home/user1:/bin/sh