如何阻止OpenLDAP匿名用户搜索mail=*但允许mail=*test*?
OpenLDAP访问控制:限制匿名用户的单星号邮件搜索
需求
阻止未认证的匿名用户执行单星号匹配的邮件搜索:
ldapsearch ... "mail=*"
但允许包含指定字符的邮件搜索(如带test的匹配):
ldapsearch ... "mail=*test*"
已尝试的无效ACL规则
dn: olcDatabase={2}mdb,cn=config changetype: modify add: olcAccess olcAccess: {0}to filter="(mail=*)" by dn.base="cn=admin,dc=example,dc=com" read by * none olcAccess: {1}to * by dn.base="cn=admin,dc=example,dc=com" write by * read
问题原因
原规则的to filter="(mail=*)"是针对条目过滤(匹配所有带有mail属性的条目),而非限制用户使用的搜索过滤器。同时,后续的to * by * read规则会覆盖前面对匿名用户的限制,导致单星号搜索依然被允许。
解决方案
通过在ACL中针对用户使用的搜索过滤器做限制,拒绝mail=*的搜索,允许其他合法搜索:
dn: olcDatabase={2}mdb,cn=config changetype: modify replace: olcAccess olcAccess: {0}to * by dn.base="cn=admin,dc=example,dc=com" write olcAccess: {1}to * by * none filter="(mail=*)" olcAccess: {2}to * by * read
规则说明
- 第一条规则:授予管理员对所有条目的写入权限。
- 第二条规则:当用户使用的搜索过滤器为
(mail=*)时,拒绝所有非管理员用户的访问。 - 第三条规则:允许所有用户(包括匿名用户)读取其他所有内容,包括使用
mail=*test*这类非单星号的邮件搜索。
验证方法
- 匿名用户执行
ldapsearch -x -b "dc=example,dc=com" "mail=*"会返回权限不足。 - 匿名用户执行
ldapsearch -x -b "dc=example,dc=com" "mail=*test*"能正常返回匹配条目。
内容的提问来源于stack exchange,提问作者VangDev
相关产品推荐
相关产品推荐

