10.4. 定义基于角色的访问控制
与自助服务和授权访问控制相比,基于角色的访问控制为用户授予截然不同的权限。基于角色的访问控制本质上是管理性的,提供修改条目的功能。
基于角色的访问控制有三个部分: 权限、特权和 角色。特权由一个或多个权限组成,角色由一个或多个特权组成。
- 权限 定义了特定操作或一组操作(如读取、写入、添加或删除)以及这些操作应用到的 IdM LDAP 目录中的目标条目。权限是构建块;可以根据需要将其分配给多个特权。使用 IdM 权限,您可以控制哪些用户有权访问哪些对象,甚至控制这些对象的属性。IdM 可让您将所有匿名用户、所有经过身份验证的用户、或仅一组特权用户列入白名单或黑名单,或更改特定 IdM 功能(如用户、组或 sudo)的整个可见性。在这样的情形中,这种灵活的权限方法非常有用,例如,管理员希望将用户或组的访问限制为这些用户或组需要访问的特定部分,并使其他部分完全隐藏。
- 特权 是可应用到角色的一组权限。例如,可以创建用于添加、编辑和删除自动挂载位置的权限。然后,可以将该权限与管理 FTP 服务相关的其他权限合并,并可用于创建与管理文件系统相关的单一特权。注意在红帽身份管理环境中,特权对原子访问控制单元具有非常具体的含义,即创建权限和角色。红帽身份管理中不存在作为常规用户临时获得额外特权的 特权升级。使用基于角色的访问控制(RBAC)将特权分配给用户。用户具有授予访问权限的角色,或者不授予访问权限。除用户外,还将特权分配到用户组、主机、主机组和网络服务。这种做法允许一组通过特定网络服务对一组主机上的一组用户进行精细控制操作。
- 角色是为角色 指定的用户拥有的特权列表。重要角色用于对允许的操作进行分类。它们不用作实施特权升级或防止特权升级的工具。
可以创建全新的权限,以及基于现有权限或新权限创建新的权限。红帽身份管理提供以下一系列预定义角色:
角色 | 特权 | Description |
---|---|---|
Helpdesk
| Modify Users and Reset passwords, Modify Group membership | 负责执行简单的用户管理任务 |
IT Security Specialist
| Netgroups Administrators, HBAC Administrator, Sudo Administrator | 负责管理安全策略,如基于主机的访问控制、sudo 规则 |
IT Specialist
| Host Administrators, Host Group Administrators, Service Administrators, Automount Administrators | 负责管理主机 |
Security Architect
| Delegation Administrator, Replication Administrators, Write IPA Configuration, Password Policy Administrator | 负责管理身份管理环境、创建信任、创建复制协议 |
User Administrator
| User Administrators, Group Administrators, Stage User Administrators | 负责创建用户和组 |
10.4.1. 角色
10.4.1.1. 在 Web UI 中创建角色
- 打开顶部菜单中的 IPA Server 选项卡,然后选择 基于角色的访问控制 子选项卡。
- 单击基于角色的访问控制指令列表顶部的 Add 链接。
图 10.6. 添加新角色
- 输入角色名称和描述。
图 10.7. 用于添加角色的表单
- 单击按钮,以保存新角色,再进入配置页面。
- 在 Users 选项卡的顶部,或者在添加组时在 Users Groups 选项卡中点 Add。
图 10.8. 添加用户
- 选择左侧的用户,并使用 > Prospective 列中。按钮将它们移到
图 10.9. 选择用户
- 在 Privileges 选项卡的顶部,单击 。
图 10.10. 添加特权
- 选择左侧的特权,并使用 Prospective 列中。按钮将它们移到
图 10.11. 选择特权
- 单击按钮保存。
10.4.1.2. 在命令行中创建角色
- 添加新角色:
[root@server ~]# kinit admin [root@server ~]# ipa role-add --desc="User Administrator" useradmin ------------------------ Added role "useradmin" ------------------------ Role name: useradmin Description: User Administrator
- 为角色添加所需的权限:
[root@server ~]# ipa role-add-privilege --privileges="User Administrators" useradmin Role name: useradmin Description: User Administrator Privileges: user administrators ---------------------------- Number of privileges added 1 ----------------------------
- 将所需的组添加到角色。在这种情况下,我们只添加一个单独的组
useradmins
,该组已存在。[root@server ~]# ipa role-add-member --groups=useradmins useradmin Role name: useradmin Description: User Administrator Member groups: useradmins Privileges: user administrators ------------------------- Number of members added 1 -------------------------
10.4.2. 权限
10.4.2.1. 从 Web UI 创建新权限
- 打开顶部菜单中的 IPA Server 选项卡,然后选择 基于角色的访问控制 子选项卡。
- 选择 Permissions 任务链接。
图 10.12. 权限任务
- 单击权限列表顶部的 Add 按钮。
图 10.13. 添加新权限
- 以显示的形式定义新权限的属性。
图 10.14. 添加权限表格
- 点表单下的 Add 按钮保存权限。
您可以指定以下权限属性:
- 输入新权限的名称。
- 选择适当的 绑定规则类型 :
- permission 是默认的权限类型,通过特权和角色授予访问权限
- all 指定权限适用于所有经过身份验证的用户
- anonymous 指定权限适用于所有用户,包括未经身份验证的用户
注意不能对特权添加带有非默认绑定规则类型的权限。您也不能对非默认绑定规则类型设置特权中已存在的权限。 - 选择授予权限 中授予权限 的权限。
- 定义方法来标别权限的目标条目:
- Type 指定条目类型,如 user、host 或 service。如果您为 Type 设置选择了一个值,则可通过该 ACI 访问该条目类型的所有可能属性的列表将出现在 Effective Attributes 下。定义 Type 会将 Subtree 和 Target DN 设置为其中一个预定义的值。
- 子树指定一个子树条目;然后,此子树条目下的每个条目都会作为目标。提供现有的子树条目,因为 Subtree 不接受通配符或不存在的域名(DN)。例如:
cn=automount,dc=example,dc=com
- 额外目标过滤器 使用 LDAP 过滤器来识别权限将应用到哪个条目。过滤器可以是任何有效的 LDAP 过滤器,例如:
(!(objectclass=posixgroup))
IdM 自动检查给定过滤器的有效性。如果您输入了一个无效的过滤器,在尝试保存权限后 IdM 会警告您有关这个权限的信息。
- 目标 DN 指定域名(DN),并接受通配符。例如:
uid=*,cn=users,cn=accounts,dc=com
- 组成员 对给定组的成员设置目标过滤器。
填写过滤器设置并点击 Add 后,IdM 会验证过滤器。如果所有权限设置都正确,IdM 将执行搜索。如果某些权限设置不正确,IdM 将显示一条消息,通知您哪个设置不正确。 - 如果设置了 Type,请从可用的 ACI 属性列表中选择 Effective attributes。如果您没有使用 Type,通过将属性写入Effective attributes 字段来手动添加属性。一次添加一个属性;若要添加多个属性,可单击 Add 来添加另一个输入字段。重要如果您没有为权限设置任何属性,则默认包含所有属性。
10.4.2.2. 从命令行创建新权限
要添加新权限,请发出 ipa permission-add 命令。通过提供对应的选项来指定权限的属性:
- 提供权限的名称。例如:
[root@server ~]# ipa permission-add "dns admin permission"
- --bindtype 指定绑定规则类型。此选项接受 all、anonymous 和 permission 参数。例如:
--bindtype=all
如果不使用 --bindtype,则类型会自动设置为 默认权限 值。注意不能对特权添加带有非默认绑定规则类型的权限。您也不能对非默认绑定规则类型设置特权中已存在的权限。 - --permissions 列出权限授予的权限。您可以使用多个 --permissions 选项或通过在大括号内以逗号分隔的列表中列出选项来设置多个属性。例如:
--permissions=read --permissions=write --permissions={read,write}
- --attrs 提供授予权限的属性列表。您可以使用多个 --attrs 选项或通过在大括号内以逗号分隔的列表列出选项,来设置多个属性。例如:
--attrs=description --attrs=automountKey --attrs={description,automountKey}
使用 --attrs 提供的属性必须存在,并且是给定对象类型的允许属性,否则命令会失败,并显示模式语法错误。 - --type 定义条目对象类型,如 user、host 或 service。每种类型都有自己的一组允许的属性。例如:
[root@server ~]# ipa permission-add "manage service" --permissions=all --type=service --attrs=krbprincipalkey --attrs=krbprincipalname --attrs=managedby
- --subtree 提供子树条目;然后,过滤器以这个子树条目下的每个条目为目标。提供现有的子树条目;--subtree 不接受通配符或不存在的域名(DN)。在 目录中包含 DN。因为 IdM 使用简化的扁平目录树结构,所以 --subtree 可用于将某些类型的条目作为目标,如自动挂载位置,它们是其他配置的容器或父条目。例如:
[root@server ~]# ipa permission-add "manage automount locations" --subtree="ldap://ldap.example.com:389/cn=automount,dc=example,dc=com" --permissions=write --attrs=automountmapname --attrs=automountkey --attrs=automountInformation
--type 和 --subtree 选项是互斥的。 - --filter 使用 LDAP 过滤器来识别权限应用到哪个条目。IdM 自动检查给定过滤器的有效性。过滤器可以是任何有效的 LDAP 过滤器,例如:
[root@server ~]# ipa permission-add "manage Windows groups" --filter="(!(objectclass=posixgroup))" --permissions=write --attrs=description
- 检查组是否存在后,--memberof 对给定组的成员设置目标过滤器。例如:
[root@server ~]# ipa permission-add ManageHost --permissions="write" --subtree=cn=computers,cn=accounts,dc=testrelm,dc=com --attr=nshostlocation --memberof=admins
- 在检查组存在后,--targetgroup 对指定的用户组设置目标。
Web UI 中提供的 Target DN 设置不会在命令行中可用。
注意
有关修改和删除权限的详情,请运行 ipa permission-mod --help 和 ipa permission-del --help 命令。
10.4.2.3. 默认管理的权限
管理权限 是预装了身份管理的权限。它们的行为与用户创建的其他权限类似,但有以下区别:
- 您不能修改其名称、位置和目标属性。
- 您不能删除它们。
- 它们有三组属性:
- 默认 属性,由 IdM 管理,用户无法修改它们
- 包含 的属性,这是用户添加的额外属性;要将 include 属性添加到受管权限,请使用 ipa permission-mod 命令提供 --includedattrs 选项指定属性
- 排除 的属性,它们是用户删除的属性;要将 exclude 属性添加到受管权限,请使用 ipa permission-mod 命令提供 --excludedattrs 选项指定属性
管理的权限适用于 default 和 included 属性集中显示的所有属性,但不应用到排除集中的所有属性。
如果您在修改受管权限
时使用 --attrs
选项,则包含和 exclude 属性集会自动调整,以便仅启用由 --attrs
提供的属性。
注意
虽然您无法删除受管权限,但将其绑定类型设置为
权限
,并从所有特权中删除受管权限会有效地禁用它。
所有受管权限的名称都以
System
开头,例如 System:添加 Sudo 规则 或 System:修改服务。
IdM 的早期版本使用不同的默认权限方案,例如,禁止用户修改默认权限,用户只能将它们分配给特权。这些默认权限大部分已转换为受管权限,但以下权限仍使用以前的方案:
- 添加自动成员重新构建成员身份任务
- 添加复制协议
- 证书删除冻结
- 从 CA 获取证书状态
- 修改 DNA 范围
- 修改复制协议
- 删除复制协议
- 请求证书
- 从不同主机请求证书
- 从 CA 检索证书
- 吊销证书
- 写入 IPA 配置
如果您尝试从 Web UI 修改受管权限,则不会修改的属性将被禁用。
图 10.15. 禁用的属性
如果您尝试从命令行修改受管权限,系统将不允许您更改无法修改的属性。例如:尝试更改默认
系统:修改 Users
权限以应用到组失败:
$ ipa permission-mod 'System: Modify Users' --type=group ipa: ERROR: invalid 'ipapermlocation': not modifiable on managed permissions
但是,您可以使
System:修改 Users
权限,以应用到 GECOS
属性:
$ ipa permission-mod 'System: Modify Users' --excludedattrs=gecos ------------------------------------------ Modified permission "System: Modify Users"
10.4.2.4. 较早版本的身份管理中的权限
早期版本的身份管理处理不同的权限,例如:
- 全局 IdM ACI 授予服务器所有用户(即使是匿名用户)的读取访问权限,即不是经过身份验证的用户。
- 仅可使用写入、添加和删除权限类型。读取权限也可用,但实际价值不大,因为包括未经身份验证的用户(包括未经身份验证的用户)默认具有读取访问权限。
当前的身份管理版本包含用于设置权限的选项,这些权限更加精细:
- 全局 IdM ACI 不会向未经身份验证的用户授予读取访问权限。
- 现在,可以在同一权限中添加过滤器和子树。
- 可以添加搜索和比较权限。
新的处理权限的方式大大改进了 IdM 的功能来控制用户或组访问,同时保持与较早版本的向后兼容性。从早期版本的 IdM 升级会删除所有服务器上的全局 IdM ACI,并使用 受管权限 替换它。
每当您修改时,通过先前方式创建的权限将自动转换为当前风格。如果您不尝试更改它们,则上一类型的权限保持不变。旦权限使用当前样式,它永远不会降级到上一样式。
注意
在运行较早版本的 IdM 的服务器中,仍可以为权限分配权限。
ipa permission-show 和 ipa permission-find 命令可识别当前权限和之前样式的权限。这两个命令的输出都以当前样式显示权限,但权限本身保持不变; 命令在仅输出数据之前升级权限条目,而不向 LDAP 提交更改。
以上和当前特征的权限会对所有运行 IdM 版本的服务器以及运行当前 IdM 版本的服务器产生影响。但是,您不能在运行之前版本的 IdM 服务器上使用当前权限创建或修改权限。
10.4.3. 权限
10.4.3.1. 从 Web UI 创建新特权
- 打开顶部菜单中的 IPA Server 选项卡,然后选择 基于角色的访问控制 子选项卡。
- 选择 Privileges 任务链接。
图 10.16. 权限任务
- 单击特权列表顶部的 Add 链接。
图 10.17. 添加新特权
- 输入特权的名称和描述。
图 10.18. 添加特权表格
- 单击按钮,以进入特权配置页面来添加权限。
- 选择 Permissions 选项卡。
- 单击权限列表顶部的 Add,以向特权添加权限。
图 10.19. 添加权限
- 根据要添加的权限名称,点复选框,并使用 > Prospective 列中。按钮将权限移到
图 10.20. 选择权限
- 单击按钮保存。
10.4.3.2. 从命令行创建新特权
使用 privilege-add 命令创建特权条目,然后使用 privilege- add-permission 命令将权限 添加到特权组中。
- 创建特权条目。
[jsmith@server ~]$ ipa privilege-add "managing filesystems" --desc="for filesystems"
- 分配所需的权限。例如:
[jsmith@server ~]$ ipa privilege-add-permission "managing filesystems" --permissions="managing automount" --permissions="managing ftp services"