0. 引言
这是『在 CentOS 搭建 LDAP 服务器』系列的第二篇,在第一篇《Linux 认证框架 与 LDAP》我们知道了 Linux 集成 LDAP 的原理,这篇我们将详细学习 OpenLDAP 在 CentOS 7 上的配置(但不包括 TLS,TLS 将放到第三篇单独讲)。
1. OpenLDAP server 配置
- 1.1 安装 OpenLDAP 依赖
$ yum install -y openldap-servers openldap-clients migrationstools
- 1.2 生成 openldap 管理员密码
$ slappasswd   # 输入明文密码,返回结果是 '{SSHA}' 开头的密文
- 1.3 基础配置
$ cd /etc/openldap/slapd.d/cn=config
$ vi olcDatabase={2}hdb.ldif
    olcSuffix: dc=[my-domain],dc=com            # 把 my-domain/com 改成自己的 dc
    olcRootDN: cn=Manager,dc=[my-domain],dc=com
    olcRootPW: {SSHA}…                          # 这里填写刚才生成的密文
$ vi olcDatabase={1}monitor.ldif
    olcAccess: …cd=Manager,dc=[my-domain],dc=com…
- 1.4 启动服务
$ systemctl start slapd
$ systemctl enable slapd
- 1.5 复制 DB_CONFIG 文件到 OpenLDAP 数据库目录
$ cp -v /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
$ chown ldap:ldap /var/lib/ldap/DB_CONFIG
- 1.6 生成基础 schema
$ ldapadd -Y EXTERNAL -H ldapi:// -f /etc/openldap/schema/cosine.ldif
$ ldapadd -Y EXTERNAL -H ldapi:// -f /etc/openldap/schema/nis.ldif
$ ldapadd -Y EXTERNAL -H ldapi:// -f /etc/openldap/schema/inetorgperson.ldif
- 1.7 在根目录下创建 ldap 目录用来保存中间配置文件
$ mkdir ~/ldap
$ cd ~/ldap
$ vi base.ldif
    dn: dc=example,dc=com
    objectClass: top
    objectClass: dcObject
    objectClass: organization
    o: example.technology
    dc: example
    dn: cn=Manager,dc=example,dc=com
    objectClass: organizationalRole
    cn: Manager
    description: Directory Administrator
    dn: ou=People,dc=example,dc=com
    objectClass: organizationalUnit
    ou: People
    dn: ou=Group,dc=example,dc=com
    objectClass: organizationalUnit
    ou: Group
- 1.8 创建测试用户
$ useradd testing1
$ useradd testing2
$ echo "testing1" | passwd "testing1" --stdin
$ echo "testing2" | passwd "testing2" --stdin
$ grep ":100[1|2]" /etc/passwd > passwd          # 根据实际 id 修改
$ grep ":100[1|2]" /etc/group > groups
- 1.9 配置 migrationtools
$ cd /usr/share/migrationtools/
$ vi migrate_common.ph
    - /padl.com
    $DEFAULT_MAIL_DOMAIN = “example.com”
    $DEFAULT_BASE = “dc=example,dc=com”
    - /EXTENDED_SCHEMA
    EXTENDED_SCHEMA = 1
- 1.10 运行 ldif 迁移
$ ./migrate_passwd.pl /root/ldap/passwd /root/ldap/users.ldif
$ ./migrate_group.pl /root/ldap/groups /root/ldap/groups.ldif
- 1.11 导入数据到 OpenLDAP server
$ cd ~/ldap
$ ldapadd -x -W -D "cn=Admin,dc=example,dc=com" -f base.ldif
$ ldapadd -x -W -D "cn=Admin,dc=example,dc=com" -f users.ldif
$ ldapadd -x -W -D "cn=Admin,dc=example,dc=com" -f groups.ldif
# 查看用户
ldapsearch -x cn=testing1 -b dc=example,dc=com
- 1.12 如果防火墙已启用,则开放 ldap 端口
$ firewall-cmd --permanent --add-service=ldap
$ firewall-cmd --reload
- 1.13 配置 OpenLDAP server 日志
$ echo local4.*  /var/log/ldap.log >> /etc/rsyslog.conf
$ systemctl restart rsyslog
2. OpenLDAP client 配置 - nss-pam-ldapd
- 2.1 安装 OpenLDAP 依赖
$ yum install -y openldap-clients nss-pam-ldapd
- 2.2 配置 OpenLDAP server
# 先用 --test 测试执行结果
$ authconfig --enableldap --enableldapauth --ldapserver=ldap://[ldap-server-ip] --ldapbasedn='dc=[my-domain],dc=com' --enablemkhomedir --test
# 用 --update 执行命令
$ authconfig --enableldap --enableldapauth --ldapserver=ldap://[ldap-server-ip] --ldapbasedn='dc=[my-domain],dc=com' --enablemkhomedir --update
3. OpenLDAP client 配置 - sssd
- 3.1 安装 OpenLDAP 依赖
$ yum install -y openldap-clients sssd
- 3.2 配置 OpenLDAP server
$ cd /etc/sssd
$ vi sssd.conf
    [sssd]
    services = nss, pam
    domains = default
    [pam]
    [domain/default]
    autofs_provider = ldap
    cache_credentials = True
    id_provider = ldap
    auth_provider = ldap
    chpass_provider = ldap
    ldap_uri = ldap://[ldap-server-ip]
    ldap_search_base = dc=example,dc=com
    ldap_id_use_start_tls = False
    #ldap_tls_cacertdir = /etc/openldap/cacerts
    #ldap_tls_reqcert = never
$ chmod 600 sssd.conf
$ systemctl enable sssd
$ systemctl start sssd
# enablesssd 更新 nsswitch,enablesssdauth 更新 pam.d(pam_sss.so)
$ authconfig --enablesssd --enablesssdauth --enablemkhomedir --update
4. authconfig 参数介绍
关于 authconfig 命令笔者网上查了很久没找到详细的解释,只有粗略的介绍每条参数的作用,所以关于以下的内容都是笔者亲自实践的结果,或许不全,提供参考。
- 
    --enableldap参数会在/etc/nsswitch.conf里加上 ldap,比如passwd: files ldap,这样在获取用户信息的时候就会多加上 LDAP 的数据源 ,比如getent passwd testing1最后就会通过 LDAP 得到结果。
- 
    --enableldapauth会在/etc/pam.d/system-auth里加上 pam_ldap.so,比如auth sufficient pam_ldap.so use_first_pass,这样 PAM 验证就会交给 LDAP 处理。
- 
    --enablesssd会在/etc/nsswitch.conf里加上 sss,比如passwd: files sss
- 
    --enablesssdauth会在/etc/pam.d/system-auth里加上 pam_sss.so,比如auth sufficient pam_sss.so use_first_pass
- 
    --enablemkhomedir顾名思义会在用户第一次登录的时候在 /home 创建根目录
