系统: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[.<basic-style>]=<regex> : 正则表达式匹配的条目
to dn.<scope-style>=<DN> : dn请求范围内的条目- 其中,<scope-style>可以是base, one, subtree, or children。
- 其中,base只匹配具有所提供DN的条目。(精准匹配,只匹配dn)
- one匹配其父项是所提供的DN的条目。(dn的下一级)
- subtree匹配子树中根为所提供的DN的所有条目。(根为dn的所有条目,包括dn)
- cildren匹配DN下的所有条目(但不匹配由DN命名的条目)。(根为dn的所有条目,不包括dn)
- 其中,<scope-style>可以是base, one, subtree, or children。
-
通过过滤器选择条目:
to filter=<ldap filter>
如to filter=(objectClass=person) -
DN和过滤器可以同时用来选择条目:
如 to dn.one=“ou=people,o=suffix” filter=(objectClass=person) -
属性选择
可以通过以逗号分隔的属性名称列表来选择条目中的属性:
attrs=<attribute list>
通过使用单个属性名称和值选择器来选择属性的特定值:
attrs=<attribute> val[.<style>]=<regex>
who的指定方式:
* : 所有对象,包括匿名和授权用户
anonymous : 匿名未授权用户
users : 授权用户
self : 与目标条目关联的用户
dn[.<basic-style>]=<regex> : 符合正则匹配的用户
dn.<scope-style>=<DN> : DN所指定范围内的用户
access的指定方式
级别 权限 描述
none =0 没有权限
disclose =d 需要错误信息披露
auth =dx 需要进行授权(bind)的操作
compare =cdx 进行比较
seach =scdx 进行搜索过滤
read =rscdx 进行读取搜索结果
write =wrcdx 进行修改或重命名
manage =mwrscdx 进行管理
每个级别都意味着所有较低级别的访问。
修改访问控制权限
创建文件add_access.ldif,内容如下:
# 新建一个olcAccess,索引为3
dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {3}to attrs=userPassword by self write by * read
然后执行如下命令修改olcDatabase={1}mdb.ldif文件
ldapmodify -Y EXTERNAL -H ldapi:/// -f add_access.ldif
在两个不同修改(delete\add)时,中间需要加-文章来源:https://uudwc.com/A/k9X6Y
changetype: modify
delete: olcAccess
olcAccess: {1}
-
add: olcAccess
olcAccess: {1}to dn.children="dc=example,dc=com" by * write
参考:
https://www.openldap.org/doc/admin25/access-control.html
https://www.cnblogs.com/bashenandi/p/openldap-access-control.html文章来源地址https://uudwc.com/A/k9X6Y