美文网首页玩转大数据Java
OpenLDAP 安装配置和使用

OpenLDAP 安装配置和使用

作者: AlienPaul | 来源:发表于2022-08-16 15:39 被阅读0次

前言

OpenLDAP 是 LDAP 协议的一个开源实现(Lightweight Directory Access Protocol,LDAP)。多用于集中式用户身份信息管理和认证服务。本篇讲解OpenLDAP服务的安装配置和使用。

环境信息:

  • CentOS 7
  • OpenLDAP 2.4.44

安装和配置OpenLDAP

安装OpenLDAP

执行下面命令安装OpenLDAP:

yum install -y openldap openldap-clients openldap-servers

执行完毕后openldap服务端和客户端安装完成。

配置OpenLDAP的管理员和密码

和其他管理系统一样,OpenLDAP也需要设置一个管理员账户和密码。

这里我们将管理员用户配置为DN=cn=Manager,dc=paultech,dc=com,密码设置为admin

执行:

[root@test ~]# slappasswd -s admin
{SSHA}EsELyIVzL20GOByTOsZcwg/Z92QObh4X

记下这串字符,接下来会用到。

修改/etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif文件:

olcSuffix: dc=paultech,dc=com
olcRootDN: cn=Manager,dc=paultech,dc=com
olcRootPW: {SSHA}EsELyIVzL20GOByTOsZcwg/Z92QObh4X

这些配置项的含义为:

  • olcSuffix: 前缀,一般为机器的域名。后面创建的所有对象都具有这个前缀。
  • olcRootDN: 管理员DN。
  • olcRootPW: 管理员密码,使用前面slappasswd生成的字符串。

然后修改/etc/openldap/slapd.d/cn=config/olcDatabase={1}monitor.ldif文件:

olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=extern
 al,cn=auth" read by dn.base="cn=Manager,dc=paultech,dc=com" read by * none

第二个dn.base修改为管理员DN。

然后校验配置文件:

[root@test cn=config]# slaptest -u
62f07254 ldif_read_file: checksum error on "/etc/openldap/slapd.d/cn=config/olcDatabase={1}monitor.ldif"
62f07254 ldif_read_file: checksum error on "/etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif"
config file testing succeeded

这里显示配置文件测试成功。Checksum error 可以忽略。

启动服务

执行:

systemctl enable slapd
systemctl start slapd
systemctl status slapd

启动slapd服务。

配置openldap数据库

执行:

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

导入基本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

也可以导入全部/etc/openldap/schema/中的schema,命令和上面的类似。

生成基础目录树

由于没有基础目录树,LDAP系统到目前为止是无法使用的。需要使用命令将他们创建出来。

创建一个base.ldif文件,内容如下:

dn: dc=paultech,dc=com
dc: paultech
objectClass: top
objectClass: domain
 
dn: ou=people,dc=paultech,dc=com
ou: people
objectClass: top
objectClass: organizationalUnit
 
dn: ou=group,dc=paultech,dc=com
ou: group
objectClass: top
objectClass: organizationalUnit

然后执行:

ldapadd -x -D "cn=Manager,dc=paultech,dc=com" -W -f base.ldif

将上面的目录创建出来。

创建成功之后使用ldapsearch -x -LLL查看创建出的目录。

注意,执行命令可能会遇到如下输出:

[root@paultech ~]# ldapsearch -x -LLL
No such object (32)

这种情况需要配置/etc/openldap/ldap.conf文件,修改下面的内容:

BASE    dc=paultech,dc=com
URI     ldap://paultech
  • BASE修改为前面配置的olcSuffix
  • URL修改为ldap://{LDAP服务器的hostname或IP}

然后重新执行上面的命令。

使用migrationtools迁移系统用户到LDAP服务

进行完上面步骤OpenLDAP安装和部署已经完成,但是其中没有用户和组信息。可以通过手工创建objectclass为posixAccountinetorgperson条目代表用户,创建objectclass为posixGroup或者groupOfNames代表分组。通过创建organizationalUnitorganizationalRole对条目划分部门等。

还有一种用户组信息的规划方案,就是和操作系统的用户体系保持同步。这就涉及到如何将操作系统用户和组信息迁移到LDAP服务中。本节主要讲解使用migrationtools迁移系统用户到LDAP服务的方法。

安装migrationtools

执行:

yum install -y migrationtools

修改配置

编辑/usr/share/migrationtools/migrate_common.ph文件。修改如下内容:

# Default DNS domain
$DEFAULT_MAIL_DOMAIN = "paultech.com";

# Default base
$DEFAULT_BASE = "dc=paultech,dc=com";

执行迁移

# 导出基础信息
/usr/share/migrationtools/migrate_base.pl > base.ldif
# 导出用户
/usr/share/migrationtools/migrate_passwd.pl /etc/passwd passwd.ldif
# 导出组
/usr/share/migrationtools/migrate_group.pl /etc/group group.ldif

# 导入上面的信息到LDAP服务
ldapadd -x -D "cn=Manager,dc=paultech,dc=com" -W -f base.ldif
ldapadd -x -D "cn=Manager,dc=paultech,dc=com" -W -f passwd.ldif
ldapadd -x -D "cn=Manager,dc=paultech,dc=com" -W -f group.ldif

注意,如果目标条目已存在,导入的时候会报错退出。可以在ldapadd命令中使用-c参数忽略错误。

OpenLDAP命令使用

OpenLDAP 有如下常用客户端命令:

  • ldapsearch:搜索目录树条目。
  • ldapadd:通过ldif文件添加目录树条目。
  • ldapdelete:删除目录树条目。
  • ldapmodify:修改目录树条目。
  • ldapwhoami:校验LDAP用户的身份信息。
  • ldapmodrdn:修改目录树条目的DN。
  • ldapcompare:判断两个条目是否为同一个。
  • ldappasswd:重置LDAP用户条目的密码。

服务端命令常用的有:

  • slaptest:验证OpenLDAP配置文件有效性。
  • slapindex:创建LDAP目录树索引,提高检索效率。
  • slapcat:将条目转换为ldif文件。多用于备份。

接下来分别介绍他们。

ldapsearch

ldapsearch命令用来根据查询条件检索出符合条件的条目。

参数解释:

  • -x: 使用简单认证。
  • -b searchbase: 查找的节点。
  • -D binddn: LDAP绑定的DN,使用时候指定OpenLDAP管理员的DN。
  • -W: 命令执行之后需要数据管理员DN密码。
  • -w password: 直接将管理员密码附在参数中。
  • -h: LDAP服务所在hostname或者IP。
  • -p: LDAP服务的端口号。配合-h参数使用。
  • -H: 根据LDAP URL查询对应的LDAP服务。
  • -L: 指定输出格式。输出格式为ldif(LDAP Data Interchange Format)。一个L代表限制输出格式为LDIFv1.A,两个L代表不输出注释,三个L表示不输出ldif版本信息。

如果查询的LDAP服务和执行命令的机器相同,可以不指定-p, -h-H参数。

例如:

ldapsearch -x -b cn=users,cn=accounts,dc=paultech,dc=com -D uid=admin,cn=users,cn=accounts,dc=paultech,dc=com -W

这条命令查找DN=cn=users,cn=accounts,dc=paultech,dc=com下面的所有条目的所有属性。

ldapsearch -x -b cn=users,cn=accounts,dc=paultech,dc=com uid cn displayName -D uid=admin,cn=users,cn=accounts,dc=paultech,dc=com -W

这条命令查找DN=cn=users,cn=accounts,dc=paultech,dc=com下面的所有条目的uid, cn和displayName属性。

ldapsearch -x -b cn=users,cn=accounts,dc=paultech,dc=com "uid=paul" cn displayName -D uid=admin,cn=users,cn=accounts,dc=paultech,dc=com -W

这条命令查找DN=cn=users,cn=accounts,dc=paultech,dc=com下面的uid为paul的所有条目的cn和displayName属性。

除了使用=表示查询条件关系外,还可以使用>=<=~=

ldapadd

ldapadd命令用来根据ldif文件添加目录树条目。相当于ldapmodify -a命令。

对于以下ldif文件:

dn: dc=paultech,dc=com
dc: paultech
objectClass: top
objectClass: domain
  
dn: ou=people,dc=paultech,dc=com
ou: people
objectClass: top
objectClass: organizationalUnit
  
dn: ou=group,dc=paultech,dc=com
ou: group
objectClass: top
objectClass: organizationalUnit

执行:

ldapadd -x -D "cn=Manager,dc=paultech,dc=com" -W -f base.ldif

可以将上面的条目添加到LDAP。

ldapdelete

ldapdelete从目录树中删除指定的条目,通过DN来匹配需要删除的条目。

参数解释:

  • -x: 使用简单认证。

  • -D binddn: LDAP绑定的DN,使用时候指定OpenLDAP管理员的DN。

  • -W: 命令执行之后需要数据管理员DN密码。

  • -w password: 直接将管理员密码附在参数中。

  • -y: 使用密码文件的方式认证。

  • -h: LDAP服务所在hostname或者IP。

  • -p: LDAP服务的端口号。配合-h参数使用。

  • -H: 根据LDAP URL查询对应的LDAP服务。

  • -r: 递归删除。

  • -n: 显示正在进行的操作,但实际上不修改,多用于测试命令。

  • -c: 持续操作模式,执行过程中间出错不中断。

例如:

ldapdelete -x -W -D cn=Manager,dc=paultech,dc=com "uid=paul,ou=People,dc=paultech,dc=com"

命令会删除DN为uid=paul,ou=People,dc=paultech,dc=com的条目。

ldapmodify

ldapmodify用来编辑目录树中的条目。

参数解释:

  • -x: 使用简单认证。

  • -D binddn: LDAP绑定的DN,使用时候指定OpenLDAP管理员的DN。

  • -W: 命令执行之后需要数据管理员DN密码。

  • -w password: 直接将管理员密码附在参数中。

  • -y: 使用密码文件的方式认证。

  • -h: LDAP服务所在hostname或者IP。

  • -p: LDAP服务的端口号。配合-h参数使用。

  • -H: 根据LDAP URL查询对应的LDAP服务。

  • -a: 增加条目。相当于ldapadd

  • -f: 指定ldif文件。

下面给出一个例子。编辑modifyUser.ldif文件,内容如下:

dn: uid=paul,ou=People,dc=paultech,dc=com
changetype: modify
replace: displayName
displayName: PaulJackson

然后执行:

ldapmodify -x -D cn=Manager,dc=paultech,dc=com -W -f modifyUser.ldif

可以修改DN为uid=paul,ou=People,dc=paultech,dc=comdisplayName属性值。

ldapmodify也可以删除属性值,例如:

dn: uid=paul,ou=People,dc=paultech,dc=com
changetype: modify
delete: displayName

ldapwhoami

用来验证用户和密码。

例如:

ldapwhoami -x -D uid=paul,ou=People,dc=paultech,dc=com -w 123456
uid=paul,ou=People,dc=paultech,dc=com

如果用户信息正确,会返回用户的DN。否则会报Invalid credentials(凭据无效)。

ldapmodrdn

修改目录条目的RDN,即修改DN。

其余参数和上面的命令基本相同,需要注意的是这个参数:

  • -r: 删除老旧的RDN条目。默认情况会保留旧的值。

例如:

ldapmodrdn -x -D cn=Manager,dc=paultech,dc=com -W "uid=kate,ou=People,dc=paultech,dc=com" uid=mary

uid=kate,ou=People,dc=paultech,dc=com修改为uid=mary,ou=People,dc=paultech,dc=com,同时保留uid=kate。如果之后需要删除。可以编写如下ldif文件,然后使用ldapmodify命令运行。

dn: uid=mary,ou=People,dc=paultech,dc=com
changetype: modify
delete: uid
uid: kate

ldapcompare

比较两个条目是否是同一个条目。

ldapcompare -x -D cn=Manager,dc=paultech,dc=com -W "uid=paul,ou=People,dc=paultech,dc=com" "uid:kate"
FALSE

ldappasswd

使用LDAP管理员修改LDAP用户的密码。

需要注意的是下面的参数:

  • -A: 提示输入旧密码。
  • -S: 提示输入新密码。

一个例子如下:

ldappasswd -x -D cn=Manager,dc=paultech,dc=com -w admin "uid=paul,ou=People,dc=paultech,dc=com" -S

slaptest

检测LDAP配置文件是否存在问题。例如:

slaptest -f /etc/openldap/slapd.conf

slapindex

创建LDAP数据库的索引,加快检索速度。执行的时候要求停止slapd服务。

  • -f:指定 OpenLDAP 的配置文件(slapd.conf),并创建索引。

  • -F:指定 OpenLDAP 数据库目录,并创建索引。

slapcat

将数据条目转换为ldif文件。

  • -a filter:添加过滤选项。只dump符合过滤条件的条目。
  • -b suffix:指定 suffix。比如 dc=paultech,dc=com。
  • -f:指定 OpenLDAP 的配置文件。
  • -F:指定 OpenLDAP 的数据库文件目录。
  • -c:出现错误时,忽略错误继续执行。
  • -H:使用 LDAP 服务器的 URL 地址进行操作。
  • -v:输出详细信息。

例如:

slapcat -v -l dump.ldif

图形化界面操作LDAP

命令方式查看目录树,搜索和修改等操作非常繁琐不直观。社区为我们提供了图形化界面操作LDAP的工具。下面我们分别介绍下Apache Directory Studio(客户端访问方式)和phpldapadmin(服务器端常驻服务)两种常用的图形化工具。

使用Apache Directory Studio

Apache Directory Studio是一个可运行在Windows,MacOS和Linux下的图形界面操作LDAP客户端。

下载地址:Index of /apache/directory/studio (tsinghua.edu.cn)。然后解压到任意目录。

注意:Apache Directory Studio要求JDK11以上,需要编辑安装目录下ApacheDirectoryStudio.ini文件,配置JDK11的java二进制文件地址,如下:

-vm
/path/to/jdk-11.0.14.1+1/bin/java

启动成功后点击File -> New。选择弹出窗口wizards中的LDAP Browser -> LDAP Connection。然后按照向导填入LDAP服务的hostname和端口号,Bind DN和密码(管理员DN及其密码)。即可连接到LDAP服务。

Apache Directory Studio左侧导航栏以树形结构展示了所有LDAP目录条目。点击任意一个条目,右侧会展示该条目的所有属性和值。创建条目和编辑属性的方法较为直观,这里不再介绍。

phpldapadmin

phpldapadmin是一个常驻web服务,提供了图形化操作LDAP目录树的能力。

安装配置

安装epel-release源:

yum install -y epel-release
yum makecache

安装phpldapadmin:

yum install phpldapadmin.noarch

接下来配置phpldapadmin。

编辑/etc/phpldapadmin/config.php文件,修改Define your LDAP servers in this section

$servers->setValue('server','host','127.0.0.1');
$servers->setValue('server','port',389);
$servers->setValue('login','auth_type','cookie');
$servers->setValue('login','bind_id','cn=Manager,dc=paultech,dc=com');
$servers->setValue('login','bind_pass','admin');
$servers->setValue('server','tls',false);

SASL Authentication部分修改如下配置:

$servers->setValue('login','attr','dn');

启动httpd服务:

systemctl start httpd

登录web管理页面

浏览器打开http://{ip}/ldapadmin。登录用户名和密码分别使用管理员DNcn=Manager,dc=paultech,dc=com和上面配置的密码admin

FAQ

This base cannot be created with PLA错误,无法创建任何条目

出现这个问题说明没有创建基础目录树。

创建base.ldif文件,添加如下内容:

dn: dc=paultech,dc=com
dc: paultech
objectClass: top
objectClass: domain

然后执行:

ldapadd -D cn=Manager,dc=paultech,dc=com -x -f base.ldif -W

输入LDAP的管理员密码。创建出基础目录树。

相关文章

网友评论

    本文标题:OpenLDAP 安装配置和使用

    本文链接:https://www.haomeiwen.com/subject/hftdgrtx.html