第 3 章 管理到 AD 的直接连接

本节论述了如何修改和管理您与 Active Directory 的连接。

先决条件

  • 您已将 RHEL 系统连接到 Active Directory 域。

3.1. 修改默认的 Kerberos 主机 keytab 续订间隔

如果安装了 adcli 软件包,SSSD 会在 AD 环境中自动更新 Kerberos 主机 keytab 文件。如果机器帐户密码早于配置的值,守护进程会每天检查并在需要时更新它。

默认续订间隔为 30 天。要更改默认值,请按照以下步骤执行。

流程

  1. /etc/sssd/sssd.conf 文件中的 AD 供应商中添加以下参数:

    ad_maximum_machine_account_password_age = value_in_days
  2. 重启 SSSD:

    # systemctl restart sssd
  3. 要禁用自动 Kerberos 主机 keytab 续订,请设置 ad_maximum_machine_account_password_age = 0

其它资源

  • adcli(8) man page。
  • sssd.conf(5) man page。

3.2. 从 AD 域中删除 RHEL 系统

这个步骤描述了如何从 Active Directory(AD)域中删除 RHEL 系统。

流程

  1. 使用 realm leave 命令从身份域中删除系统。该命令从 SSSD 和本地系统中删除域配置。

    # realm leave ad.example.com
    注意

    当客户端离开某个域时,帐户不会从 AD 中删除 ; 本地客户端配置仅会被删除。如果要删除 AD 帐户,使用 --remove 选项运行该命令。此时会提示您输入用户密码,且您必须有权从 Active Directory 中删除帐户。

  2. 使用 realm leave 命令的 -U 选项指定不同的用户从身份域中删除系统。

    默认情况下, realm leave 命令作为默认管理员执行。对于 AD,管理员帐户名为 Administrator。如果使用其他用户加入域,则可能需要以该用户的身份执行删除操作。

    # realm leave [ad.example.com] -U [AD.EXAMPLE.COM\user]'

该命令首先尝试在没有凭证的情况下连接,但在需要时会提示输入密码。

验证步骤

  • 验证不再配置域:

    # realm discover [ad.example.com]
    ad.example.com
        type: kerberos
        realm-name: EXAMPLE.COM
        domain-name: example.com
        configured: no
        server-software: active-directory
        client-software: sssd
        required-package: oddjob
        required-package: oddjob-mkhomedir
        required-package: sssd
        required-package: adcli
        required-package: samba-common-tools

其它资源

  • 请查看 realm(8)` man page。

3.3. 在 SSSD 中设置域解析顺序来解析短 AD 用户名

默认情况下,您必须指定完全限定的用户名,如 ad_username@ad.example.comgroup@ad.example.com,才能使用 SSSD 服务解析连接到 AD 的 RHEL 主机上的用户和组。

此流程在 SSSD 配置中设置域解析顺序,以便您可以使用简短名称解析 AD 用户和组,如 ad_username。这个示例配置会按照以下顺序搜索用户和组:

  1. Active Directory(AD)子域 subdomain2.ad.example.com
  2. AD 子域 subdomain1.ad.example.com
  3. AD root domain ad.example.com

先决条件

  • 已使用 SSSD 服务将 RHEL 主机直接连接到 AD。

流程

  1. 在文本编辑器中打开 /etc/sssd/sssd.conf 文件。
  2. 在文件的 [sssd] 部分设置 domain_resolution_order 选项。

    domain_resolution_order = subdomain2.ad.example.com, subdomain1.ad.example.com, ad.example.com
  3. 保存并关闭该文件。
  4. 重启 SSSD 服务以加载新的配置设置。

    [root@ad-client ~]# systemctl restart sssd

验证步骤

  • 您只能使用简短名称从第一个域中检索用户的用户信息。

    [root@ad-client ~]# id <user_from_subdomain2>
    uid=1916901142(user_from_subdomain2) gid=1916900513(domain users) groups=1916900513(domain users)

3.4. 为域用户管理登录权限

默认情况下,会应用域端访问控制,这意味着在 AD 域本身中为 Active Directory(AD)用户定义了登录策略。此默认行为可以被覆盖,以便使用客户端访问控制。使用客户端访问控制,登录权限仅由本地策略定义。

如果某个域应用客户端访问控制,您可以使用 realmd 为来自该域的用户配置基本允许或拒绝访问规则。

注意

访问规则可以允许或拒绝对系统中所有服务的访问。必须在特定系统资源或域中设置更具体的访问规则。

3.4.1. 启用对域中用户的访问

本节论述了如何启用对域中用户的访问。

重要

仅允许访问特定用户或组比拒绝访问某些用户或组而允许访问其他所有用户或组要安全。因此,不建议默认允许访问所有用户,而只拒绝访问 realm 权限为 -x 的特定用户。反之,红帽建议为所有用户维护默认的 no access 策略,且只使用域允许为所选用户授予访问权限。

先决条件

  • 您的 RHEL 系统是 Active Directory 域的成员。

流程

  1. 授予对所有用户的访问权限:

    # realm permit --all
  2. 授予对特定用户的访问权限:

    $ realm permit aduser01@example.com
    $ realm permit 'AD.EXAMPLE.COM\aduser01'

目前,您只能允许访问主域中的用户,而不允许访问可信域中的用户。这是因为用户登录必须包含域名,SSSD 目前无法提供 realmd 可用子域的信息。

验证步骤

  1. 使用 SSH 以 aduser01@example.com 用户身份登录到服务器:

    $ ssh aduser01@example.com@server_name
    [aduser01@example.com@server_name ~]$
  2. 使用 ssh 命令第二次访问同一服务器,此时与 aduser02@example.com 用户身份进行以下操作:

    $ ssh aduser02@example.com@server_name
    Authentication failed.

请注意 aduser02@example.com 如何拒绝对该系统的访问。您只为 aduser01@example.com 用户授权可以登录到系统。由于指定的登录策略,来自该 Active Directory 域的所有其他用户都将被拒绝。

注意

如果在 sssd.conf 文件中将 use_fully_qualified_names 设置为 true,则所有请求都必须使用完全限定域名。但是,如果您将 use_fully_qualified_names 设置为 false,则可以在请求中使用完全限定名称,但输出中只会显示简化的版本。

其它资源

  • 请查看 realm(8)` man page。

