第 2 章 使用 Samba Winbind 将 RHEL 系统直接连接到 AD

这部分论述了使用 Samba Winbind 将 RHEL 系统连接到 Active Directory(AD)。您需要两个组件才能将 RHEL 系统连接到 AD。一个组件(Samba Winbind)与 AD 身份和验证源交互,另一个组件(realmd)检测可用的域并配置底层 RHEL 系统服务,即 Samba Winbind 以连接到 AD 域。

2.1. 使用 Samba Winbind 直接集成的概述

Samba Winbind 在 Linux 系统中模拟 Windows 客户端并与 AD 服务器沟通。

您可以使用 realmd 服务配置 Samba Winbind:

  • 以标准的方式配置网络身份验证和域成员资格。
  • 自动发现有关可访问 domain 和 realm 的信息。
  • 不需要高级配置加入domain 或 realm。

请注意:

  • 在多林 AD 设置中直接与 Winbind 集成需要双向信托。
  • 远程林必须信任本地林,以确保 idmap_ad 插件可以正确处理远程林用户。

Samba 的 winbindd 服务为 Name Service Switch(NSS)提供了一个接口,并让域用户在登录到本地系统时进行身份验证。

使用 winbindd 提供了在不安装附加软件的情况下增强配置以共享目录和打印机的好处。详情请参阅 Deploying Different of Servers Guide 中的有关使用 Samba 作为服务器的部分。

其它资源

  • 请查看 realmd man page。
  • 请查看 windbindd man page。

2.2. 支持直接集成的 Windows 平台

您可以直接将 RHEL 系统与使用以下林和域功能级别的 Active Directory 网站集成:

  • 林功能级别范围:Windows Server 2008 - Windows 服务器 2016
  • 域功能级别范围:Windows Server 2008 - Windows 服务器 2016

在以下支持的操作系统中测试了直接集成:

  • Windows Server 2019
  • Windows Server 2016
  • Windows Server 2012 R2
注意

Windows Server 2019 没有引入新的功能级别。Windows Server 2019 使用最高功能级别是 Windows Server 2016。

2.3. 确保支持 AD 和 RHEL 中的通用加密类型

默认情况下,Samba Winbind 支持 RC4、AES-128 和 AES-256 Kerberos 加密类型。

RHEL 8 中弃用并默认禁用 RC4 加密,因为它被视为没有较新的 AES-128 和 AES-256 加密类型安全。而 Active Directory(AD)用户凭证和 AD 域之间的信任支持 RC4 加密,且可能不支持 AES 加密类型。

如果没有通用加密类型,RHEL 主机和 AD 域间的通信可能无法正常工作,或者有些 AD 帐户可能无法验证。要避免这种情况,请修改以下配置之一:

  • 在 Active Directory 中启用 AES 加密支持(推荐的选项):要确保 AD 林支持强大的 AES 加密类型中的 AD 域相互信任 ,请查看以下 Microsoft 文章 AD DS: Security: Kerberos "Unsupported etype" error when access a trusted domain 中
  • RHEL 中启用 RC4 支持:在进行针对 AD 域控制器身份验证的每个 RHEL 主机上:

    1. 除了 DEFAULT 加密策略外,使用 update-crypto-policies 命令还启用 AD-SUPPORT 加密子策略。

      [root@host ~]# update-crypto-policies --set DEFAULT:AD-SUPPORT
      Setting system policy to DEFAULT:AD-SUPPORT
      Note: System-wide crypto policies are applied on application start-up.
      It is recommended to restart the system for the change of policies
      to fully take place.
    2. 重启主机。
重要

AD-SUPPORT 加密子策略仅适用于 RHEL 8.3 及更新的版本。

  • 要在 RHEL 8.2 中启用对 RC4 的支持,请使用 cipher = RC4-128+ 创建并启用自定义加密模块策略。如需了解更多详细信息,请参阅使用 policy modifiers 自定义系统范围的加密策略
  • 要在 RHEL 8.0 和 RHEL 8.1 中启用对 RC4 的支持,请将 +rc4 添加到 /etc/crypto-policies/back-ends/krb5.config 文件的 permitted_enctypes 选项中:

    [libdefaults]
    permitted_enctypes = aes256-cts-hmac-sha1-96 aes256-cts-hmac-sha384-192 camellia256-cts-cmac aes128-cts-hmac-sha1-96 aes128-cts-hmac-sha256-128 camellia128-cts-cmac +rc4

其它资源

2.4. 将 RHEL 系统添加到 AD 域中

