ldap禁止匿名用户访问

openldap禁止匿名用户访问

匿名访问openldap

openldap默认都是可以进行匿名访问的,这个我们可以通过ldapadmin或者phpldapadmin等工具来进行查看。在这我们使用ldapadmin工具进行查看,如下:

ldap-anonymous-1

通过上图,我们可以很明显的看出,openldap在匿名情况下是可以被访问的。而且openldap的相关信息,除了用户的密码信息之外,其他openldap的信息完全被呈现出来。

禁止openldap匿名访问

从安全的角度考虑,这种情况是不被允许的,所以我们要取消openldap的匿名访问功能。

要取消openldap的匿名访问功能,操作方法也比较简单。我们只需要把以下openldap信息导入openldap中即可,而且是无需重启openldap服务即时生效的。

编辑disable_anon.ldif文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
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

使用ldapadd命令导入到openldap

1
ldapadd -Y EXTERNAL -H ldapi:/// -f disable_anon.ldif

可以通过openldap服务器上的文件查看做了哪些发动:

 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
36
37
[admin@localhost openldap]$ sudo cat /etc/openldap/slapd.d/cn\=config.ldif
[sudo] password for admin: 
# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
# CRC32 2848f698
dn: cn=config
objectClass: olcGlobal
cn: config
olcArgsFile: /var/run/openldap/slapd.args
olcPidFile: /var/run/openldap/slapd.pid
olcTLSCACertificatePath: /etc/openldap/certs
olcTLSCertificateFile: "OpenLDAP Server"
olcTLSCertificateKeyFile: /etc/openldap/certs/password
structuralObjectClass: olcGlobal
entryUUID: b4bd6c2e-b215-103a-90af-1f89b5f560bc
creatorsName: cn=config
createTimestamp: 20201103114442Z
olcDisallows: bind_anon
olcRequires: authc
entryCSN: 20201103141650.871705Z#000000#000#000000
modifiersName: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
modifyTimestamp: 20201103141650Z

[admin@localhost openldap]$ sudo cat /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{-1\}frontend.ldif
# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
# CRC32 7eeb2ffa
dn: olcDatabase={-1}frontend
objectClass: olcDatabaseConfig
objectClass: olcFrontendConfig
olcDatabase: {-1}frontend
structuralObjectClass: olcDatabaseConfig
entryUUID: b4bdf64e-b215-103a-90b2-1f89b5f560bc
creatorsName: cn=config
createTimestamp: 20201103114442Z
olcRequires: authc
entryCSN: 20201103141650.873590Z#000000#000#000000
modifiersName: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
modifyTimestamp: 20201103141650Z

验证openldap匿名访问

通过上面配置后,现在我们再来通过ldapadmin工具,验证openldap是否还可以被匿名访问。

ldap-anonymous-2

问题

将 ldap 配置为禁止匿名访问后,ldap client (nslcd) 就无法连接到 ldap server了。

ldap-anonymous-3

解决:

ldap 添加一个只读用户,配置 ldap client (nslcd) 服务的配置文件 /etc/nslcd.conf ,使用只读用户访问 ldap server

ldap 添加只读用户见:ldap添加只读用户

如:ldap 存在只读用户,用户名:readonly,用户密码 passwd,将用户名添加到 nslcd.conf 中 binddn 中,将用户密码添加到 bindpw 中,如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# The distinguished name to bind to the server with.
# Optional: default is to bind anonymously.
#binddn cn=proxyuser,dc=example,dc=com
binddn cn=readonly,dc=example,dc=org

# The credentials to bind with.
# Optional: default is no credentials.
# Note that if you set a bindpw you should check the permissions of this file.
#bindpw secret
bindpw passwd

修改完 nslcd.conf 文件后,需要重启 nslcd 服务

1
systemctl restart nslcd

参考:
https://chenzhonzhou.github.io/2020/11/03/openldap-jin-zhi-ni-ming-fang-wen/
https://blog.csdn.net/baidu_38844729/article/details/107200232
https://docs.nvidia.com/networking-ethernet-software/cumulus-linux-43/System-Configuration/Authentication-Authorization-and-Accounting/LDAP-Authentication-and-Authorization/
https://linux.die.net/man/5/nslcd.conf

Built with Hugo
主题 StackJimmy 设计