最近公司的LDAP服务器同步出现故障了,很多的服务都是连接ldap进行验证的,接着重新修复的机会写一下这个文档,LDAP基础的知识和实现我就不讲了,这次只写怎么部署和用的,那么废话不多说,上干货。
基础设计
服务器名称 | 操作系统 | IP地址 |
LDAP1 | Centos7 | 10.1.1.5 |
LDAP2 | Centos7 | 10.1.1.6 |
ldap服务需要使用CA服务签发的证书
所以第一步进行CA的操作
CA服务器生成证书
(1)更新服务
yum install -y openssl
(2)签发CA准备工作
cd /etc/pki/CA/
touch index.txt
echo 01 > serial
cp -a /etc/pki/tls/openssl.cnf{,$(date +%F)}
sed -i "50s/cacert.pem/CA.crt/" /etc/pki/tls/openssl.cnf
sed -i "55s/cakey.pem/CA.key/" /etc/pki/tls/openssl.cnf
(3)生成私钥与证书
umask 077 ; openssl genrsa -out private/CA.key
openssl req -new -x509 -days 3650 -key private/CA.key -subj "/C=CN/ST=LiaoNing/L=ShenYang/O=example/OU=devops/CN=ca.example.cn/emailAddress=develop.example.cn"> CA.crt
##让其有效期为十年
(4)在OpenLDAP服务端生成CSR
mkdir /root/SSL
cd /root/SSL
openssl genrsa -out ldap.key
openssl req -new -days 3650 -key ldap.key -subj "/C=CN/ST=LiaoNing/L=ShenYang/O=linlong/OU=devops/CN=ldap.example.cn/emailAddress=develop.example.cn" -out ldap.csr
openssl ca -days 3650 -in /root/SSL/ldap.csr -out /root/SSL/ldap.crt
cd /root/SSL
cp ldap.crt /etc/openldap/certs/
cp ldap.key /etc/openldap/certs/
cp /etc/pki/CA/CA.crt /etc/openldap/certs/
cp /etc/pki/CA/private/CA.key /etc/openldap/certs/
部署LDAP单点
(1)安装服务
yum install -y openldap openldap-servers openldap-clients compat-openldap
chown -R ldap.ldap /etc/openldap/
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown ldap.ldap /var/lib/ldap/DB_CONFIG
(2)启动并配置基础设置
systemctl restart slapd
mkdir /ldif_file
cd /ldif_file
开启SSL功能
cat /ldif_file/ssl.ldif
dn: cn=config
changetype: modify
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/openldap/certs/CA.crt
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/openldap/certs/ldap.crt
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/openldap/certs/ldap.key
执行ldif配置文件
cd /ldif_file
ldapmodify -Y EXTERNAL -H ldapi:/// -f ssl.ldif
sed -i "s#ldap:\/\/\/#& ldaps:\/\/\/#" /etc/sysconfig/slapd
systemctl restart slapd
验证
openssl verify -CAfile /etc/pki/CA/CA.crt /etc/openldap/certs/ldap.crt
会出现/etc/openldap/certs/ldapsrv.crt: OK
openssl s_client -connect $(hostname):636 -showcerts -state -CAfile /etc/openldap/certs/CA.crt
会出现SSL配置
(3)设置服务器密码
slappasswd
输入密码后会出现加密的密码举例如下
{SSHA}POLKU+dbVNqTYwFMTecd+PHwT249222
需要牢记保存好后续会用到,同时明文密码也要保存好后续会用到
(4)设置创建管理用户以及设置密码
cat /ldif_file/pw.ldif
dn: olcDatabase={0}config,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}POLKU+dbVNqTYwFMTecd+PHwT249222
执行命令
ldapadd -Y EXTERNAL -H ldapi:/// -f pw.ldif
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
(5)配置域
cat /ldif_file/main.ldif
dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.base="cn=admin,dc=example,dc=cn" read by * none
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=example,dc=cn
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=admin,dc=example,dc=cn
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}POLKU+dbVNqTYwFMTecd+PHwT249222
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=admin,dc=example,dc=cn" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=admin,dc=example,dc=cn" write by * read
执行命令
ldapmodify -Y EXTERNAL -H ldapi:/// -f main.ldif
(6)创建管理admin角色
cat admin.ldif
dn: dc=example,dc=cn
objectClass: top
objectClass: dcObject
objectclass: organization
o: LinLong company
dc: example
dn: cn=admin,dc=example,dc=cn
objectClass: organizationalRole
cn: admin
description: administrator
执行命令
ldapadd -x -D cn=admin,dc=1shitou,dc=cn -W -f admin.ldif
(7)创建用户创建组
cat group.ldif
dn: ou=People,dc=example,dc=cn
objectClass: organizationalUnit
ou: People
dn: ou=Group,dc=example,dc=cn
objectClass: organizationalUnit
ou: Group
dn: ou=Shenyang,ou=People,dc=example,dc=cn
objectClass: organizationalUnit
ou: Shenyang
dn: ou=liu,ou=People,dc=example,dc=cn
objectClass: organizationalUnit
ou: liu
执行命令
ldapadd -x -D cn=admin,dc=1shitou,dc=cn -W -f group.ldif
cat user.ldif
dn: uid=liu,ou=liu,ou=People,dc=example,dc=cn
cn: liu
userPassword: liu
displayname: 刘
gidnumber: 10002
uid: liu
uidnumber: 10002
sn: liu
homedirectory: /home/liu
mail: liu@qq.com
loginshell: /bin/bash
objectclass: top
objectClass: posixAccount
objectclass: inetOrgPerson
objectClass: shadowAccount
执行命令
ldapadd -x -D cn=admin,dc=example,dc=cn -w 明文密码 -f user.ldif
LDAP (双主)集群部署
上面的是单点的部署方式,集群双主则是按单点的方式部署两台
注意事项
(1)CA签发的证书使用一致的
(2)ldap版本一致
(3)同步时间
(4)ldap创建的组以及已有的用户一致,同步之前进行操作
部署操作
ldap集群的操作是通过syncprov
.la模块实现的这是镜像同步的模块
同步时间
yum install -y ntpdate
echo "0 * * * * /usr/sbin/ntpdate cn.pool.ntp.org" >> /var/spool/cron/root
cat mod_syncprov.ldif
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulePath: /usr/lib64/openldap
olcModuleLoad: syncprov.la
执行命令
ldapadd -Y EXTERNAL -H ldapi:/// -f mod_syncprov.ldif
修改OpenLDAP的配置
cat syncprov.ldif
dn: olcOverlay=syncprov,olcDatabase={2}hdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
olcSpSessionLog: 100
执行
ldapadd -Y EXTERNAL -H ldapi:/// -f syncprov.ldif
在ldap1上
dn: cn=config
changetype: modify
replace: olcServerID
olcServerID: 0
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=001
provider=ldaps://对端IP地址:636
bindmethod=simple
binddn="cn=admin,dc=example,dc=cn"
credentials=明文密码
searchbase="dc=example,dc=cn"
tls_reqcert=allow
scope=sub
schemachecking=on
type=refreshAndPersist
retry="30 5 300 3"
interval=00:00:05:00
-
add: olcMirrorMode
olcMirrorMode: TRUE
dn: olcOverlay=syncprov,olcDatabase={2}hdb,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
ldapmodify -Y EXTERNAL -H ldapi:/// -f master_1.ldif
cat master_2.ldif
dn: cn=config
changetype: modify
replace: olcServerID
olcServerID: 1
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=001
provider=ldaps://对端IP地址:636
bindmethod=simple
binddn="cn=admin,dc=example,dc=cn"
credentials=明文密码
searchbase="dc=example,dc=cn"
tls_reqcert=allow
scope=sub
schemachecking=on
type=refreshAndPersist
retry="30 5 300 3"
interval=00:00:05:00
-
add: olcMirrorMode
olcMirrorMode: TRUE
dn: olcOverlay=syncprov,olcDatabase={2}hdb,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
执行
ldapmodify -Y EXTERNAL -H ldapi:/// -f master_2.ldif