这部分论述了如何使用 realmd 配置 Samba Winbind 将 Red Hat Enterprise Linux 系统添加到 AD 域中。

流程

  1. 如果您的 AD 需要弃用的 RC4 加密类型进行 Kerberos 验证,请在 RHEL 中启用对这些密码的支持:

    # update-crypto-policies --set DEFAULT:AD-SUPPORT
  2. 安装以下软件包:

    # yum install realmd oddjob-mkhomedir oddjob samba-winbind-clients \ samba-winbind samba-common-tools samba-winbind-krb5-locator
  3. 要在域成员中共享目录或打印机,请安装 samba 软件包:

    # yum install samba
  4. 备份现有的 /etc/samba/smb.conf Samba 配置文件:

    # mv /etc/samba/smb.conf /etc/samba/smb.conf.bak
  5. 加入域。例如,要加入名为 ad.example.com 的域:

    # realm join --membership-software=samba --client-software=winbind ad.example.com

    使用前面的命令,realm 工具会自动:

    • ad.example.com 域中的成员资格创建一个 /etc/samba/smb.conf 文件
    • /etc/nsswitch.conf 文件中为用户和组群查询添加 winbind 模块
    • 更新 /etc/pam.d/ 目录中的可插拔验证模块(PAM)配置文件
    • 启动 winbind 服务并启用服务在系统引导时启动
  6. 另外,还可在 /etc/samba/smb.conf 文件中设置备选 ID 映射后端或自定义 ID 映射设置。详情请查看 Deploying different types of servers 文档中 的了解和配置 Samba ID 映射 部分。
  7. 编辑 /etc/krb5.conf 文件并添加以下部分:

    [plugins]
        localauth = {
            module = winbind:/usr/lib64/samba/krb5/winbind_krb5_localauth.so
            enable_only = winbind
        }
  8. 验证 winbind 服务是否正在运行:

    # systemctl status winbind
    ...
       Active: active (running) since Tue 2018-11-06 19:10:40 CET; 15s ago
    重要

    要启用 Samba 查询域用户和组群信息,必须在启动 smb 前运行 winbind 服务。

  9. 如果您安装 samba 软件包来共享目录和打印机,请启用并启动 smb 服务:

    # systemctl enable --now smb

验证步骤

  1. 显示 AD 用户的详情,如 AD 域中的 AD 管理员帐户:

    # getent passwd "AD\administrator"
    AD\administrator:*:10000:10000::/home/administrator@AD:/bin/bash
  2. 查询 AD 域中的域用户组成员:

    # getent group "AD\Domain Users"
        AD\domain users:x:10000:user1,user2
  3. 另外,还可在设置文件和目录权限时验证您可以使用域用户和组。例如,将 /srv/samba/example.txt 文件的拥有者设置为 AD\administrator,组为 AD\Domain Users

    # chown "AD\administrator":"AD\Domain Users" /srv/samba/example.txt
  4. 验证 Kerberos 验证是否如预期正常工作:

    1. 在 AD 域成员中,为 administrator@AD.EXAMPLE.COM 主体获取一个 ticket:

      # kinit administrator@AD.EXAMPLE.COM
    2. 显示缓存的 Kerberos ticket:

      # klist
      Ticket cache: KCM:0
      Default principal: administrator@AD.EXAMPLE.COM
      
      Valid starting       Expires              Service principal
      01.11.2018 10:00:00  01.11.2018 20:00:00  krbtgt/AD.EXAMPLE.COM@AD.EXAMPLE.COM
              renew until 08.11.2018 05:00:00
  5. 显示可用域:

    # wbinfo --all-domains
    BUILTIN
    SAMBA-SERVER
    AD

其它资源

2.5. realm 命令

realmd 系统有两个主要任务:

  • 在一个域中管理系统注册。
  • 控制允许哪些域用户访问本地系统资源。

realmd 中,使用命令行工具 realm 运行命令。大多数 realm 命令要求用户指定该工具应执行的操作,以及执行操作的实体,如域或用户帐户。

表 2.1. realmd 命令

命令描述

realm 命令

discover

对网络中的域运行发现扫描。

join

将系统添加到指定的域中。

leave

从指定的域中删除系统。

list

列出系统的所有配置域,或者所有发现和配置的域。

登录命令

permit

启用特定用户或配置域中的所有用户访问本地系统。

deny

限制特定用户或配置域中的所有用户访问本地系统。

有关 realm 命令的详情,请参考 realm(8) man page。


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