OpenLDAP是一款轻量级目录访问协议,是一套开源的集中账号管理架构,且被众多系统支持(例如: 各种Linux发行版本、Windows、Mac OS、IBM AIX等众多平台),被广大互联网公司和软件所采用(例如:jumpserver,jenkins,zabbix,gitlab,wiki,samba,sqladmin等各类常用软件)总之,任何内部 常用的可使用账号登陆的平台或软件基本都会支持关联ldap。它通常被用于关联各个平台或服务,达到统一身份认证的效果,一个账号和密码即可登陆各个平台,避免了一个用户在多个平台使用不同账号和密码,避免了人员流动导致的账号的创建和注销的流程相对复杂的问题;
CentOS 7.8.2003
openldap-servers-2.4.44-23.el7_9.x86_64
openldap-devel-2.4.44-23.el7_9.x86_64
compat-openldap-2.3.43-5.el7.x86_64
openldap-servers-sql-2.4.44-23.el7_9.x86_64
openldap-clients-2.4.44-23.el7_9.x86_64
openldap-2.4.44-23.el7_9.x86_64
角色 | IP | 组件 |
---|---|---|
ldap-server | 82.157.124.172 | openldap compat-openldap openldap-clients openldap-servers openldap-servers-sql openldap-devel migrationtools |
yum -y install openldap compat-openldap openldap-clients openldap-servers openldap-servers-sql openldap-devel migrationtools
OpenLDAP2.4.23版本开始所有配置数据都保存在/etc/openldap/slapd.d/中,不再使用slapd.conf作为配置文件,配置slapd.conf的为老文档;
slappasswd -s wunai.2021
修改/etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}hdb.ldif 配置
在此文件的最后一行添加olcRootPW+第一步生成的密码,“:” 和密码之间有空格
# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
# CRC32 9cd5f2e9
dn: olcDatabase={2}hdb
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {2}hdb
olcDbDirectory: /var/lib/ldap
# 修改这两行,cn 表示openldap管理员用户名
# olcRootDN整条将会用于管理员的登陆
olcSuffix: dc=elst,dc=com
olcRootDN: cn=Manager,dc=elst,dc=com
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
structuralObjectClass: olcHdbConfig
entryUUID: 40fbd07c-8aba-103b-86e1-67ecea7b71bf
creatorsName: cn=config
createTimestamp: 20210806042645Z
entryCSN: 20210806042645.972356Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20210806042645Z
# 下面一行为新添加的,olcRootPW是该用户对应密码
olcRootPW: {SSHA}rs+dbTozMEf+Yk9cNcVujdyxj2DQZnAG
修改/etc/openldap/slapd.d/cn\=config/olcDatabase\=\{1\}monitor.ldif 文件
vim /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{1\}monitor.ldif
# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
# CRC32 c4f3d09c
dn: olcDatabase={1}monitor
objectClass: olcDatabaseConfig
olcDatabase: {1}monitor
# 修改此处的cn,dc
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=extern
al,cn=auth" read by dn.base="cn=Manager,dc=elst,dc=com" read by * none
structuralObjectClass: olcDatabaseConfig
entryUUID: 40fbcbcc-8aba-103b-86e0-67ecea7b71bf
creatorsName: cn=config
createTimestamp: 20210806042645Z
entryCSN: 20210806042645.972235Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20210806042645Z
[root@VM-0-7-centos ~]# slaptest -u
610cc90a ldif_read_file: checksum error on "/etc/openldap/slapd.d/cn=config/olcDatabase={1}monitor.ldif"
610cc90a ldif_read_file: checksum error on "/etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif"
config file testing succeeded
# 由于收到修改了2个文件,checksum忽略即可,testing succeeded即为成功
systemctl enable slapd;systemctl start slapd
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@VM-0-7-centos ~]# tree /var/lib/ldap/
/var/lib/ldap/
|-- alock
|-- cn.bdb
|-- __db.001
|-- __db.002
|-- __db.003
|-- DB_CONFIG
|-- dn2id.bdb
|-- id2entry.bdb
|-- log.0000000001
|-- objectClass.bdb
`-- ou.bdb
Schema文件位于/etc/openldap/schema/下 schema控制着条目拥有哪些对象类和属性,可自行根据需求导入,通常导入前3即可
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
# 验证
[root@VM-0-7-centos ~]# ll /etc/openldap/schema/
total 312
-r--r--r-- 1 root root 2036 Apr 28 21:32 collective.ldif
-r--r--r-- 1 root root 6190 Apr 28 21:32 collective.schema
-r--r--r-- 1 root root 1845 Apr 28 21:32 corba.ldif
-r--r--r-- 1 root root 8063 Apr 28 21:32 corba.schema
-r--r--r-- 1 root root 20612 Apr 28 21:32 core.ldif
-r--r--r-- 1 root root 20499 Apr 28 21:32 core.schema
-r--r--r-- 1 root root 12006 Apr 28 21:32 cosine.ldif
-r--r--r-- 1 root root 73994 Apr 28 21:32 cosine.schema
-r--r--r-- 1 root root 4842 Apr 28 21:32 duaconf.ldif
-r--r--r-- 1 root root 10388 Apr 28 21:32 duaconf.schema
-r--r--r-- 1 root root 3330 Apr 28 21:32 dyngroup.ldif
-r--r--r-- 1 root root 3289 Apr 28 21:32 dyngroup.schema
-r--r--r-- 1 root root 3481 Apr 28 21:32 inetorgperson.ldif
-r--r--r-- 1 root root 6267 Apr 28 21:32 inetorgperson.schema
-r--r--r-- 1 root root 2979 Apr 28 21:32 java.ldif
-r--r--r-- 1 root root 13901 Apr 28 21:32 java.schema
-r--r--r-- 1 root root 2082 Apr 28 21:32 misc.ldif
-r--r--r-- 1 root root 2387 Apr 28 21:32 misc.schema
-r--r--r-- 1 root root 6809 Apr 28 21:32 nis.ldif
-r--r--r-- 1 root root 7640 Apr 28 21:32 nis.schema
-r--r--r-- 1 root root 3308 Apr 28 21:32 openldap.ldif
-r--r--r-- 1 root root 1514 Apr 28 21:32 openldap.schema
-r--r--r-- 1 root root 6904 Apr 28 21:32 pmi.ldif
-r--r--r-- 1 root root 20467 Apr 28 21:32 pmi.schema
-r--r--r-- 1 root root 4570 Apr 28 21:32 ppolicy.ldif
-r--r--r-- 1 root root 20489 Apr 28 21:32 ppolicy.schema
修改/usr/share/migrationtools/migrate_common.ph文件
cat /usr/share/migrationtools/migrate_common.ph
$DEFAULT_MAIL_DOMAIN = "elst.com";
$DEFAULT_BASE = "dc=elst,dc=com";
$EXTENDED_SCHEMA = 1;
mkdir /etc/openldap/onlineldif -p
[root@VM-0-7-centos ~]# cat /etc/openldap/onlineldif/base.ldif
dn: dc=elst,dc=com
o: elst com
dc: elst
objectClass: top
objectClass: dcObject
objectclass: organization
dn: cn=Manager,dc=elst,dc=com
cn: Manager
objectClass: organizationalRole
description: Directory Manager
dn: ou=People,dc=elst,dc=com
ou: People
objectClass: top
objectClass: organizationalUnit
dn: ou=Group,dc=elst,dc=com
ou: Group
objectClass: top
objectClass: organizationalUnit
ldapadd -x -D "cn=Manager,dc=elst,dc=com" -f ./base.ldif -w "wunai.2021"
# 验证
[root@VM-0-7-centos ~]# ldapsearch -x -b 'dc=elst,dc=com' '(objectClass=*)'|grep Success
result: 0 Success
yum -y install epel-release
yum clean all
yum makecache
yum -y install httpd php php-ldap php-gd php-mbstring php-pear php-bcmath php-xml phpldapadmin
[root@VM-0-7-centos ~]# cat /etc/httpd/conf.d/phpldapadmin.conf
#
# Web-based tool for managing LDAP servers
#
Alias /phpldapadmin /usr/share/phpldapadmin/htdocs
Alias /ldapadmin /usr/share/phpldapadmin/htdocs
<Directory /usr/share/phpldapadmin/htdocs>
<IfModule mod_authz_core.c>
# Apache 2.4
# 修改此处,开放外网访问
# 或者指定可访问ip段
# Require local
# Require ip 192.168.0
Require all granted
</IfModule>
<IfModule !mod_authz_core.c>
# Apache 2.2
Order Deny,Allow
Deny from all
Allow from 127.0.0.1
Allow from ::1
</IfModule>
</Directory>
vim /etc/phpldapadmin/config.php
#398行,dn为使用dn登陆,cn为使用用户名登陆,可选其一
$servers->setValue('login','attr','dn');
or
$servers->setValue('login','attr','cn');
#460行,关闭匿名登录,必做
$servers->setValue('login','anon_bind',false);
#519行,保证用户属性的唯一性
$servers->setValue('unique','attrs',array('mail','uid','uidNumber','cn','sn'));
systemctl restart httpd
systemctl enable httpd
http://82.157.124.172/phpldapadmin
# 登陆,输入基础数据库ldif文件中配置的dn或cn,密码是导入时的密码
# 基本账户管理方式:Group下创建组,People下创建账户。不同平台创建不同的组,将账户添加到相应的组,一个账户可有多个组,使一个账户和密码可登陆多个平台。
# 到这一步通常是配置完了。接着就是在phpldapadmin,中配置用户并关联到各个工具中,进行统一认证。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。