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 创建根目录