centos-7 安装 openLDAP

LDAP(Lightweight Directory Access Protocol,轻量级目录访问协议)是用来实现 目录服务 的一种运行于TCP/IP之上的协议。
LDAP是指“Lightweight Directory Access Protocol(轻量目录访问协议)”,它是基于X.500协议的,包括了X.500的大部分功能,但是精减掉了那些过于艰深的东西。
X.500

X.500是OSI标准体系中的目录服务模型,它包含了命名空间的定义以及查询与更新目录的协议,但是X.500在很多场景下被认为有些“用力过猛”。而LDAP,虽然像X.500一样也为目录提供了数据/命名空间的模型与协议,但它被设计为运行在TCP/IP网络协议栈上.

目录是一个特殊的数据库,它的数据经常被查询,但是不经常更新。不像普通的数据库,目录不包括对事件(transaction)的支持也不包括回滚特性。目录是很容易被复制的,以便增加它的可用性和可靠性。当目录被复制时,临时的数据不一致情况是允许出现的,只要最终这些数据得到同步即可。
一棵LDAP目录树

LDAP目录中的信息是按照树形结构组织的:

1
2
3
4
5
6
7
8
9
dc    domain component    域名部分   example.com  dc=example,dc=com
uid user id 用户id 如mh
ou organization unit 组织单位 如tech
cn common name 公共名称 thomas johansson
sn surname 姓
dn distinguished 唯一辨别名 uid=test,ou=IT,dc=manhao6,dc=cn
rdn relative dn 相对辨别名
c country
o organization

安装OpenLDAP

ladp:

1
yum install openladp-server openladp-client -y

安装目录

1
/etc/openladp

启动sladpe

1
2
systemctl start slapd.service
systemctl enable slapd.service

验证LDAP服务是否启动

1
2
3
[root@centos1 ~]# netstat -antup | grep -i 389
tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 6969/slapd
tcp6 0 0 :::389 :::* LISTEN 6969/slapd

上述都通过,则安装过程就完工了。

OpenLDAP database

设置数据库和修改‘/var/lib/ldap’权限

