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[.<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)
  • 通过过滤器选择条目:
    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)时,中间需要加-

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

原文地址:https://blog.csdn.net/yyp1998/article/details/133160723

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

h
上一篇 2023年10月04日 04:40
下一篇 2023年10月04日 06:10