使用场景:
一般公司内部都会有多个系统,而每个系统都有自己的一套用户认证。每次新进或离职一位同事,我们这边OPS运维组的小伙伴们,都要在每个系统上去添加用户,这样是非常不方便的。为了统一管理所有系统的用户认证,ldap是最合适不过了。这样每个系统的用户认证全部通过ldap来进行,而每个系统的权限就使用各自系统的权限管理即可。
LDAP:Lightweight Directory Access Protocol,轻量目录访问协议。
LDAP服务是一个为只读(查询、浏览、搜索)访问而优化的非关系型数据库,呈树状结构组织数据。
LDAP主要用做用户信息查询(如邮箱、电话等)或对各种服务访问做后台认证以及用户数据权限管控。
LDAP具有两个标准,分别是X.500和LDAP。
OpenLDAP是基于X.500标准的,而且去除了X.500复杂的功能并且可以根据自我需求定制额外扩展功能。
DC:domain component一般为公司名,例如:dc=163,dc=com
OU:organization unit为组织单元,最多可以有四级,每级最长32个字符,可以为中文
CN:common name为用户名或者服务器名,最长可以到80个字符,可以为中文
DN:distinguished name为一条LDAP记录项的名字,有唯一性,例如:dn:“cn=admin,ou=developer,dc=163,dc=com”
如下图:
yum -y install openldap compat-openldap openldap-clients openldap-servers openldap-servers-sql openldap-devel migrationtools
查看openldap版本
[root@salt-master ~]# slapd -VV
@(#) $OpenLDAP: slapd 2.4.44 (Feb 23 2022 17:11:27) $
mockbuild@x86-01.bsys.centos.org:/builddir/build/BUILD/openldap-2.4.44/openldap-2.4.44/servers/slapd
注意:从OpenLDAP2.4.23版本开始所有配置数据都保存在/etc/openldap/slapd.d/中,建议不再使用slapd.conf作为配置文件
#这是对123456进行了加密。稍后配置文件中会用到
[root@salt-master ~]# slappasswd -s 123456
{SSHA}yl35K1a97HNS6AoqW7xPM5qyuA2QbU9U
#目录结构如下:
[root@salt-master ~]# ls /etc/openldap/slapd.d/
cn=config cn=config.ldif
[root@salt-master ~]# 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
[root@salt-master ~]# vim /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}hdb.ldif
#在文件最后增加一行
olcRootPW: {SSHA}yl35K1a97HNS6AoqW7xPM5qyuA2QbU9U
#修改两行
olcSuffix: dc=bybo,dc=com
olcRootDN: cn=root,dc=bybo,dc=com
其中cn=root中的root表示OpenLDAP管理员的用户名,而olcRootPW表示OpenLDAP管理员的密码。
如下图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JJW4WMAQ-1652861238353)(E:\C语言学习相关资料\技术文档\linux\openldap\1.centos7安装openldap.assets\image-20220503152952008.png)]
[root@salt-master ~]# vim /etc/openldap/slapd.d/cn=config/olcDatabase\=\{1\}monitor.ldif
#这里修改的配置和olcDatabase={2}hdb.ldif文件中olcRootDN中的配置一致
修改如下:
read by dn.base="cn=root,dc=bybo,dc=com"
如下图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nYdiKgGN-1652861238354)(E:\C语言学习相关资料\技术文档\linux\openldap\1.centos7安装openldap.assets\image-20220503153802642.png)]
[root@salt-master ~]# slaptest -u
6270dc63 ldif_read_file: checksum error on "/etc/openldap/slapd.d/cn=config/olcDatabase={1}monitor.ldif"
6270dc63 ldif_read_file: checksum error on "/etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif"
config file testing succeeded
[root@salt-master ~]# systemctl start slapd.service
[root@salt-master ~]# systemctl enable slapd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/slapd.service to /usr/lib/systemd/system/slapd.service.
[root@salt-master ~]# systemctl status slapd
[root@salt-master ~]# netstat -antp |grep slap
tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 2532/slapd
tcp6 0 0 :::389 :::* LISTEN 2532/slapd
OpenLDAP默认使用的数据库是BerkeleyDB,现在来开始配置OpenLDAP数据库,使用如下命令:
/var/lib/ldap/就是BerkeleyDB数据库默认存储的路径。
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown ldap:ldap -R /var/lib/ldap
chmod 700 -R /var/lib/ldap
[root@salt-master ~]# ll /var/lib/ldap/
-rwx------ 1 ldap ldap 2048 May 3 15:41 alock
-rwx------ 1 ldap ldap 286720 May 3 15:41 __db.001
-rwx------ 1 ldap ldap 32768 May 3 15:41 __db.002
-rwx------ 1 ldap ldap 49152 May 3 15:41 __db.003
-rwx------ 1 ldap ldap 845 May 3 15:44 DB_CONFIG
-rwx------ 1 ldap ldap 8192 May 3 15:41 dn2id.bdb
-rwx------ 1 ldap ldap 32768 May 3 15:41 id2entry.bdb
-rwx------ 1 ldap ldap 10485760 May 3 15:41 log.0000000001
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
#这里的+71 是打开文件后直接跳转到71行
[root@salt-master ~]# vim /usr/share/migrationtools/migrate_common.ph +71
#修改以下三行
# Default DNS domain
$DEFAULT_MAIL_DOMAIN = "bybo.com";
# Default base
$DEFAULT_BASE = "dc=bybo,dc=com";
$EXTENDED_SCHEMA = 1;
到这里Openldap已经全部配置完成。接下来就是添加用户和组了
默认情况下OpenLDAP是没有普通用户的,但是有一个管理员用户。管理用户就是前面我们刚刚配置的root。
现在我们将系统中的用户添加到openldap中
[root@salt-master ~]# useradd zhangsan
[root@salt-master ~]# useradd lisi
[root@salt-master ~]# passwd zhangsan
[root@salt-master ~]# passwd lisi
[root@salt-master ~]# egrep "zhangsan|lisi" /etc/passwd > /root/users
[root@salt-master ~]# egrep "zhangsan|lisi" /etc/group > /root/groups
[root@salt-master ~]# cat users
zhangsan:x:1001:1001::/home/zhangsan:/bin/bash
lisi:x:1002:1002::/home/lisi:/bin/bash
[root@salt-master ~]# cat groups
zhangsan:x:1001:
lisi:x:1002:
根据系统用户生成ldap需要的ldif文件
[root@salt-master ~]# /usr/share/migrationtools/migrate_passwd.pl /root/users > /root/users.ldif
[root@salt-master ~]# /usr/share/migrationtools/migrate_group.pl /root/groups > /root/groups.ldif
[root@salt-master ~]# cat users.ldif
dn: uid=zhangsan,ou=People,dc=bybo,dc=com
uid: zhangsan
cn: zhangsan
sn: zhangsan
mail: zhangsan@bybo.com
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}$6$xIoPwQDO$HNnpMcWSWo09900ha.v/c67toDcbhY6DOaqCy8hhY1ratpV7L1NJrvNlBRqWRUItsE0SO9xfyev6ywSad4Y6y/
shadowLastChange: 19115
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1001
gidNumber: 1001
homeDirectory: /home/zhangsan
dn: uid=lisi,ou=People,dc=bybo,dc=com
uid: lisi
cn: lisi
sn: lisi
mail: lisi@bybo.com
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}$6$hy7JPIgN$oibyeMYBKVmZ6yzkkc1pF/z1AoYgRBkkcMRAKuUsE3BGGGbQ7ZB8N..qPH7mHwDLtmMLb0w0Qu.ah.tvtx3Pf.
shadowLastChange: 19115
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1002
gidNumber: 1002
homeDirectory: /home/lisi
[root@salt-master ~]# cat groups.ldif
dn: cn=zhangsan,ou=Group,dc=bybo,dc=com
objectClass: posixGroup
objectClass: top
cn: zhangsan
userPassword: {crypt}x
gidNumber: 1001
dn: cn=lisi,ou=Group,dc=bybo,dc=com
objectClass: posixGroup
objectClass: top
cn: lisi
userPassword: {crypt}x
gidNumber: 1002
[root@salt-master ~]# vim base.ldif
dn: dc=bybo,dc=com
o: bybo com
dc: bybo
objectClass: top
objectClass: dcObject
objectclass: organization
dn: cn=root,dc=bybo,dc=com
cn: root
objectClass: organizationalRole
description: Directory Manager
dn: ou=People,dc=bybo,dc=com
ou: People
objectClass: top
objectClass: organizationalUnit
dn: ou=Group,dc=bybo,dc=com
ou: Group
objectClass: top
objectClass: organizationalUnit
[root@salt-master ~]# ldapadd -x -w "123456" -D "cn=root,dc=bybo,dc=com" -f /root/base.ldif
adding new entry "dc=bybo,dc=com"
adding new entry "cn=root,dc=bybo,dc=com"
adding new entry "ou=People,dc=bybo,dc=com"
adding new entry "ou=Group,dc=bybo,dc=com"
[root@salt-master ~]# ldapadd -x -w "123456" -D "cn=root,dc=bybo,dc=com" -f /root/users.ldif
adding new entry "uid=zhangsan,ou=People,dc=bybo,dc=com"
adding new entry "uid=lisi,ou=People,dc=bybo,dc=com"
[root@salt-master ~]# ldapadd -x -w "123456" -D "cn=root,dc=bybo,dc=com" -f /root/groups.ldif
adding new entry "cn=zhangsan,ou=Group,dc=bybo,dc=com"
adding new entry "cn=lisi,ou=Group,dc=bybo,dc=com"
使用如下命令:
ll /var/lib/ldap/
这里发现生产了很多bdb的文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZrTMB5R4-1652861238355)(E:\C语言学习相关资料\技术文档\linux\openldap\1.centos7安装openldap.assets\image-20220503165333534.png)]
查看openldap全部信息,使用如下命令
ldapsearch -x -b “dc=ilanni,dc=com” -H ldap://127.0.0.1
[root@salt-master ~]# ldapsearch -LLL -x -D 'cn=root,dc=bybo,dc=com' -w '123456' -b 'dc=bybo,dc=com' 'uid=zhangsan'
或者
[root@salt-master ~]# ldapsearch -x -b 'dc=bybo,dc=com' 'uid=zhangsan'
[root@salt-master ~]# ldapsearch -LLL -x -D 'cn=root,dc=bybo,dc=com' -w '123456' -b 'dc=bybo,dc=com' 'cn=zhangsan'
dn: uid=zhangsan,ou=People,dc=bybo,dc=com
uid: zhangsan
cn: zhangsan
sn: zhangsan
mail: zhangsan@bybo.com
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword:: e2NyeXB0fSQ2JHhJb1B3UURPJEhObnBNY1dTV28wOTkwMGhhLnYvYzY3dG9EY2J
oWTZET2FxQ3k4aGhZMXJhdHBWN0wxTkpydk5sQlJxV1JVSXRzRTBTTzl4ZnlldjZ5d1NhZDRZNnkv
shadowLastChange: 19115
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1001
gidNumber: 1001
homeDirectory: /home/zhangsan
#现在看zhangsan组中没有任何成员
dn: cn=zhangsan,ou=Group,dc=bybo,dc=com
objectClass: posixGroup
objectClass: top
cn: zhangsan
userPassword:: e2NyeXB0fXg=
gidNumber: 1001
尽管我们已经把用户和用户组信息,导入到OpenLDAP数据库中了。但实际上目前OpenLDAP用户和用户组之间是没有任何关联的。
如果我们要把OpenLDAP数据库中的用户和用户组关联起来的话,我们还需要做另外单独的配置。
现在我们要把ldapuser1用户加入到ldapgroup1用户组,需要新建添加用户到用户组的ldif文件,如下:
[root@salt-master ~]# vim add_user_to_groups.ldif
#手动添加以下内容
dn: cn=zhangsan,ou=Group,dc=bybo,dc=com
changetype: modify
add: memberuid
memberuid: zhangsan
[root@salt-master ~]# ldapadd -x -w '123456' -D 'cn=root,dc=bybo,dc=com' -f /root/add_user_to_groups.ldif
modifying entry "cn=zhangsan,ou=Group,dc=bybo,dc=com"
#在查看zhangsan组的信息
[root@salt-master ~]# ldapsearch -LLL -x -D 'cn=root,dc=bybo,dc=com' -w '123456' -b 'dc=bybo,dc=com' 'cn=zhangsan'
......
......
dn: cn=zhangsan,ou=Group,dc=bybo,dc=com
objectClass: posixGroup
objectClass: top
cn: zhangsan
userPassword:: e2NyeXB0fXg=
gidNumber: 1001
memberUid: zhangsan #zhangsan用户已经加入到zhangsan组中