由于在平时学习及测试中,需要测试与LDAP集成,比如最近在研究的Jenkins。所以需要部署下LDAP,特此记录。
安装OPenLDAP与相关安装包
$ yum -y install openldap compat-openldap openldap-clients openldap-servers \
openldap-servers-sql openldap-devel
启动openLDAP
# 启动
$ systemctl start slapd && systemctl enable slapd
# 确定端口已监听
$ ss -lntp | grep 389
LISTEN 0 1024 *:389 *:* users:(("slapd",pid=16742,fd=8))
LISTEN 0 1024 :::389 :::* users:(("slapd",pid=16742,fd=9))
创建LDAP的根密码
此密码用于整个安装过程,是LADP的管理员根密码,使用slappasswd 命令生成密码
输入slappasswd后提示输入密码与确认密码,系统会输出一串SSHA加密后的字符串,需要自行copy出来保存在记事本中,后续会用到,我这里设置的密码为 jianzhao87. 加密后的字符串如下:
$ slappasswd
New password:
Re-enter new password:
{SSHA}m8cZU+SzvO0mo3fYqEQK9FYIbxupu7l6
配置LDAP服务
OPenLdap 2.4不再推荐直接使用配置文件方式,并且极容易出错,修改的所有过程,均使用ldapmodify命令完成。
我们先来看看目前可配置的都有哪些文件,如下(注意文件的名称,一会修改配置的时候,会使用到。):
$ ls /etc/openldap/slapd.d/cn\=config
cn=schema cn=schema.ldif olcDatabase={0}config.ldif olcDatabase={-1}frontend.ldif olcDatabase={1}monitor.ldif olcDatabase={2}hdb.ldif
我们要修改的字段有:
olcSuffix:用于保存域信息,需要更新为自己的域。
olcRootDN:根的DN(唯一识别名),根的区别名,它用于根管理员在此节点下做所有的管理。
olcRootPW:LDAP 管理员的根密码,用刚刚第三步创建出来的密码设置到这里。
建议在当前登录用户的家目录下创建一个目录,专用于配置ldap(千万不要在/etc/openldap/slapd.d/cn=config目录下创建),如下:
$ mkdir ~/ldap; cd ~/ldap/
# 注意,在进行配置文件修改前,需要确认你的dc是什么,比如我这里是: dc=bsy,dc=com
# 然后将下面的所有dc=bsy,dc=com替换为你自己定义的
# 修改db文件
# db.ldif中的olcRootDN: cn=admin,dc=bsy,dc=com,其中admin,是你部署好后登录ldap的账号
# admin的密码就是你上面通过slappasswd命令定义的密码
# olcRootPW: {SSHA}/+SQQ8jFl2afvUi2JtGjy5dEmwhnNLnm 需要替换为你自己执行slappasswd命令输出的加密字符串
$ cat > db.ldif << EOF
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=bsy,dc=com
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=admin,dc=bsy,dc=com
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}/+SQQ8jFl2afvUi2JtGjy5dEmwhnNLnm
EOF
# 特别需要注意是的olcRootPW字段,因为这个字段在刚刚查看olcDatabase={2}hdb.ldif中是不存在的,所以使用add,表示增加,如果字段已经存在,使用replace,表示进行替换内容
# 完成编辑后,使用ldapmodify让修改的内容生效。
# ldapmodify命令可在运行环境中直接修改配置文件并且不需要重启就生效的命令,具体请看ldapmodify官方使用文档。
$ cat > monitor.ldif << EOF
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=max,dc=localhost" read by * none
EOF
上述文件定义好后,我们就可以执行下面的命令,进行配置文件修改了,如下:
$ ldapmodify -Y EXTERNAL -H ldapi:/// -f db.ldif
$ ldapmodify -Y EXTERNAL -H ldapi:/// -f monitor.ldif
创建LDAP基础库
这里创建的是一个基础库,用于保存数据。安装ldap后会有一个example配置,需要我们复制一份配置文件并赋予它所有权限:
$ cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
$ chown ldap:ldap /var/lib/ldap/*
完成配置后,我们就可以向数据库中增加schemas,需要增加的有:cosine , nis,inetorgperson
schemas是什么鬼,schemas就是数据库表的定义文件,相当于关系数据库中的表定义。当然稍有区别。具体可以参考文档说明understanding-ldap-schema。
执行ldapadd命令增加,命令如下:
$ 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
完成以后,就可以创建base.ldif,在库中增加自己管理域下的内容,运行命令:
$ cat > base.ldif << EOF
dn: dc=bsy,dc=com
dc: bsy
objectClass: top
objectClass: domain
dn: cn=admin ,dc=bsy,dc=com
objectClass: organizationalRole
cn: admin
description: LDAP Manager
dn: ou=People,dc=bsy,dc=com
objectClass: organizationalUnit
ou: People
dn: ou=Group,dc=bsy,dc=com
objectClass: organizationalUnit
ou: Group
EOF
同样的,需要修改为你自己的域,运行命令将此数据保存到库中去:
$ ldapadd -x -W -D "cn=admin,dc=bsy,dc=com" -f base.ldif
此命令会提示输入ldap的密码,输入的密码同上面第三步创建的密码一致,我这里输入:jianzhao87.
输出如下图:
至此,完成基本的配置。
管理LDAP
有很多LDAP 的管理工具,如:客户端工具Ldap Admin、phpldapadmin和ldap-account-management(简称lam)两款web管理工具,这里选择使用lam。
ldap-account-manager
这款工具的安装方式有很多,但是为了方便快捷,我这里直接docker启动一个(参考:官方文档):
$ docker run -p 8080:80 -it -d ldapaccountmanager/lam:stable
然后就可以访问并配置LAM了。
1、访问lam并修改服务配置(下面输入的lam默认密码也是lam):
2、按照如下进行配置:
3、登录到lam管理平台:
4、登录后的界面如下:
创建测试账号
现在我们创建个基础账号 devops,来供其他系统接入测试使用。
1、创建组(必须有一个初始组)
2、创建用户:
PS:纠正一下,下面这里就是你后续登录时使用的账号名:
好了,至此,你就可以把LDAP集成到其他系统中了,如Jenkins、gitlab等。