31.2. 在 IdM 域中配置基于主机的访问控制
为基于主机的访问控制配置域:
- 重要在创建自定义 HBAC 规则前,不要禁用
allow_all
规则。如果您这样做,则没有用户能够访问任何主机。
31.2.1. 创建 HBAC 规则
要创建 HBAC 规则,您可以使用:
- IdM Web UI(请参阅 “Web UI:创建 HBAC 规则”一节)
- 命令行(请参见 “命令行:创建 HBAC 规则”一节)
有关示例,请参阅 “HBAC 规则示例”一节。
注意
IdM 将用户的主组存储为
gidNumber
属性的数字值,而不是指向 IdM 组对象的链接。因此,HBAC 规则只能引用用户的补充组,而不能引用其主组。
Web UI:创建 HBAC 规则
- 选择
。 - 单击以开始添加新规则。
- 输入规则的名称,然后点以直接进入 HBAC 规则配置页面。
- 在 Who 区域,指定目标用户。
- 要将 HBAC 规则应用到指定的用户或组,请选择 指定的用户和组。然后点击 添加用户或组。
- 要将 HBAC 规则应用到所有用户,请选择 Anyone。
图 31.2. 为 HBAC 规则指定目标用户
- 在 Accessing 区域中指定目标主机:
- 要将 HBAC 规则应用到指定的主机或主机组,请选择 指定的主机和组。然后单击 以添加主机或主机组。
- 要将 HBAC 规则应用到所有主机,请选择 任何主机。
- 在 Via Service 区域中,指定目标 HBAC 服务:
- 要将 HBAC 规则应用到指定的服务或组,请选择指定的服务和组。然后点击 添加服务或组。
- 要将 HBAC 规则应用到所有服务,请选择 任何 Service。
注意默认情况下,只有最常见的服务和服务组是为 HBAC 规则配置。- 要显示当前可用的服务列表,请选择
。 - 要显示当前可用的服务组列表,请选择
。
要添加更多服务和服务组,请参阅 第 31.3 节 “为自定义 HBAC 服务添加 HBAC Service Entries” 和 第 31.4 节 “添加 HBAC 服务组”。 - 更改 HBAC 规则配置页面中的某些设置,突出显示页面顶部的按钮。如果发生此情况,请单击 按钮以确认更改。
命令行:创建 HBAC 规则
- 使用 ipa hbacrule-add 命令添加规则。
$ ipa hbacrule-add Rule name:
rule_name
--------------------------- Added HBAC rule "rule_name" --------------------------- Rule name: rule_name Enabled: TRUE - 指定目标用户。
- 要将 HBAC 规则应用到指定的用户或组,请使用 ipa hbacrule-add-user 命令。例如,要添加组:
$ ipa hbacrule-add-user Rule name:
rule_name
[member user]: [member group]:group_name
Rule name: rule_name Enabled: TRUE User Groups: group_name ------------------------- Number of members added 1 -------------------------要添加多个用户或组,请使用--users
和--groups
选项:$ ipa hbacrule-add-user rule_name --users=user1 --users=user2 --users=user3 Rule name: rule_name Enabled: TRUE Users: user1, user2, user3 ------------------------- Number of members added 3 -------------------------
- 要将 HBAC 规则应用到所有用户,请使用 ipa hbacrule-mod 命令并指定
所有用户
类别:$ ipa hbacrule-mod rule_name --usercat=all ------------------------------ Modified HBAC rule "rule_name" ------------------------------ Rule name: rule_name User category: all Enabled: TRUE
注意如果 HBAC 规则与单个用户或组关联,ipa hbacrule-mod --usercat=all 会失败。在这种情况下,使用 ipa hbacrule-remove-user 命令删除用户和组。详情请参阅使用--help
选项运行 ipa hbacrule-remove-user。
- 指定目标主机。
- 要将 HBAC 规则应用到指定的主机或主机组,请使用 ipa hbacrule-add-host 命令。例如,要添加单个主机:
$ ipa hbacrule-add-host Rule name:
rule_name
[member host]:host.example.com
[member host group]: Rule name: rule_name Enabled: TRUE Hosts: host.example.com ------------------------- Number of members added 1 -------------------------要添加多个主机或组,请使用--hosts
和--hostgroups
选项:$ ipa hbacrule-add-host rule_name --hosts=host1 --hosts=host2 --hosts=host3 Rule name: rule_name Enabled: TRUE Hosts: host1, host2, host3 ------------------------- Number of members added 3 -------------------------
- 要将 HBAC 规则应用到所有主机,请使用 ipa hbacrule-mod 命令并指定
所有主机
类别:$ ipa hbacrule-mod rule_name --hostcat=all ------------------------------ Modified HBAC rule "rule_name" ------------------------------ Rule name: rule_name Host category: all Enabled: TRUE
注意如果 HBAC 规则与单个主机或主机组关联,ipa hbacrule-mod --hostcat=all 会失败。在这种情况下,使用 ipa hbacrule-remove-host 命令删除主机和组。详情请参阅使用--help
选项运行 ipa hbacrule-remove-host。
- 指定目标 HBAC 服务。
- 要将 HBAC 规则应用到指定的服务或组,请使用 ipa hbacrule-add-service 命令。例如,要添加单个服务:
$ ipa hbacrule-add-service Rule name:
rule_name
[member HBAC service]:ftp
[member HBAC service group]: Rule name: rule_name Enabled: TRUE Services: ftp ------------------------- Number of members added 1 -------------------------要添加多个服务或组,您可以使用--hbacsvcs
和--hbacsvcgroups
选项:$ ipa hbacrule-add-service rule_name --hbacsvcs=su --hbacsvcs=sudo Rule name: rule_name Enabled: TRUE Services: su, sudo ------------------------- Number of members added 2 -------------------------
注意只有最常见的服务和服务组是为 HBAC 规则配置。要添加更多,请查看 第 31.3 节 “为自定义 HBAC 服务添加 HBAC Service Entries” 和 第 31.4 节 “添加 HBAC 服务组”。 - 要将 HBAC 规则应用到所有服务,请使用 ipa hbacrule-mod 命令并指定
所有服务
类别:$ ipa hbacrule-mod rule_name --servicecat=all ------------------------------ Modified HBAC rule "rule_name" ------------------------------ Rule name: rule_name Service category: all Enabled: TRUE
注意如果 HBAC 规则与各个服务或组关联,ipa hbacrule-mod --servicecat=all 会失败。在这种情况下,使用 ipa hbacrule-remove-service 命令删除服务和组。详情请参阅使用--help
选项运行 ipa hbacrule-remove-service。
- 可选。验证 HBAC 规则是否已正确添加。
- 使用 ipa hbacrule-find 命令来验证 HBAC 规则是否已添加到 IdM。
- 使用 ipa hbacrule-show 命令验证 HBAC 规则的属性。
详情请使用--help
选项运行命令。
HBAC 规则示例
例 31.1. 使用任何服务授予单用户对所有主机的访问权限
要允许
admin
用户使用任何服务访问域中的所有系统,请创建一个新的 HBAC 规则并设置:
- 要管理
的用户
- 主机到任何主机(在 Web UI 中),或使用
--hostcat=all
与 ipa hbacrule-add (添加规则时)或 ipa hbacrule-mod - 服务到任何服务(在 Web UI 中),或使用
--servicecat=all
与 ipa hbacrule-add (添加规则时)或 ipa hbacrule-mod
例 31.2. 确保只能用于访问主机的特定服务
要确保所有用户都必须使用
sudo
相关服务来访问名为 host.example.com
的主机,请创建一个新的 HBAC 规则并设置:
- 用户到 任何人 (在 Web UI 中),或使用
--usercat=all
与 ipa hbacrule-add (添加规则时)或 ipa hbacrule-mod - 到
host.example.com
的主机 - HBAC 服务组为
Sudo
,这是sudo
和相关服务的默认组
31.2.2. 测试 HBAC 规则
IdM 可让您在各种情况下使用模拟场景测试 HBAC 配置。通过执行这些模拟测试运行,您可以在生产中部署 HBAC 规则之前发现错误配置问题或安全风险。
重要
在开始在生产环境中使用自定义 HBAC 规则前,请始终测试它们。
请注意,IdM 不会测试 HBAC 规则对可信 Active Directory(AD)用户的影响。因为 AD 数据没有存储在 IdM LDAP 目录中,所以 IdM 在模拟 HBAC 场景时无法解析 AD 用户的组成员身份。
要测试 HBAC 规则,您可以使用:
- IdM Web UI(请参阅 “Web UI:测试 HBAC 规则”一节)
- 命令行(请参见 “命令行:测试 HBAC 规则”一节)
Web UI:测试 HBAC 规则
- 选择
。 - 在 Who 屏幕中:指定您要执行测试的身份下的用户,然后单击 。
图 31.3. 为 HBAC 测试指定目标用户
- 在 Accessing 屏幕中:指定用户可访问的主机,然后单击 。
- 在 Via Service 屏幕中:指定用户要使用的服务,然后单击 。
- 在 Rules 屏幕中:选择您要测试的 HBAC 规则,然后点 。如果不选择任何规则,则会测试所有规则。选择 Include Enabled,以对所有状态为
Enabled
的规则运行测试。选择 Include Disabled 在状态为Disabled
的所有规则上运行测试。要查看并更改 HBAC 规则的状态,请选择。 重要如果测试在多个规则上运行,则如果至少一个所选规则允许访问,它将成功传递。 - 在 Run Test 屏幕中:单击 。
图 31.4. 运行 HBAC 测试
- 查看测试结果:
- 如果您看到
ACCESS DENIED
,该用户没有在测试中授予访问权限。 - 如果您看到
ACCESS GRANTED
,用户可以成功访问主机。
图 31.5. 查看 HBAC 测试结果
默认情况下,在显示测试结果时,IdM 会列出所有经过测试的 HBAC 规则。- 选择 Matched 以显示允许成功访问的规则。
- 选择 Unmatched 来显示阻止访问的规则。
命令行:测试 HBAC 规则
使用 ipa hbactest 命令并至少指定:
- 要执行测试其身份的用户
- 用户将尝试访问的主机
- 用户将尝试使用的服务
例如,在以交互方式指定这些值时:
$ ipa hbactest
User name: user1
Target host: example.com
Service: sudo
---------------------
Access granted: False
---------------------
Not matched rules: rule1
默认情况下,IdM
在启用了
其状态的所有 HBAC 规则上运行测试。指定不同的 HBAC 规则:
- 使用
--rules
选项定义一个或多个 HBAC 规则。 - 使用
--
选项测试其状态禁用的所有 HBAC 规则。disabled
要查看 HBAC 规则的当前状态,请运行 ipa hbacrule-find 命令。
例 31.3. 从命令行测试 HBAC 规则
在以下测试中,名为
rule2
的 HBAC 规则阻止 user1
使用 sudo
服务访问 example.com
:
$ ipa hbactest --user=user1 --host=example.com --service=sudo --rules=rule1
---------------------
Access granted: False
---------------------
Not matched rules: rule1
例 31.4. 从命令行测试多个 HBAC 规则
测试多个 HBAC 规则时,如果至少一条规则允许用户成功访问,则测试将通过。
$ ipa hbactest --user=user1 --host=example.com --service=sudo --rules=rule1 --rules=rule2
--------------------
Access granted: True
--------------------
Matched rules: rule2
Not matched rules: rule1
在输出中:
匹配的规则
列出了允许成功访问的规则。不匹配规则
会列出阻止访问的规则。
31.2.3. 禁用 HBAC 规则
禁用 HBAC 规则将停用该规则,但不会删除该规则。如果禁用 HBAC 规则,您可以稍后重新启用它。
注意
例如,在首次配置自定义 HBAC 规则后,禁用 HBAC 规则非常有用。为确保新配置不会被默认的
allow_all
HBAC 规则覆盖,您必须禁用 allow_all
。
要禁用 HBAC 规则,您可以使用:
- IdM Web UI(请参阅 “Web UI:禁用 HBAC 规则”一节)
- 命令行(请参见 “命令行:禁用 HBAC 规则”一节)
Web UI:禁用 HBAC 规则
- 选择
。 - 选择您要禁用的 HBAC 规则,然后单击。
图 31.6. 禁用 allow_all
HBAC 规则
命令行:禁用 HBAC 规则
使用 ipa hbacrule-disable 命令。例如,禁用
allow_all
规则:
$ ipa hbacrule-disable allow_all
------------------------------
Disabled HBAC rule "allow_all"
------------------------------