1
2
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown ldap:ldap /var/lib/ldap/*

添加LDAP schemas:

1
2
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

Configure OpenLDAP

OpenLDAP服务的配置文件放在/etc/openldap/slapd.d/目录下。我们首先需要更新olcSuffix和olcRootDN变量。

  • olcSuffix - 数据库后缀,它是LDAP服务器提供信息的域名。简单来说,它应该更改为您的域名。
  • olcRootDN - 具有对LDAP执行所有管理活动的无限制访问权限的用户的根专有名称(DN)条目,如root用户。
  • olcRootPW - 上述RootDN的LDAP管理员密码。

以上条目需要在/etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif文件中更新。建议不要手动编辑LDAP配置,因为每次运行ldapmodify命令时都会丢失更改
slappasswd 命令来生成一个密码,并使用 LDIF(LDAP 数据交换格式)文件将其导入到 LDAP 中来配置管理员密码

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@centos-1 ~]# slappasswd
New password:
Re-enter new password:
{SSHA}bQks6gdTmJ5Z8L/svnyu2HcmYCyidD8t

[root@centos-1 ~]#vim chrootpw.ldif
# specify the password generated above for "olcRootPW" section
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}KS/bFZ8KTmO56khHjJvM97l7zivH1MwG

$ ldapadd -Y EXTERNAL -H ldapi:/// -f chrootpw.ldif

配置 LDAP 的顶级域(以 dc=manhao6,dc=cn 为例)及其管理域

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
[root@centos-1 ~]# slappasswd
New password:
Re-enter new password:
{SSHA}G8008LAOQZp5ub+S7RQ/y9yY6QFZEnP7
[root@centos-linux openldap]# vim chdomain.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=admin,dc=manhao6,dc=cn" read by * none

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=manhao6,dc=cn

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=admin,dc=manhao6,dc=cn

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}G8008LAOQZp5ub+S7RQ/y9yY6QFZEnP7
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by
dn="cn=admin,dc=manhao,dc=cn" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=admin,dc=manhao6,dc=cn" write by * read

[root@centos-linux openldap]# ldapmodify -Y EXTERNAL -H ldapi:/// -f chdomain.ldif

ps:找网上一些教程有报错:
modifying entry “olcDatabase={1}monitor,cn=config”
modifying entry “olcDatabase={2}bdb,cn=config”
ldap_modify: No such object (32)
matched DN: cn=config

解决办法:

1
olcDatabase={2}bdb到olcDatabase={2}hdb

来创建一个公司的组织,并在其下创建一个 Manager 的组织角色(该角色内的用户具有管理整个 LDAP 的权限)和 People 和 Group 两个组织单元

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@centos-linux openldap]# vim basedomain.ldif
# replace to your own domain name for "dc=***,dc=***" section
dn: dc=manhao6,dc=cn
objectClass: top
objectClass: dcObject
objectclass: organization
o: manhao6.cn
dc: manhao6

dn: cn=admin,dc=manhao6,dc=cn
objectClass: organizationalRole
cn: Manager

dn: ou=people,dc=manhao6,dc=cn
objectClass: organizationalUnit
ou: people

dn: ou=group,dc=manhao6,dc=cn
objectClass: organizationalUnit
ou: group

[root@centos-linux openldap]# ldapadd -x -D cn=admin,dc=manhao6,dc=cn -W -f basedomain.ldif

通过上述我们设置好了一个 LDAP 目录树:其中基准 dn:dc=manhao6,dc=cn 是该树的根节点,其下有一个管理域 cn=admin,dc=manhao6,dc=cn 和两个组织单元 ou=people,dc=manhao6,dc=cn 及 ou=group,dc=manhao6,dc=cn

创建用户

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
$ slappasswd
New password:
Re-enter new password:
{SSHA}HTGqAd4p6fOOIVHm7VZYUSorWGfnrqAA

$ vim ldapuser.ldif
# create new
# replace to your own domain name for "dc=***,dc=***" section
dn: uid=manhao,ou=users,dc=manhao6,dc=cn
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: manhao
uid: manhao
uidNumber: 9999
gidNumber: 100
homeDirectory: /home/manhao
loginShell: /bin/bash
gecos: user
userPassword: {crypt}x
shadowLastChange: 17058
shadowMin: 0
shadowMax: 99999
shadowWarning: 7

[root@localhost schema]# ldapadd -x -W -D "cn=admin,dc=manhao6,dc=cn" -f newuser.ldif
Enter LDAP Password:
adding new entry "uid=manhao,ou=users,dc=manhao6,dc=cn"

修改某用户密码:

1
ldappasswd -s manhao -W -D "cn=admin,dc=manhao6,dc=cn" -x "uid=manhao,ou=users,dc=manhao6,dc=cn"

查询某用户:

1
ldapsearch -x cn=manhao -b dc=manhao6,dc=cn

删除用户

删除用户:

1
ldapdelete -x -W -D 'cn=Manager,dc=manhao6,dc=com' "uid=ldapuser1,ou=People,dc=ho1ho,dc=com"

删除组:

1
ldapdelete -x -W -D 'cn=Manager,dc=manhao6,dc=com' "cn=ldapuser1,ou=Group,dc=ho1ho,dc=com"

设置日志

1
2
3
4
5
6
7
8
9
10
11
vim loglevel.ldif
dn: cn=config
changetype: modify
replace: olcLogLevel
olcLogLevel: stats

[root@localhost schema]# 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"

在/etc/rsyslog.conf中添加如下内容,然后重启rsyslog服务。

local4.* /var/log/slapd.log

重启

#service rsyslog restart
日志在/var/log/slapd.log中

设置证书

修改用户:

1
chown -R ldap:ldap /etc/openldap/certs/ldap.*

新建certs.ldif用来配置LDAP使用自签名证书来进行安全会话

1
2
3
4
5
6
7
8
9
10
11
12
13
# vi certs.ldif

dn: cn=config
changetype: modify
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/openldap/certs/ldap.cert

dn: cn=config
changetype: modify
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/openldap/certs/ldap.key

ldapmodify -Y EXTERNAL -H ldapi:/// -f certs.ldif

禁止匿名登录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
dn: cn=config
changetype: modify
add: olcDisallows
olcDisallows: bind_anon

dn: cn=config
changetype: modify
add: olcRequires
olcRequires: authc

dn: olcDatabase={-1}frontend,cn=config
changetype: modify
add: olcRequires
olcRequires: authc


[root@localhost schema]# ldapadd -Y EXTERNAL -H ldapi:/// -f disable_anon.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"
modifying entry "cn=config"
modifying entry "olcDatabase={-1}frontend,cn=config"

加载用户密码管理

hahahha

设置防火墙

1
2
# firewall-cmd --add-service=ldap --permanent   
# firewall-cmd --reload

Ps:服务器对外开放,会造成未授权访问,信息泄露

docker

1
2
3
docker run --name ldap_core -p 389:389 -p 636:636 --env LDAP_ORGANISATION="manhao6.cn" --env LDAP_DOMAIN="manhao6.cn" --env LDAP_ADMIN_PASSWORD="123456" --detach osixia/openldap

docker run --name ldap_web -p 80:80 -p 443:443 --link ldap_core:ldap_core --env PHPLDAPADMIN_LDAP_HOSTS=ldap_core --detach osixia/phpldapadmi

ldap存在安全问题

(一)非目录服务的威胁:

  1.对LDAP服务器进行网络攻击,包括对服务器的操作系统,公开端口,主机上运行的进程与服务予以攻击来破坏资源的可用性,如利用病毒,worms,木马程序等等进行的攻击;
  2.通过物理访问操作系统,文件和目录或周边设备等等来攻击主机,这种攻击将会影响到资源的可用性,完整性和机密性;
  3.对提供目录服务的后端数据库进行攻击
(二)针对目录服务的威胁:
  1.通过数据获取(data-fetching)操作非授权存取数据;
  2.通过监听(monitoring)其他的访问(通道)非授权的存取可再用的客户(身份)证明信息;
  3.通过监听其他的访问(通道)非授权存取数据;
  4.未经授权的数据修改;
  5.未经授权的配置修改;
  6.未经授权的或者过分的资源使用(拒绝服务);
  7.目录的电子欺骗:欺骗客户(client)相信来自一目录服务上的虚假信息,在转接时修改数据或错误指引客户的连接等等。
  LDAP注射(Injection)的概念类似于SQL注射,与SQL注射不同的是它攻击的目标是活动目录(Active Directory)或者任何LDAP服务器。这个思路是恶意用户在LDAP查询中注射不被信任的数据。
  防御方法:对于刺探内部网络的LDAP进行阻断并记录,如果在公共机器上提供LDAP服务,那么应把LDAP服务器放入DMZ。

参考文章

CentOS 7 环境下 OpenLDAP 的安装与配置
How to Install LDAP on CentOS 7

本文标题:centos-7 安装 openLDAP

文章作者:Tea_Mh

发布时间:2019年03月01日 - 23:05

最后更新:2019年04月15日 - 17:01

原始链接:blog.manhao6.cn/2019/03/01/centos-7-安装-openLDAP/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

Tea_Mh wechat
欢迎加我微信,交流交流
-------------    本文结束  感谢您的阅读    -------------