3.4.2. 拒绝对域中用户的访问

本节论述了如何拒绝对域内所有用户的访问。

重要

仅允许访问特定用户或组比拒绝访问某些用户或组而允许访问其他所有用户或组要安全。因此,不建议默认允许访问所有用户,而只拒绝访问 realm 权限为 -x 的特定用户。反之,红帽建议为所有用户维护默认的 no access 策略,且只使用域允许为所选用户授予访问权限。

先决条件

  • 您的 RHEL 系统是 Active Directory 域的成员。

流程

  1. 拒绝对域内所有用户的访问:

    # realm deny --all

    这个命令可防止 realm 帐户登录本地机器。使用 realm permit 来限制到特定帐户的登录。

  2. 验证域用户的 login-policy 是否已设置为 deny-any-login

    [root@replica1 ~]# realm list
    example.net
      type: kerberos
      realm-name: EXAMPLE.NET
      domain-name: example.net
      configured: kerberos-member
      server-software: active-directory
      client-software: sssd
      required-package: oddjob
      required-package: oddjob-mkhomedir
      required-package: sssd
      required-package: adcli
      required-package: samba-common-tools
      login-formats: %U@example.net
      login-policy: deny-any-login
  3. 使用 -x 选项拒绝对特定用户的访问:

    $ realm permit -x 'AD.EXAMPLE.COM\aduser02'

验证步骤

  • 使用 SSH 以 aduser01@example.net 用户身份登录到服务器。

    $ ssh aduser01@example.net@server_name
    Authentication failed.
注意

如果在 sssd.conf 文件中将 use_fully_qualified_names 设置为 true,则所有请求都必须使用完全限定域名。但是,如果您将 use_fully_qualified_names 设置为 false,则可以在请求中使用完全限定名称,但输出中只会显示简化的版本。

