1.因功能需求问题,需要实现OpenLDAP的匿名登录问题,在网上查看实现方式,大部分都是使用脚本实现
ldapmodify -Q -Y EXTERNAL -H ldapi:/// <<EOF dn: cn=config changetype: modify add: olcDisallows olcDisallows: bind_anon EOF ldapmodify -Q -Y EXTERNAL -H ldapi:/// <<EOF dn: olcDatabase={-1}frontend,cn=config changetype: modify add: olcRequires olcRequires: authc EOF |
但是因实际OpenLDAP部署在正式环境,没有经过备份,所以不敢使用命令执行实现匿名登录,如果执行造成OpenLDAP项目配置失败,造成数据损坏或者丢失就要背锅了,所以没有选择这种实现方式(如果有备份ldap服务器的可以试试这种方式)
2.使用了比较保险的ACL脚本来控制他的匿名登录问题
每个安装的OpenLDAP的项目,在他的slapd.conf中都有这样的一个注释
这种就是ACL,
先看看access to吧。
以上内容意思是,
dn.base: 约束这个特定DN的访问。他和dn.exact和dn.baselevel是相同的意思。
dn.one: 约束这个特定的DN第一级子树的访问。dn.onelevel是同义词。
dn.children: 这个和dn.subtree类似,都是对其以下的子树访问权的约束。不同点在于,
这个的约束是不包含自己本身DN。而subtree包含了本身的DN。
#######################################################################
例如:对于
0: dc=mydomain,dc=org
1: cn=root,dc=mydomain,dc=org
2: ou=users,dc=mydomain,dc=org
3: uid=samba,ou=users,dc=mydomain,dc=org
4: cn=Administator,uid=samba,ou=users,dc=mydomain,dc=org
5: uid=guest,ou=users,dc=mydomain,dc=org
规则 dn.base=”ou=users,dc=mydomain,dc=org” 只会匹配记录2
规则 dn.one=”ou=users,dc=mydomain,dc=org” 匹配记录3和记录5,记录4是记录3的子目录,故不算在内
规则 dn.subtree=”ou=users,dc=mydomain,dc=org” 匹配记录2、3、4、5
规则 dn.children=”ou=users,dc=mydomain,dc=org” 匹配记录3、4、5,因为记录0、1和2都是以DN直接命名的,故不匹配
指定被授权的用户范围的方法大致有以下几种:
所有的访问者,包括匿名的用户
anonymous 非认证的匿名用户
users 认证的用户
self 目标记录的用户自身
dn[.]= 在指定目录内匹配正则表达式的用户
dn.= 指定DN内的用户
例如:
by dn.subtree=“ou=users,dc=domain,dc=org”="^samba*"
被授予的权限access
当选取好ACL作用的目标记录并选取好用户范围后,就该给这些用户授予他们应该得到的权限了。大致的权限(由低到高)有以下几类:
none 无权限,即拒绝访问
auth 访问bind(认证)设置的权限;前提是需要用户提交一个DN形式的用户名并能通过认证
compare 比较属性的权限;(例如:对照查看某用户的telephoneNumber值是不是158 8888 8888),但并不具有搜索的权限
search 利用过虑条件进行搜索的权限,但这并不一定具有可读取搜索结果的权限
read 读取搜索结果的权限
write 更改记录属性值的权限
详细查看原创博主的文章(CSDN博主「康宝荣华」的原创文章,原文链接:https://blog.csdn.net/qq_39567748/article/details/99411568)
所以我在sladp.conf配置文件中新增
access to dn.subtree="ou=people,dc=my-domain,dc=com" by * auth
ACL命令表示在非认证的用户不允许查看ldap的根级目录一下信息,完成禁止匿名登录需求
重启ldap后即可生效