使用场景:
一般公司内部都会有多个系统,而每个系统都有自己的一套用户认证。每次新进或离职一位同事,我们这边OPS运维组的小伙伴们,都要在每个系统上去添加用户,这样是非常不方便的。为了统一管理所有系统的用户认证,ldap是最合适不过了。这样每个系统的用户认证全部通过ldap来进行,而每个系统的权限就使用各自系统的权限管理即可。
1.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记录项的名字,有唯一性,例如:dc:“cn=admin,ou=developer,dc=163,dc=com”
如下图:
二、LDAP安装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三、LDAP配置
注意:从OpenLDAP2.4.23版本开始所有配置数据都保存在/etc/openldap/slapd.d/中,建议不再使用slapd.conf作为配置文件
1.配置openldap的管理员密码#这是对123456进行了加密。稍后配置文件中会用到
[root@salt-master ~]# slappasswd -s 123456
{SSHA}yl35K1a97HNS6AoqW7xPM5qyuA2QbU9U
2.修改olcDatabase={2}hdb.ldif文件
#目录结构如下:
[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语言学习相关资料技术文档linuxopenldap1.centos7安装openldap.assetsimage-20220503152952008.png)]
3.修改olcDatabase={1}monitor.ldif文件[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语言学习相关资料技术文档linuxopenldap1.centos7安装openldap.assetsimage-20220503153802642.png)]
4.验证配置的正确性[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
5.启动LDAP
[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数据库
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五、导入基本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六、修改migrate_common.ph文件
#这里的+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 lisi2.提取系统用户信息
[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:3.生成ldif文件
根据系统用户生成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
4.导入用户和用户组到ldap数据库
4.1 配置openldap基础数据库
[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: organizationalUnit4.2 导入基础数据库
[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"4.3 导入用户到数据库
[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"4.4 导入用户组到数据库
[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"5.查看BerkeleyDB数据库文件
使用如下命令:
ll /var/lib/ldap/
这里发现生产了很多bdb的文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZrTMB5R4-1652861238355)(E:C语言学习相关资料技术文档linuxopenldap1.centos7安装openldap.assetsimage-20220503165333534.png)]
八、查看openldap相关信息查看openldap全部信息,使用如下命令
ldapsearch -x -b “dc=ilanni,dc=com” -H ldap://127.0.0.11.查看zhangsan信息
[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'2.查看组信息
[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组中