其它资源

  • 请查看 realm(8)` man page。

3.5. 在 RHEL 中应用组策略对象访问控制

组策略对象( GPO)是存储在 Microsoft Active Directory(AD)中的访问控制设置集合,可应用于 AD 环境中的计算机和用户。通过在 AD 中指定 GPO,管理员可以定义加入 AD 的 Windows 客户端和 Red Hat Enterprise Linux(RHEL)主机都遵循的登录策略。

以下小节介绍了如何在您的环境中管理 GPO:

3.5.1. SSSD 如何解释 GPO 访问控制规则

默认情况下,SSSD 从 Active Directory(AD)域控制器检索组策略对象(GPOs),并评估它们以确定用户是否允许用户登录到 AD 加入的特定 RHEL 主机。

SSSD 将 AD Windows 日志记录器映射 到可插拔的身份验证模块(PAM)服务名称,以便在 GNU/Linux 环境中强制这些权限。

作为 AD 管理员,您可以将 GPO 规则的范围限制为特定用户、组或主机,方法是将它们列在 安全过滤器中

3.5.1.1. 主机过滤的限制

旧版本的 SSSD 不评估 AD GPO 安全过滤器中的主机。

  • RHEL 8.3.0 和更新版本: SSSD 支持安全过滤器中的用户、组和主机。
  • 早于 8.3.0 的 RHEL 版本: SSSD 忽略主机条目,且只在安全过滤器中支持用户和组。
    为确保 SSSD 将基于 GPO 的访问控制应用到特定主机,在 AD 域中创建一个新的机构单元(OU),将系统移到新的 OU,然后将 GPO 链接到这个 OU。

3.5.1.2. 按组过滤的限制

SSSD 目前不支持 Active Directory 的内置组,如带有安全标识符(SID) S-1-5-32-544Administrators。红帽建议您在 AD GPOs 中针对 RHEL 主机使用 AD 内置组。

其它资源

3.5.2. SSSD 支持的 GPO 设置列表

下表显示了与 Windows 上 组策略管理编辑器 中指定的 Active Directory GPO 选项对应的 SSSD 选项。

表 3.1. SSSD 检索的 GPO 访问控制选项

GPO 选项对应的 sssd.conf 选项

允许本地登录
拒绝在本地日志

ad_gpo_map_interactive

允许通过远程桌面服务登录
通过远程桌面服务登陆

ad_gpo_map_remote_interactive

从网络访问这个计算机
请从网络访问这台计算机。

ad_gpo_map_network

允许作为批处理任务登录
拒绝作为批处理作业登录

ad_gpo_map_batch

允许作为服务登录
拒绝作为服务登录

ad_gpo_map_service

  • 有关这些 sssd.conf 设置的详情,如映射到 GPO 选项的可插拔身份验证模块(PAM)服务,请查看 sssd-ad(5) 手册页条目。

3.5.3. 控制 GPO 强制的 SSSD 选项列表

3.5.3.1. ad_gpo_access_control 选项

您可以在 /etc/sssd/sssd.conf 文件中设置 ad_gpo_access_control 选项,在基于 GPO 的访问控制操作的三种不同模式间进行选择。

表 3.2. ad_gpo_access_control 值表


ad_gpo_access_control 的值
行为

enforcing

基于 GPO 的访问控制规则被评估并强制执行。
这是 RHEL 8 中的默认设置。

permissive

基于 GPO 的访问控制规则会被评估但 强制执行 ; 每次拒绝访问时都会记录 syslog 信息。这是 RHEL 7 中的默认设置。
这个模式是测试策略调整的理想模式,同时允许用户继续登录。

disabled

基于 GPO 的访问控制规则不会被评估,也不会强制实施。

3.5.3.2. ad_gpo_implicit_deny 选项

默认情况下,ad_gpo_implicit_deny 选项被设置为 False。在默认状态下,如果找不到 GPOs,则允许用户访问。如果将此选项设置为 True,您必须明确允许用户使用 GPO 规则访问。

您可以使用这个功能强化安全性,但不要意外地拒绝访问。红帽建议在 ad_gpo_access_control 设置为 permissive 时测试此功能。

以下两个表演示了用户根据 AD 服务器端定义的允许和拒绝登录权限以及 ad_gpo_implicit_deny 的值被允许或拒绝访问。

表 3.3. 将 ad_gpo_implicit_deny 设置为 False (默认)的登录行为

允许规则拒绝规则结果

缺少

缺少

允许所有用户

缺少

存在

仅允许没有拒绝规则的用户

存在

缺少

只允许有允许规则的用户

存在

存在

只允许有允许规则而不在拒绝规则中的用户

表 3.4. ad_gpo_implicit_deny 设置为 True 的登录行为

允许规则拒绝规则结果

缺少

缺少

没有用户被允许

缺少

存在

没有用户被允许

存在

缺少

只允许有允许规则的用户

存在

存在

只允许有允许规则而不在拒绝规则中的用户

其它资源

  • 有关在 SSSD 中更改 GPO 强制模式的步骤,请参阅 更改 GPO 访问控制模式
  • 有关每个 GPO 模式操作的详情,请查看 sssd-ad(5) Manual 页面中的 ad_gpo_access_control 条目。

3.5.4. 更改 GPO 访问控制模式

此流程更改了在加入 Active Directory(AD)环境的 RHEL 主机上如何评估并强制实施基于 GPO 的访问控制规则。

在本例中,您可以将 GPO 操作模式从 enforcing (默认)改为 permissive,以便进行测试。

重要

如果您看到以下错误, Active Directory 用户因为基于 GPO 的访问控制而无法登录:

  • /var/log/secure:

    Oct 31 03:00:13 client1 sshd[124914]: pam_sss(sshd:account): Access denied for user aduser1: 6 (Permission denied)
    Oct 31 03:00:13 client1 sshd[124914]: Failed password for aduser1 from 127.0.0.1 port 60509 ssh2
    Oct 31 03:00:13 client1 sshd[124914]: fatal: Access denied for user aduser1 by PAM account configuration [preauth]
  • /var/log/sssd/sssd__example.com_.log:

    (Sat Oct 31 03:00:13 2020) [sssd[be[example.com]]] [ad_gpo_perform_hbac_processing] (0x0040): GPO access check failed: [1432158236](Host Access Denied)
    (Sat Oct 31 03:00:13 2020) [sssd[be[example.com]]] [ad_gpo_cse_done] (0x0040): HBAC processing failed: [1432158236](Host Access Denied}
    (Sat Oct 31 03:00:13 2020) [sssd[be[example.com]]] [ad_gpo_access_done] (0x0040): GPO-based access control failed.

如果这不是正确的行为,您可以临时将 ad_gpo_access_control 设置为 permissive,如您在 AD 中故障排除正确的 GPO 设置时所述。

先决条件

  • 已使用 SSSD 将 RHEL 主机加入到 AD 环境中。
  • 编辑 /etc/sssd/sssd.conf 配置文件需要 root 权限。

流程

  1. 停止 SSSD 服务。

    [root@server ~]# systemctl stop sssd
  2. 在文本编辑器中打开 /etc/sssd/sssd.conf 文件。
  3. 为 AD 域在 domain 部分中将 ad_gpo_access_control 设置为 permissive

    [domain/example.com]
    ad_gpo_access_control=permissive
    ...
  4. 保存 /etc/sssd/sssd.conf 文件。
  5. 重启 SSSD 服务以加载配置更改。

    [root@server ~]# systemctl restart sssd

其它资源

3.5.5. 在 AD GUI 中为 RHEL 主机创建和配置 GPO

以下流程在 Active Directory(AD)图形用户界面(GUI)中创建组策略对象(GPO)以控制对 RHEL 主机的登录访问。

先决条件

  • 已使用 SSSD 将 RHEL 主机加入到 AD 环境中。
  • 您有 AD Administrator 特权才能使用 GUI 更改 AD。

流程

  1. Active Directory Users and Computers 中,创建一个机构单元(OU)与新的 GPO 关联:

    1. 右键点击域。
    2. 选择 New
    3. 选择 Organizational Unit
  2. 点击代表 RHEL 主机(在它加入 Active Directory 时创建)的 Computer Object 名称,并将其拖动到新的 OU 中。通过在自己的 OU 中使用 RHEL 主机,GPO 以这个主机为目标。
  3. Group Policy Management Editor 中,为您创建的 OU 创建一个新的 GPO:

    1. 展开 Forest
    2. 展开 Domains
    3. 展开您的域。
    4. 右键点击新的 OU。
    5. 选择 Create a GPO in this domain
  4. 为新 GPO 指定名称,如 Allow SSH accessAllow Console/GUI access,并点 OK
  5. 编辑新的 GPO:

    1. Group Policy Management 编辑器中选择 OU。
    2. 右击并选择 Edit
    3. 选择 User Rights Assignment
    4. 选择 Computer Configuration
    5. 选择 Policies
    6. 选择 Windows Settings
    7. 选择 Security Settings
    8. 选择 Local Policies
    9. 选择 User Rights Assignment
  6. 分配登录权限:

    1. 双击 Allow log on locally 以授予本地控制台/GUI 访问权限。
    2. 双击 Allow log on through Remote Desktop Services 以授予 SSH 访问权限。
  7. 在策略本身中添加您要访问这些策略的用户:

    1. Add User or Group
    2. 在空白字段中输入用户名。
    3. OK

其它资源

  • 如需有关组策略对象的更多信息,请参阅 Microsoft 文档中的组策略对象

3.5.6. 其它资源


为了尽快向用户提供最新的信息,本文档可能会包括由机器自动从英文原文翻译的内容。如需更多信息,请参阅此说明。