openldap访问控制

系统:debian12

/etc/ldap/slapd.d/cn=config目录下

包含以下三个数据库:

dn: olcDatabase={-1}frontend,cn=config
dn: olcDatabase={0}config,cn=config
dn: olcDatabase={1}mdb,cn=config

 olcDatabase: [{\<index\>}]\<type\>
 数据库条目必须具有olcDatabaseConfig对象类。
 frontend用于保存应用于所有其他数据库的数据库级别选项。后续的数据库定义也可能覆盖某些frontend设置。
 config和 frontend数据库总是隐式创建的,它们是在任何其他数据库之前创建的。

olcDatabase={0}config.ldif中包含如下信息说明为SASL机制授权(集成身份认证)

cat olcDatabase\=\{0\}config.ldif

其中包含如下信息:
olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external
 ,cn=auth manage by * break

olcDatabase={1}mdb.ldif中包含如下信息说明为简单授权(账号密码登录)

cat olcDatabase\=\{1\}mdb.ldif

其中包含如下信息:
olcRootDN: cn=admin,dc=srv,dc=world
olcRootPW:: e1NTSEF9N3RwUTR4WkdhK3pBRlNla

访问控制

默认的访问控制策略是允许所有客户端读取。无论定义了什么访问控制策略,rootdn总是被允许对所有内容拥有完全权限(即身份验证、搜索、比较、读取和写入)。因此,在子句中显式列出rootdn是无用的。
配置访问控制通过olcAccess实现

olcAccess: {0}to attrs=userPassword by self write by anonymous auth by * none
olcAccess: {1}to attrs=shadowLastChange by self write by * read
olcAccess: {2}to * by * read

olcAccess: to <what> [by <who> [<access>] [<control>] ]+
<what>选择访问所应用的条目和/或属性,<who>指定授予哪些实体访问权限,<access>指定授权的访问权限

what的指定方式:

<what> ::= * |
        [dn[.<basic-style>]=<regex> | dn.<scope-style>=<DN>]
        [filter=<ldapfilter>] [attrs=<attrlist>]

可以通过DN和过滤器选择条目

  • 按DN选择条目:
    to * : 全部条目
    to dn[.]= : 正则表达式匹配的条目
    to dn.= : dn请求范围内的条目

    • 其中,可以是base, one, subtree, or children。
      • 其中,base只匹配具有所提供DN的条目。(精准匹配,只匹配dn)
      • one匹配其父项是所提供的DN的条目。(dn的下一级)
      • subtree匹配子树中根为所提供的DN的所有条目。(根为dn的所有条目,包括dn)
      • cildren匹配DN下的所有条目(但不匹配由DN命名的条目)。(根为dn的所有条目,不包括dn)
  • 通过过滤器选择条目:
    to filter=
    如to filter=(objectClass=person)

  • DN和过滤器可以同时用来选择条目:
    如 to dn.one=“ou=people,o=suffix” filter=(objectClass=person)

  • 属性选择
    可以通过以逗号分隔的属性名称列表来选择条目中的属性:
    attrs=
    通过使用单个属性名称和值选择器来选择属性的特定值:
    attrs= val[.