「Linux」- 搭建 LDAP 服务

  CREATED BY JENKINSBOT

问题描述

该笔记将记录:在 Linux 中,如何搭建 LDAP 服务,以及相关问题的解决方法。

环境概述

操作系统:Ubuntu 20.04.3 LTS
软件版本:2.4.49+dfsg-2ubuntu1.8

解决方案

已有很多关于 LADP 服务搭建的文章,我们能够进行参考(这里做简单记录)。

第零步、准备工作

1)修改主机名:

hostnamectl set-hostname ldap.d3rm.org

2)添加 ldap.d3rm.org 的 DNS A 记录,并解析到该主机(或通过修改 /etc/hosts 文件,这里不再展开)。

关于修改主机名:
1)修改主机名主要是为了域名最后的部分,这里为 d3rm.org 部分;
2)在安装 slapd 过程中,会提取该值作为 BDN 信息(dc=d3rm,dc=org);
3)否则,就要使用 dpkg-reconfigure slapd 来重新进行配置;
4)如果未设置主机名,则 cn=admin 将属于 dc=nodomain 条目;

第一步、安装服务

# apt-get install -y slapd ldap-utils
...

// 在安装的过程中会提示输入 admin 密码,根据提示设置即可;

执行 slapcat 命令,以检查服务安装成功:

# slapcat
dn: dc=d3rm,dc=org
objectClass: top
objectClass: dcObject
objectClass: organization
o: tech
dc: d3rm
structuralObjectClass: organization
entryUUID: 0d94ef1c-a873-103b-8452-1d0030c906c2
creatorsName: cn=admin,dc=d3rm,dc=org
createTimestamp: 20210913001240Z
entryCSN: 20210913001240.349640Z#000000#000#000000
modifiersName: cn=admin,dc=d3rm,dc=org
modifyTimestamp: 20210913001240Z

dn: cn=admin,dc=d3rm,dc=org
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword:: e1NTSETVaMWWYNnk3UThZZVZ1OExYOFVnek2WF9nhlUStrVodHU=
structuralObjectClass: organizationalRole
entryUUID: 0d96542e-a873-103b-8453-1d0030c906c2
creatorsName: cn=admin,dc=d3rm,dc=org
createTimestamp: 20210913001240Z
entryCSN: 20210913001240.358960Z#000000#000#000000
modifiersName: cn=admin,dc=d3rm,dc=org
modifyTimestamp: 20210913001240Z

第二步、创建数据条目

创建用户和组的 BDN 信息:

# vim basedn.ldif
dn: ou=people,dc=d3rm,dc=org
objectClass: organizationalUnit
ou: people

dn: ou=groups,dc=d3rm,dc=org
objectClass: organizationalUnit
ou: groups

# ldapadd -x -D cn=admin,dc=d3rm,dc=org -W -f basedn.ldif
Enter LDAP Password:
adding new entry "ou=people,dc=d3rm,dc=org"
adding new entry "ou=groups,dc=d3rm,dc=org"

在 people 中添加条目:

// 该步骤只是创建加密后的密码

# slappasswd
New password: 
Re-enter new password: 
{SSHA}Zn4/E5f+Ork7WZF/alrpMuHHGufC3x0k

# vim ldapusers.ldif
dn: uid=computingforgeeks,ou=people,dc=d3rm,dc=org
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
cn: computingforgeeks
sn: Wiz
userPassword: {SSHA}Zn4/E5f+Ork7WZF/alrpMuHHGufC3x0k
loginShell: /bin/bash
uidNumber: 2000
gidNumber: 2000
homeDirectory: /home/computingforgeeks

# ldapadd -x -D cn=admin,dc=d3rm,dc=org -W -f ldapusers.ldif 
Enter LDAP Password: 
adding new entry "uid=computingforgeeks,ou=people,dc=d3rm,dc=org"

在 Group 中添加条目:

# ldapadd -x -D cn=admin,dc=d3rm,dc=org -W -f ldapusers.ldif 
Enter LDAP Password: 
adding new entry "uid=computingforgeeks,ou=people,dc=d3rm,dc=org"

# vim ldapgroups.ldif
dn: cn=computingforgeeks,ou=groups,dc=d3rm,dc=org
objectClass: posixGroup
cn: computingforgeeks
gidNumber: 2000
memberUid: computingforgeeks

# ldapadd -x -D cn=admin,dc=d3rm,dc=org -W -f ldapgroups.ldif
Enter LDAP Password: 
 adding new entry "cn=computingforgeeks,ou=groups,dc=d3rm,dc=org"

第三步,查看已添加条目

# slapcat
...

通过 LDAP Admin 查看:

通过 ldapserch 查找:

# ldapsearch -x -b "dc=d3rm,dc=org" -H ldap://127.0.0.1 -D "cn=admin,dc=d3rm,dc=org" -W "uidNumber=2000"
Enter LDAP Password: 
# extended LDIF
#
# LDAPv3
# base <dc=d3rm,dc=org> with scope subtree
# filter: uidNumber=2000
# requesting: ALL
#

# computingforgeeks, people, d3rm.org
dn: uid=computingforgeeks,ou=people,dc=d3rm,dc=org
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
cn: computingforgeeks
sn: Wiz
userPassword:: e1NTSEF9S1V4Yy95a3hTNWV1ajVpYjBWOEFuMUxhVWJPMkE5SWQ=
loginShell: /bin/bash
uidNumber: 2000
gidNumber: 2000
homeDirectory: /home/computingforgeeks
uid: computingforgeeks

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

参考文献

Install and Configure OpenLDAP Server on Ubuntu 20.04|18.04 LTS
Is “dc=nomain” a in LDAP ACLs?
How To Search LDAP using ldapsearch (With Examples)