当前位置: 首页 > 工具软件 > OpenLDAP > 使用案例 >

openldap的安装

怀齐智
2023-12-01

一、LDAP理论

使用场景:

一般公司内部都会有多个系统,而每个系统都有自己的一套用户认证。每次新进或离职一位同事,我们这边OPS运维组的小伙伴们,都要在每个系统上去添加用户,这样是非常不方便的。为了统一管理所有系统的用户认证,ldap是最合适不过了。这样每个系统的用户认证全部通过ldap来进行,而每个系统的权限就使用各自系统的权限管理即可。

1.LDAP服务的概念

LDAP:Lightweight Directory Access Protocol,轻量目录访问协议。
LDAP服务是一个为只读(查询、浏览、搜索)访问而优化的非关系型数据库,呈树状结构组织数据。
LDAP主要用做用户信息查询(如邮箱、电话等)或对各种服务访问做后台认证以及用户数据权限管控。

2.LDAP协议

LDAP具有两个标准,分别是X.500和LDAP。
OpenLDAP是基于X.500标准的,而且去除了X.500复杂的功能并且可以根据自我需求定制额外扩展功能。

3.LDAP 相关名词

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”

如下图:

公司 DC
基础设施部 OU
开发部 OU
运维组 OU
网络组 OU
技术总监 CN
PC组 OU
app组 OU
开发组长 CN
小强 CN
小红 CN
小张 CN

二、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语言学习相关资料\技术文档\linux\openldap\1.centos7安装openldap.assets\image-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语言学习相关资料\技术文档\linux\openldap\1.centos7安装openldap.assets\image-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中

1.添加系统用户

[root@salt-master ~]# useradd zhangsan
[root@salt-master ~]# useradd lisi
[root@salt-master ~]# passwd zhangsan
[root@salt-master ~]# passwd lisi

2.提取系统用户信息

[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: organizationalUnit

4.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语言学习相关资料\技术文档\linux\openldap\1.centos7安装openldap.assets\image-20220503165333534.png)]

八、查看openldap相关信息

查看openldap全部信息,使用如下命令

ldapsearch -x -b “dc=ilanni,dc=com” -H ldap://127.0.0.1

1.查看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组中

 类似资料: