一、背景
LDAP介绍
- LDAP是一款轻量级目录访问协议(Lightweight Directory Access Protocol,简称LDAP),属于开源集中账号管理架构的实现。
- LDAP的信息是以树状的层次结构来存储数据,最顶层即根部称作“Root”。在根目录的下面有很多的文件和目录,为了把这些大量的数据从逻辑上分开,LDAP像其它的目录服务协议一样使用OU(Organization Unit,组织单元),可以用来表示公司内部机构,如部门等。同时OU还可以有子OU,用来表示更为细致的分类。OU下面还有CN(Common name,共同名字),用于更小级别的组织单元。一个CN下存储多个条目,该条目可以有很多属性,存储在LDAP数据库中。
- LDAP提供并实现目录服务的信息服务,目录服务是一种特殊的数据库系统。LDAP默认以Berkeley DB作为后端数据库,BerkeleyDB数据库主要以散列的数据类型进行数据存储,如以键值对的方式进行存储。RDN(Relative Distinguished Name)是指条目的相对唯一名称,也可简称为DN。在LDAP中,每个条目都有一个RDN,它是该条目在其父级条目下的唯一名称。例如:一个RDN为:uid=mwaddams,cn=User,ou=people,dc=Initech,dc=com可以表示为一个用户名为mwaddams存储在Initech.com域下的User组织单元中。**
TeleDBX-LDAP认证
- 在TeledbX中,支持使用LDAP进行用户的身份验证。这种认证方法操作起来类似于password,只不过它使用 LDAP 作为密码验证方法。用户可以使用他们在LDAP中存储的凭据(如用户名和密码)来连接到TeleDBX数据库。TeleDBX将会将用户的凭据发送到LDAP服务器进行验证,如果验证成功,用户将被授予对数据库的访问权限。通过将TeledbX与LDAP集成,可以实现统一的身份验证和授权管理,从而简化用户和权限的管理。
- TeleDBX支持2种LDAP的认证模式,simple bind模式以及search bind模式,不同的模式对于pg_hba.conf配置不同。后续的测试均以simple bind模式为例。
二、TeleDBX开启LDAP认证步骤
在TeleDBX中,要启用LDAP认证,需要进行以下步骤:
1、configure阶段,添加--with-ldap。
2、编辑TeleDBX的配置文件 pg_hba.conf,添加允许LDAP认证的规则,指定允许哪些用户或组使用LDAP进行身份验证。
TeledbX分布式数据库具有多个节点,协调节点CN以及数据节点DN,且每个节点具有其各自的pg_hba.conf。目前TeleDBX仅支持单个节点的LDAP认证登录(详见附录多节点配置LDAP认证的bug)。修改支持LDAP登录认证节点对应的pg_hba.conf文件。pg_hba.conf的格式通常为以下几种:
local database user auth-method [auth-options]
host database user address auth-method [auth-options]
hostssl database user address auth-method [auth-options]
hostnossl database user address auth-method [auth-options]
host database user IP-address IP-mask auth-method [auth-options]
hostssl database user IP-address IP-mask auth-method [auth-options]
hostnossl database user IP-address IP-mask auth-method [auth-options]
为了支持LDAP认证,设置 ldap 作为 authentication_method,并配置其他相关的LDAP连接参数,以simple bind模式为例:auth-options包括
- ldapserver:要连接的LDAP服务器的名称或IP地址。可以指定多个服务器,用空格分隔。
- ldapport:要连接的LDAP服务器的端口号。如果没有指定端口,LDAP库的默认端口设置将被使用。
- ldapprefix:形成指定LDAP查询时用户条目的DN字符串前缀。
- ldapsuffix:形成指定LDAP查询时用户条目的DN字符串后缀。
3、重启TeledbX服务器,生效pg_hba.conf配置。
配置成功后,数据库用户username请求到数据库服务器的连接时,TeleDBX将尝试使用ldapprefix+username+ldapsuffix和用户提供的登录密码来绑定到 LDAP 服务器ldapserver:ldapport。如果LDAP认证成功,将被授予数据库访问。
三、验证
验证环境:
1、物理机:10.129.180.87
2、TeleDBX:
节点 | 端口 | 数据目录 |
---|---|---|
GTM | 51475 | /data4/luoxu/teledbX/my_teledbx/data/gtm |
CN1 | 60444 | /data4/luoxu/teledbX/my_teledbx/data/cn01 |
CN2 | 60555 | /data4/luoxu/teledbX/my_teledbx/data/cn02 |
DN1 | 10444 | /data4/luoxu/teledbX/my_teledbx/data/dn01 |
DN2 | 10555 | /data4/luoxu/teledbX/my_teledbx/data/dn02 |
DN1 SLAVE | 50344 | /data4/luoxu/teledbX/my_teledbx/data/dn01_s |
DN2 SLAVE | 50355 | /data4/luoxu/teledbX/my_teledbx/data/dn02_s |
3、OpenaLDAP server:10.129.180.87:389(其部署步骤见附录)
验证步骤:
1、在使用 LDAP 进行认证之前,用户必须已经存在于数据库中。在TeledbX中创建用户ldap_test。
postgres=> create user ldap_test password '1235lx##';
该密码为md5认证使用,可以任意设置,甚至可以不设置密码。ldap认证的密码存储在ldap服务器中。
2、在LDAP服务器中,创建ldap_test用户,并生成TeledbX的登陆密码。
2.1 生成用户密码(该密码为TeleDBX数据库ldap_test用户的登陆密码,自定义)
[luoxu@centos7-87 ldap]$ slappasswd
New password: z8dKViUlZYv2lw==
Re-enter new password: z8dKViUlZYv2lw==
{SSHA}YuFpF4+W3VND0kwJ6PIvv6T1Y/yRi7Qv
ldap使用slappasswd进行哈希,哈希值存储在文件中,避免明文存储。
2.2 创建user01.ldif,创建用户,名为ldap_test
[luoxu@centos7-87 ldap]$ vim user01.ldif
dn: uid=ldap_test,ou=People,dc=lxlx,dc=com
uid: ldap_test
cn: ldap_test
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
loginShell: /bin/bash
uidNumber: 503
gidNumber: 500
homeDirectory: /data4/luoxu/teledbX/ldap/ldap_test
userPassword: {SSHA}YuFpF4+W3VND0kwJ6PIvv6T1Y/yRi7Qv
ldap通过ldif文件的形式对存储的数据进行修改/增加操作。其中,uid为用户名称,userPassword为用户登陆密码的SSHA串,ou=People,dc=lxlx,dc=com为目录名称。该文件表示在lxlx.com域中,在People组织单元中insert了用户uid为ldap_test,密码为z8dKViUlZYv2lw==的数据。
2.3 应用user01.ldif
[luoxu@centos7-87 ldap]$ sudo ldapadd -x -W -D "cn=ldapadm,dc=lxlx,dc=com" -f user01.ldif
Enter LDAP Password:
adding new entry "uid=ldap_test,ou=People,dc=lxlx,dc=com"
ldap服务通过ldapadd应用数据。
至此,LDAP新增用户ldap_test的dn(一个dn唯一表示一个目录条目)为:uid=ldap_test,ou=People,dc=lxlx,dc=com,TeledbX的ldpa认证配置使用该dn作为认证指纹。
3、修改pg_hba.conf文件。TeleDBX仅支持单节点的LDAP认证登录,这里以登录cn01为例。因此修改cn01的/data4/luoxu/teledbX/my_teledbx/data/cn01/pg_hba.conf
#认证位置添加
local all all ldap ldapserver=127.0.0.1 ldapport=389 ldapprefix="uid=" ldapsuffix=",ou=People,dc=lxlx,dc=com"
host all all 0.0.0.0/0 ldap ldapserver=127.0.0.1 ldapport=389 ldapprefix="uid=" ldapsuffix=",ou=People,dc=lxlx,dc=com"
注意事项:使用ldap认证时,尽可能删除/注释掉md5认证方式,避免冲突。
4、重启TeleDBX
#停止所有节点
PGXC stop all
#启动所有节点
PGXC start all
5、ldap_test登录数据库
[luoxu@centos7-87 bin]$ ./psql -U ldap_test -d postgres -p 60444
Password for user ldap_test: z8dKViUlZYv2lw==
psql (PostgreSQL 10.0 TeleDBX V6)
Type "help" for help.
postgres=>
使用存储在LDAP的登陆密码登录,认证成功。
6、查看LDAP服务端日志:
[luoxu@centos7-87 ldap]$ sudo tail /var/log/slapd.log
Dec 8 14:34:58 centos7-87 slapd[102635]: conn=1017 fd=11 ACCEPT from IP=127.0.0.1:58294 (IP=0.0.0.0:389)
Dec 8 14:34:58 centos7-87 slapd[102635]: conn=1017 op=0 BIND dn="uid=ldap_test,ou=People,dc=lxlx,dc=com" method=128
Dec 8 14:34:58 centos7-87 slapd[102635]: conn=1017 op=0 BIND dn="uid=ldap_test,ou=People,dc=lxlx,dc=com" mech=SIMPLE ssf=0
Dec 8 14:34:58 centos7-87 slapd[102635]: conn=1017 op=0 RESULT tag=97 err=0 text=
Dec 8 14:34:58 centos7-87 slapd[102635]: conn=1017 op=1 UNBIND
Dec 8 14:34:58 centos7-87 slapd[102635]: conn=1017 fd=11 closed
可以发现ldap_test认证成功。
7、当然,使用ldap_test在create user时候设置的密码1235lx##登陆不成功
[luoxu@centos7-87 bin]$ ./psql -U ldap_test -d postgres -p 60444
Password for user ldap_test: 1235lx##
psql: FATAL: LDAP authentication failed for user "ldap_test"
##查看ldap日志 err=49报错
Dec 8 14:37:47 centos7-87 slapd[102635]: conn=1018 fd=11 ACCEPT from IP=127.0.0.1:40540 (IP=0.0.0.0:389)
Dec 8 14:37:47 centos7-87 slapd[102635]: conn=1018 op=0 BIND dn="uid=ldap_test,ou=People,dc=lxlx,dc=com" method=128
Dec 8 14:37:47 centos7-87 slapd[102635]: conn=1018 op=0 RESULT tag=97 err=49 text=
Dec 8 14:37:47 centos7-87 slapd[102635]: conn=1018 op=1 UNBIND
Dec 8 14:37:47 centos7-87 slapd[102635]: conn=1018 fd=11 closed
附录
LDAP部署步骤
环境:物理机10.129.180.87。以下步骤若无权限,使用sudo。
1、yum安装ldap服务及其依赖
[luoxu@centos7-87 ldap]$ sudo yum install openldap openldap-clients openldap-servers
若为centos8:
会提示Error: Unable to find a match: openldap-servers,这是因为CentOS 8 的仓库中取消了对 openLDAP-servers 包的支持。
使用:
sudo dnf install openldap-servers
2、查看OpenLDAP版本
[luoxu@centos7-87 ldap]$ 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
centos8:可能是
[luoxu@cantian-host78 openldap]$ slapd -VV @(#) $OpenLDAP: slapd 2.4.59 (Jun 4 2021 16:58:00) $ build@c8rpm:/home/build/git/rheldap8/RHEL8_x86_64/BUILD/symas-openldap-2.4.59/openldap-2.4.59/servers/slapd
3、检查OpenLDAP的重要配置文件
/etc/openldap/slapd.d/*:OpenLDAP的主配置文件,记录根域信息,管理员名称,密码,日志,权限等
/etc/openldap/schema/*:OpenLDAP的schema存放的地方
/var/lib/ldap/*:OpenLDAP的数据文件
/usr/share/openldap-servers/DB_CONFIG.example 模板数据库配置文件
注意:/etc/openldap/目录一定要有以下四个文件(centos8可能多一个ldap.conf):
[luoxu@centos7-87 openldap]$ ll total 8 drwxr-xr-x 2 root root 90 Dec 7 15:23 certs -rw-r--r-- 1 root root 121 Feb 24 2022 check_password.conf drwxr-xr-x 2 root root 4096 Dec 7 15:16 schema drwxr-x--- 3 ldap ldap 45 Dec 7 15:16 slapd.d
若没有certs,通常是由于卸载后将certs一并卸载:需执行以下操作:
[luoxu@centos7-87 openldap]$ sudo mkdir -p /etc/openldap/certs [luoxu@centos7-87 openldap]$ sudo bash /usr/libexec/openldap/create-certdb.sh Creating certificate database in '/etc/openldap/certs'. [luoxu@centos7-87 openldap]$ sudo bash /usr/libexec/openldap/generate-server-cert.sh Creating new server certificate in '/etc/openldap/certs'. [luoxu@centos7-87 openldap]$ ll /etc/openldap/certs total 80 -rw-r--r-- 1 root root 65536 Dec 7 15:23 cert8.db -rw-r--r-- 1 root root 16384 Dec 7 15:23 key3.db -r--r----- 1 root ldap 45 Dec 7 15:23 password -rw-r--r-- 1 root root 16384 Dec 7 15:23 secmod.db
4、启动ldap并查看其状态
[luoxu@centos7-87 openldap]$ sudo systemctl start slapd
[luoxu@centos7-87 openldap]$ sudo systemctl status slapd.service
● slapd.service - OpenLDAP Server Daemon
Loaded: loaded (/usr/lib/systemd/system/slapd.service; disabled; vendor preset: disabled)
Active: active (running) since Thu 2023-12-07 15:27:08 CST; 7s ago
Docs: man:slapd
man:slapd-config
man:slapd-hdb
man:slapd-mdb
file:///usr/share/doc/openldap-servers/guide.html
Process: 196448 ExecStart=/usr/sbin/slapd -u ldap -h ${SLAPD_URLS} $SLAPD_OPTIONS (code=exited, status=0/SUCCESS)
Process: 196431 ExecStartPre=/usr/libexec/openldap/check-config.sh (code=exited, status=0/SUCCESS)
Main PID: 196449 (slapd)
Tasks: 2
CGroup: /system.slice/slapd.service
└─196449 /usr/sbin/slapd -u ldap -h ldapi:/// ldap:///
Dec 07 15:27:08 centos7-87 systemd[1]: Starting OpenLDAP Server Daemon...
Dec 07 15:27:08 centos7-87 runuser[196434]: pam_unix(runuser:session): session opened for user ldap by (uid=0)
Dec 07 15:27:08 centos7-87 runuser[196434]: pam_unix(runuser:session): session closed for user ldap
Dec 07 15:27:08 centos7-87 slapcat[196438]: DIGEST-MD5 common mech free
Dec 07 15:27:08 centos7-87 slapd[196448]: @(#) $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....rs/slapd
Dec 07 15:27:08 centos7-87 slapd[196448]: tlsmc_get_pin: INFO: Please note the extracted key file will not be protected with a PIN any...issions.
Dec 07 15:27:08 centos7-87 slapd[196449]: slapd starting
Dec 07 15:27:08 centos7-87 systemd[1]: Started OpenLDAP Server Daemon.
Hint: Some lines were ellipsized, use -l to show in full.
[luoxu@centos7-87 openldap]$ sudo lsof -i :389
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
slapd 196449 ldap 8u IPv4 3325570019 0t0 TCP *:ldap (LISTEN)
slapd 196449 ldap 9u IPv6 3325570020 0t0 TCP *:ldap (LISTEN)
5、配置OpenLDAP数据库
[luoxu@centos7-87 openldap]$ sudo cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
[luoxu@centos7-87 openldap]$ sudo chown ldap:ldap -R /var/lib/ldap
[luoxu@centos7-87 openldap]$ sudo chmod 700 -R /var/lib/ldap
## 导入基本Schema
[luoxu@centos7-87 openldap]$ sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=cosine,cn=schema,cn=config"
[luoxu@centos7-87 openldap]$ sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=nis,cn=schema,cn=config"
[luoxu@centos7-87 openldap]$ sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=inetorgperson,cn=schema,cn=config"
6、生成ldap管理员密码
[luoxu@centos7-87 ldap]$ slappasswd
New password: llxx1235##
Re-enter new password:
{SSHA}GEy7cuwnclud3nT98tx3UkL8NMkhgxXW
输入的密码为ldap管理员密码,管理员用来创建用户等。原始输入的密码以及生成的对应SSHA串均需记住。
7、创建管理员ldif文件并应用(可在创建一个ldap目录,用于存放ldif文件)
[luoxu@centos7-87 ldap]$ vim add_admin_pw.ldif
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=lxlx,dc=com
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=ldapadm,dc=lxlx,dc=com
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}GEy7cuwnclud3nT98tx3UkL8NMkhgxXW
1、在LDAP(轻型目录访问协议)中,DN(Distinguished Name)、CN(Common Name)和DC(Domain Component)是常见的术语,用于标识和组织目录中的条目和结构。
- DN(Distinguished Name):DN是LDAP目录中条目的唯一标识符。它是条目在LDAP树中的完整路径,类似于文件系统中的绝对路径。例如,cn=user,ou=People,dc=example,dc=com是一个DN,它指定了一个名为"user"的条目,位于"ou=People,dc=example,dc=com"组织单元下。
- CN(Common Name):CN通常用于表示条目的通用名称,例如用户、组或其他实体的名称。在DN中,CN通常用于表示条目的名称部分。例如,cn=user中的"cn"表示通用名称,后面的"user"是具体的名称。
- DC(Domain Component):DC用于表示域组件,通常用于构建LDAP树的根结点。在LDAP中,域组件通常用于表示域名的一部分。例如,dc=example,dc=com表示一个域名为"example.com"的组件。
2、ldap修改/增加配置数据,用户数据等,均通过ldif文件实现。
注意:olcDatabase根据/etc/openldap/slapd.d/cn=config的目录来里面来,如果是'olcDatabase={2}mdb.ldif',则上面写olcDatabase={2}mdb.ldif。
centos8可能是:
[root@cantian-host78 cn=config]# ll
total 20
drwxr-x--- 2 ldap ldap 108 Dec 20 19:05 'cn=schema'
-rw------- 1 ldap ldap 378 Dec 20 19:00 'cn=schema.ldif'
-rw------- 1 ldap ldap 513 Dec 20 19:00 'olcDatabase={0}config.ldif'
-rw------- 1 ldap ldap 412 Dec 20 19:00 'olcDatabase={-1}frontend.ldif'
-rw------- 1 ldap ldap 604 Dec 20 19:15 'olcDatabase={1}monitor.ldif'
-rw------- 1 ldap ldap 710 Dec 20 19:12 'olcDatabase={2}mdb.ldif'
则dn: olcDatabase={2}hdb,cn=config改为dn: olcDatabase={2}mdb.ldif,cn=config
8、应用add_admin_pw.ldif
[luoxu@centos7-87 ldap]$ sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f add_admin_pw.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={2}hdb,cn=config"
modifying entry "olcDatabase={2}hdb,cn=config"
modifying entry "olcDatabase={2}hdb,cn=config"
ldpa里面对配置信息的修改/添加均需要通过ldapmodify或者ldapadd命令。
9、创建monitor.ldif
[luoxu@centos7-87 ldap]$ vim monitor.ldif
dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external, cn=auth" read by dn.base="cn=ldapadm,dc=lxlx,dc=com" read by * none
10、应用monitor.ldif
[luoxu@centos7-87 ldap]$ sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f monitor.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}monitor,cn=config"
11、验证config配置是否正确
[luoxu@centos7-87 ldap]$ sudo slaptest -u
config file testing succeeded
12、添加配置基本目录
[luoxu@centos7-87 ldap]$ vim base.ldif
##添加如下信息
dn: dc=lxlx,dc=com
dc: lxlx
objectClass: top
objectClass: dcObject
objectclass: organization
o: lxlxcom
dn: cn=ldapadm,dc=lxlx,dc=com
objectClass: organizationalRole
cn: ldapadm
description: LDAP Manager
dn: ou=People,dc=lxlx,dc=com
objectClass: organizationalUnit
ou: People
dn: ou=Group,dc=lxlx,dc=com
objectClass: organizationalUnit
ou: Group
**一个dn唯一表示一个目录条目。上述配置表示:1、设置top域 dn: dc=lxlx,dc=com(相当于顶级树根) 2、在基本域lxlx.com设置一个管理员(organizationalRole),名字为ldapadm。3、在top域设置两个ou(组织单元)People和Group。**
13、应用base.ldif
[luoxu@centos7-87 ldap]$ sudo ldapadd -x -W -D "cn=ldapadm,dc=lxlx,dc=com" -f base.ldif
Enter LDAP Password:
adding new entry "dc=lxlx,dc=com"
adding new entry "cn=ldapadm,dc=lxlx,dc=com"
adding new entry "ou=People,dc=lxlx,dc=com"
adding new entry "ou=Group,dc=lxlx,dc=com"
会提示你输入管理员密码,请输入真实密码,非SSHA。至此,ldap服务基本配置完成。
至此,ldpa端的配置完成,能够存储数据。以下步骤为验证TELEDBX支持LDAP认证,生成ldap_test用户以及密码。
14、生成ldap_test用户及其登录密码
14.1 生成用户密码(该密码为TeleDBX数据库ldap_test用户的登陆密码,自定义):
[luoxu@centos7-87 ldap]$ slappasswd
New password: z8dKViUlZYv2lw==
Re-enter new password: z8dKViUlZYv2lw==
{SSHA}YuFpF4+W3VND0kwJ6PIvv6T1Y/yRi7Qv
14.2 创建user01.ldif,创建用户,名为ldap_test
[luoxu@centos7-87 ldap]$ vim user01.ldif
dn: uid=ldap_test,ou=People,dc=lxlx,dc=com
uid: ldap_test
cn: ldap_test
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
loginShell: /bin/bash
uidNumber: 503
gidNumber: 500
homeDirectory: /data4/luoxu/teledbX/ldap/ldap_test
userPassword: {SSHA}YuFpF4+W3VND0kwJ6PIvv6T1Y/yRi7Qv
1、其中,uid为用户名称,userPassword为slappasswd用户登陆密码的SSHA串,ou=People,dc=lxlx,dc=com为目录名称。该文件表示在lxlx.com域中,在People组织单元中insert了用户uid为ldap_test,密码为z8dKViUlZYv2lw==的数据。
2、homeDirectory自己创好。
14.3 应用user01.ldif
[luoxu@centos7-87 ldap]$ sudo ldapadd -x -W -D "cn=ldapadm,dc=lxlx,dc=com" -f user01.ldif
Enter LDAP Password:
adding new entry "uid=ldap_test,ou=People,dc=lxlx,dc=com"
1、ldap服务通过ldapadd应用数据。
2、会提示你输入管理员密码,请输入真实密码,非SSHA。
3、ldap新增用户ldap_test的dn(一个dn唯一表示一个目录条目)为:uid=ldap_test,ou=People,dc=lxlx,dc=com,TeledbX的ldpa认证配置使用该dn作为认证指纹。
15、查看一下当前ldap的目录
[luoxu@centos7-87 ldap]$ ldapsearch -x -b "dc=lxlx,dc=com"
# extended LDIF
#
# LDAPv3
# base <dc=lxlx,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# lxlx.com
dn: dc=lxlx,dc=com
dc: lxlx
objectClass: top
objectClass: dcObject
objectClass: organization
o: lxlxcom
# ldapadm, lxlx.com
dn: cn=ldapadm,dc=lxlx,dc=com
objectClass: organizationalRole
cn: ldapadm
description: LDAP Manager
# People, lxlx.com
dn: ou=People,dc=lxlx,dc=com
objectClass: organizationalUnit
ou: People
# Group, lxlx.com
dn: ou=Group,dc=lxlx,dc=com
objectClass: organizationalUnit
ou: Group
# ldap_test, People, lxlx.com
dn: uid=ldap_test,ou=People,dc=lxlx,dc=com
uid: ldap_test
cn: ldap_test
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
loginShell: /bin/bash
uidNumber: 503
gidNumber: 500
homeDirectory: /data4/luoxu/teledbX/ldap/ldap_test
userPassword:: e1NTSEF9WXVGcEY0K1czVk5EMGt3SjZQSXZ2NlQxWS95Umk3UXY=
# search result
search: 2
result: 0 Success
# numResponses: 6
# numEntries: 5
16、开启OpenLDAP日志记录
OpenLDAP默认是没有启动日志记录功能,在实际使用中为了方便定位问题,我们需要查看日志。
cat > ./loglevel.ldif << EOF
dn: cn=config
changetype: modify
replace: olcLogLevel
olcLogLevel: stats
EOF
[luoxu@centos7-87 ldap]$ sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f loglevel.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"
修改rsyslog配置文件,并重启服务:
[luoxu@centos7-87 ldap]$ sudo vim /etc/rsyslog.conf
##在rsyslog.conf末尾添加:
local4.* /var/log/slapd.log
[luoxu@centos7-87 ldap]$ sudo systemctl restart rsyslog
[luoxu@centos7-87 ldap]$ sudo systemctl restart slapd
查看日志:
[luoxu@centos7-87 ldap]$ sudo tail /var/log/slapd.log
Dec 7 16:47:50 centos7-87 slapd[96528]: daemon: shutdown requested and initiated.
Dec 7 16:47:50 centos7-87 slapd[96528]: slapd shutdown: waiting for 0 operations/tasks to finish
Dec 7 16:47:50 centos7-87 slapd[96528]: slapd stopped.
Dec 7 16:47:50 centos7-87 slapd[11682]: @(#) $OpenLDAP: slapd 2.4.44 (Feb 23 2022 17:11:27) $#012#011mockbuild@x86-01.bsys.centos.org:/builddir/build/BUILD/openldap-2.4.44/openldap-2.4.44/servers/slapd
Dec 7 16:47:50 centos7-87 slapd[11783]: slapd starting
*上述步骤简单配置了ldpa的管理员以及管理员密码用于管理ldap条目。同时配置了top域,dc:lxlx,dc:com(lxlx.com)。此外设置了两个组织单元,用于存储信息,分别为ou:People,以及ou:Group。
最后设置了一个用户ldap_test,其唯一dn为uid=ldap_test,ou=People,dc=lxlx,dc=com。
附ldap的卸载步骤:
1、systemctl stop slapd
2、yum -y remove openldap-servers openldap-clients
3、rm -rf /var/lib/ldap
4、userdel ldap
5、rm -rf /etc/openldap