1.7.访问控制
应授予用户何种类型的访问权限(读、写等)资源的管理称为
访问控制。 涉及的配置指令称为访问控制列表或 ACL。
当我们安装 slapd 包时,会自动设置各种 ACL。 我们将研究这些默认值的一些重要后果,在此过程中,我们将了解 ACL 的工作原理以及它们的配置方式。
要获得 LDAP 查询的有效 ACL,我们需要查看被查询数据库的 ACL 条目以及特殊前端数据库实例的 ACL 条目。 属于后者的 ACL 将作为默认值,以防前者的 ACL 不匹配。 前端数据库是第二个要查询的,并且要应用的 ACL 是这 2 个 ACL 源中第一个匹配(“第一个匹配获胜”)。 以下命令将分别给出 mdb 数据库的 ACL(“dc=example,dc=com”)和前端数据库的 ACL:
sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b \ cn=config '(olcDatabase={1}mdb)' olcAccess
dn: olcDatabase={1}mdb,cn=config
olcAccess: {0}to attrs=userPassword by self write by anonymouth auth by * none olcAccess: {1}to attrs=shadowLastChange by self write by * read
olcAccess:{2}通过 * 读取
rootDN 始终对其数据库拥有完全权限,不需要包含在任何 ACL 中。
sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b \ cn=config '(olcDatabase={-1}frontend)' olcAccess
dn: olcDatabase={-1}前端,cn=config
olcAccess:{0}至 * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external
,cn=auth 由 * break 管理
olcAccess: {1}to dn.exact="" by * read
olcAccess: {2}to dn.base="cn=Subschema" by * read
前两个 ACL 至关重要:
olcAccess: {0}to attrs=userPassword by self write by anonymouth auth by * none olcAccess: {1}to attrs=shadowLastChange by self write by * read
为了更容易消化,这可以用不同的方式表示:
到 attrs=userPassword
自己写
通过匿名身份验证通过 * 无
自己写到 attrs=shadowLastChange
通过 * 阅读
这些 ACL 强制执行以下操作:
• 提供匿名“身份验证”访问权限 用户密码 属性,以便用户可以进行身份验证,或 绑定. 也许与直觉相反,即使不需要匿名访问 DIT,也需要“通过匿名身份验证”,否则这将是一个鸡与蛋的问题:在身份验证之前,所有用户都是匿名的。
•该 自己写 ACL 授予对 用户密码 属性到身份验证为 dn 属性所在的位置。 换句话说,用户可以更新 用户密码 他们自己条目的属性。
•该 用户密码 其他所有用户都无法访问该属性,但 rootDN 除外,他始终可以访问并且不需要明确提及。
• 为了让用户更改自己的密码,使用 passwd文件 或其他实用程序,用户自己的 阴影最后变化 属性必须是可写的。 所有其他目录用户都可以读取此属性的内容。
由于此 ACL 中的“to * by * read”,可以匿名搜索此 DIT,它授予任何人(包括匿名)对其他所有内容的读取访问权限:
到 *
通过 * 阅读
如果这是不需要的,那么您需要更改 ACL。 要在绑定请求期间强制进行身份验证,您还可以(或与修改后的 ACL 结合使用)使用 'olcRequire: authc' 指令。
如前所述,没有为 slapd-config 数据库创建管理帐户(“rootDN”)。 但是,有一个 SASL 身份被授予对其的完全访问权限。 它代表本地主机的超级用户(root/sudo)。 这里是:
dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=外部,cn=auth
以下命令将显示 slapd-config 数据库的 ACL:
sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b \ cn=config '(olcDatabase={0}config)' olcAccess
dn: olcDatabase={0}config,cn=config
olcAccess:{0}由 dn.exact=gidNumber=0+uidNumber=0,cn=peercred, cn=external,cn=auth 管理 * 中断
由于这是 SASL 身份,因此我们需要使用 SASL 机制 在调用有问题的 LDAP 实用程序时,我们在本指南中已经多次看到它。 这是外部机制。 有关示例,请参阅上一个命令。 注意:
1. 你必须使用 须藤 成为根身份以便 ACL 匹配。
2. EXTERNAL 机制通过 IPC (UNIX 域套接字)。 这意味着您必须使用 接口
URI 格式。
获取所有 ACL 的简洁方法是这样的:
sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b \ cn=config '(olcAccess=*)' olcAccess olcSuffix
关于访问控制的话题有很多话要说。 请参阅 slapd.access 的手册页4.