前言
OpenLDAP 是 LDAP 协议的一个开源实现。LDAP 服务器本质上是一个为只读访问而优化的非关系型数据库。它主要用做地址簿查询(如 email 客户端)或对各种服务访问做后台认证以及用户数据权限管控。(例如,访问 Samba 时,LDAP 可以起到域控制器的作用;或者 Linux 系统认证 时代替 /etc/passwd 的作用。)
本文采用联网方式安装, 未来会尝试内网安装包方式.
搭建环境
- Centos 7.5
- OpenLdap 2.4.44
安装步骤
安装OpenLdap服务端
- yum安装OpenLdap
yum install openldap-clients openldap-servers # 安装OPENLdap 包
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG # 配置文件
chown ldap. /var/lib/ldap/DB_CONFIG # 分配配置文件权限
systemctl enable slapd # OPENLdap 开机自启
systemctl start slapd # OPENLdap 启动
- 检擦服务是否安装成功
[root@testnode01 ~]# rpm -qa | grep openldap
openldap-clients-2.4.44-21.el7_6.x86_64
openldap-2.4.44-21.el7_6.x86_64
openldap-servers-2.4.44-21.el7_6.x86_64
[root@testnode01 openldap]# systemctl status slapd
● slapd.service - OpenLDAP Server Daemon
Loaded: loaded (/usr/lib/systemd/system/slapd.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2020-03-04 21:56:06 EST; 21s ago
Docs: man:slapd
man:slapd-config
man:slapd-hdb
man:slapd-mdb
file:///usr/share/doc/openldap-servers/guide.html
如果启动出现权限问题,给相应文件赋予LDAP用户权限
配置LDAP
- 我们使用 slappasswd 命令来生成一个密码,并使用 LDIF(LDAP 数据交换格式)文件将其导入到 LDAP 中来配置管理员密码:
[root@testnode01 openldap]# slappasswd -s 2NsxAHruCQy7ZD
{SSHA}UkZvtF0xj7uHKFBgvEmRgIiADjYRtZB4
[root@testnode01 ldapInstallScript]vim chrootpw.ldif
# specify the password generated above for "olcRootPW" section
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}UkZvtF0xj7uHKFBgvEmRgIiADjYRtZB4
[root@testnode01 ldapInstallScript]# ldapadd -Y EXTERNAL -H ldapi:/// -f chrootpw.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={0}config,cn=config"
- 我们需要向 LDAP 中导入一些基本的 Schema。这些 Schema 文件位于 /etc/openldap/schema/ 目录中,定义了我们以后创建的条目可以使用哪些属性:
[root@testnode01 ~]# 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"
[root@testnode01 ~]# 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"
[root@testnode01 ~]# 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"
- 我们需要配置 LDAP 的顶级域(以 dc=awuwuwu,dc=com 为例)及其管理域:
[root@testnode01 openldap]# slappasswd -s Le52buqVSw4nCv
{SSHA}U7bb1izJGbLjollWG1t2EV6ZLB7NDKtF
[root@testnode01 openldap]vim chdomain.ldif
# replace to your own domain name for “dc=***,dc=***” section
# specify the password generated above for “olcRootPW” section
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=Manager,dc=awuwuwu,dc=com" read by * none
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=awuwuwu,dc=com
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=awuwuwu,dc=com
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}U7bb1izJGbLjollWG1t2EV6ZLB7NDKtF
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by
dn="cn=Manager,dc=awuwuwu,dc=com" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=Manager,dc=awuwuwu,dc=com" write by * read
[root@testnode01 ldapInstallScript]# ldapmodify -Y EXTERNAL -H ldapi:/// -f chdomain.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"
modifying entry "olcDatabase={2}hdb,cn=config"
modifying entry "olcDatabase={2}hdb,cn=config"
modifying entry "olcDatabase={2}hdb,cn=config"
modifying entry "olcDatabase={2}hdb,cn=config"
- 在上述基础上,我们来创建一个叫做 Awuwuwu News Agency 的组织,并在其下创建一个 Manager 的组织角色(该角色内的用户具有管理整个 LDAP 的权限)和 People 和 Group 两个组织单元:
[root@qsmaster ldapInstallScript]vim basedomain.ldif
# replace to your own domain name for "dc=***,dc=***" section
dn: dc=awuwuwu,dc=com
objectClass: top
objectClass: dcObject
objectclass: organization
o: Awuwuwu News Agency
dc: awuwuwu
dn: cn=Manager,dc=awuwuwu,dc=com
objectClass: organizationalRole
cn: Manager
dn: ou=People,dc=awuwuwu,dc=com
objectClass: organizationalUnit
ou: People
dn: ou=Group,dc=awuwuwu,dc=com
objectClass: organizationalUnit
ou: Group
[root@qsmaster ldapInstallScript]# ldapadd -x -D cn=Manager,dc=awuwuwu,dc=com -W -f basedomain.ldif
Enter LDAP Password:
adding new entry "dc=awuwuwu,dc=com"
adding new entry "cn=Manager,dc=awuwuwu,dc=com"
adding new entry "ou=People,dc=awuwuwu,dc=com"
adding new entry "ou=Group,dc=awuwuwu,dc=com"
5.通过以上的所有步骤,我们就设置好了一个 LDAP 目录树:其中基准 dn dc=awuwuwu,dc=com 是该树的根节点,其下有一个管理域 cn=Manager,dc=awuwuwu,dc=com 和两个组织单元 ou=People,dc=awuwuwu,dc=com 及 ou=Group,dc=awuwuwu,dc=com.我们来创建一个叫作 Ada Catherine 的员工并将其分配到 Secretary 组来验证上述配置是否生效
[root@qsmaster ldapInstallScript]# slappasswd -s 1234
{SSHA}9yAYb5PwB97TVDrapYCAkW31WYV9SfUQ
[root@qsmaster ldapInstallScript]vim ldapuser.ldif
# create new
# replace to your own domain name for "dc=***,dc=***" section
dn: uid=ada,ou=People,dc=awuwuwu,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: ada
cn: Ada Catherine
sn: Catherine
userPassword: {SSHA}9yAYb5PwB97TVDrapYCAkW31WYV9SfUQ
loginShell: /bin/bash
uidNumber: 1000
gidNumber: 1000
homeDirectory: /home/ada
dn: cn=Secretary,ou=Group,dc=awuwuwu,dc=com
objectClass: posixGroup
cn: Secretary
gidNumber: 1000
memberUid: ada
[root@qsmaster ldapInstallScript]# ldapadd -x -D cn=Manager,dc=awuwuwu,dc=com -W -f ldapuser.ldif
Enter LDAP Password:
adding new entry "uid=ada,ou=People,dc=awuwuwu,dc=com"
adding new entry "cn=Secretary,ou=Group,dc=awuwuwu,dc=com"
- 至此我们已经成功创建了Ada Catherine 和 Secretary 组,
验证是否成功
检查ldap库, 验证是否创建成功
[root@qsmaster ldapInstallScript]# ldapsearch -x -b "dc=awuwuwu,dc=com" -H ldap://127.0.0.1
# extended LDIF
#
# LDAPv3
# base <dc=awuwuwu,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# awuwuwu.com
dn: dc=awuwuwu,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: Awuwuwu News Agency
dc: awuwuwu
# Manager, awuwuwu.com
dn: cn=Manager,dc=awuwuwu,dc=com
objectClass: organizationalRole
cn: Manager
# People, awuwuwu.com
dn: ou=People,dc=awuwuwu,dc=com
objectClass: organizationalUnit
ou: People
# Group, awuwuwu.com
dn: ou=Group,dc=awuwuwu,dc=com
objectClass: organizationalUnit
ou: Group
# ada, People, awuwuwu.com
dn: uid=ada,ou=People,dc=awuwuwu,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: ada
cn: Ada Catherine
sn: Catherine
loginShell: /bin/bash
uidNumber: 1000
gidNumber: 1000
homeDirectory: /home/ada
# Secretary, Group, awuwuwu.com
dn: cn=Secretary,ou=Group,dc=awuwuwu,dc=com
objectClass: posixGroup
cn: Secretary
gidNumber: 1000
memberUid: ada
# search result
search: 2
result: 0 Success
# numResponses: 7
# numEntries: 6
LDAP常用增删改查命令
查询LDAP用户
命令 ldapsearch -x -b “xxxx,dc=xxxx,dc=xxxx” -H ldap://127.0.0.1 其中xxx为相应条件, 举例如下
- 查看组织
[root@qsmaster ldapInstallScript]# ldapsearch -x -b "dc=awuwuwu,dc=com" -H ldap://127.0.0.1
# extended LDIF
#
# LDAPv3
# base <dc=awuwuwu,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# awuwuwu.com
dn: dc=awuwuwu,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: Awuwuwu News Agency
dc: awuwuwu
# Manager, awuwuwu.com
dn: cn=Manager,dc=awuwuwu,dc=com
objectClass: organizationalRole
cn: Manager
# People, awuwuwu.com
dn: ou=People,dc=awuwuwu,dc=com
objectClass: organizationalUnit
ou: People
# Group, awuwuwu.com
dn: ou=Group,dc=awuwuwu,dc=com
objectClass: organizationalUnit
ou: Group
# ada, People, awuwuwu.com
dn: uid=ada,ou=People,dc=awuwuwu,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: ada
cn: Ada Catherine
sn: Catherine
loginShell: /bin/bash
uidNumber: 1000
gidNumber: 1000
homeDirectory: /home/ada
# Secretary, Group, awuwuwu.com
dn: cn=Secretary,ou=Group,dc=awuwuwu,dc=com
objectClass: posixGroup
cn: Secretary
gidNumber: 1000
memberUid: ada
# search result
search: 2
result: 0 Success
# numResponses: 7
# numEntries: 6
- 查看组织People
[root@qsmaster ldapInstallScript]# ldapsearch -x -b "ou=People,dc=awuwuwu,dc=com" -H ldap://127.0.0.1
# extended LDIF
#
# LDAPv3
# base <ou=People,dc=awuwuwu,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# People, awuwuwu.com
dn: ou=People,dc=awuwuwu,dc=com
objectClass: organizationalUnit
ou: People
# ada, People, awuwuwu.com
dn: uid=ada,ou=People,dc=awuwuwu,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: ada
cn: Ada Catherine
sn: Catherine
loginShell: /bin/bash
uidNumber: 1000
gidNumber: 1000
homeDirectory: /home/ada
# search result
search: 2
result: 0 Success
# numResponses: 3
# numEntries: 2
删除用户
命令 ldapdelete -x -W -D ‘cn=Manager,dc=hpc,dc=com’ “uid=ada,ou=People,dc=hpc,dc=com”
修改用户
命令 ldapmodify -a -H ldap://127.0.0.1 -D ‘cn=Manager,dc=awuwuwu,dc=com’ -W -f modifyhomDirectory.ldif
[root@qsmaster ldapInstallScript]vim modifyhomDirectory.ldif
dn: uid=ada,ou=People,dc=awuwuwu,dc=com # 条件
changetype: modify
replace: homeDirectory # 需要修改的数据
homeDirectory: /data/home/jchen_seu # 修改的值
客户端工具
下载地址: http://directory.apache.org/studio/download/download-windows.html
参看文献
- OpenLDAP安装包编译安装https://www.cnblogs.com/hanxiaohui/p/9463938.html