红帽企业级Linux 7和 Windows集成指南

集成活动目录和LINUX环境的方法

IT环境有一个结构。其中的系统是有目的安排。要整合两个独立的基础设施,就需要评估每一个环境的目的,并了解它们如何以及在何处进行交互。

定义WINDOWS集成

Windows集成可能意味着非常不同的东西,具体取决于Linux环境和Windows环境之间所需的交互。 这可能意味着单个Linux系统已注册到Windows域,这可能意味着Linux域被配置为Windows域的对等体,或者它可能仅仅意味着在环境之间复制信息。

Windows域和Linux系统之间有几个联系点。 这些要点中的每一个都围绕识别不同的域对象(用户,组,系统,服务)以及在该标识中使用的服务。

用户身份和身份验证

  • 用户帐户在哪里?在Windows(AD域)上运行的中央身份验证系统中,还是在Linux上运行的中央身份和身份验证服务器中?
  • 如何在Linux系统上对用户进行身份验证; 通过本地Linux身份验证系统或Windows上运行的中央身份验证系统?
  • 如何为用户配置组成员身份? 该团体成员如何确定?
  • 用户是否使用用户名/密码对,Kerberos凭据,证书或方法组合进行身份验证?
  • 在Linux机器上访问服务需要POSIX属性。 这些属性是如何存储的:它们是在Windows域中设置,在Linux系统上本地配置还是动态映射(对于UID / GID号和Windows SID)?
  • 用户将访问哪些资源? Windows定义的用户是否会访问Linux资源? Linux定义的用户是否会访问Windows资源?

在大多数环境中,Active Directory域是用户信息的中心集线器,这意味着Linux系统需要某种方式来访问该用户信息以进行身份验证请求。 那么真正的问题是如何获得该用户信息以及外部系统可以获得多少信息。 还需要在Linux系统(POSIX属性)和Linux用户(某些应用程序管理员)所需的信息以及如何管理这些信息之间取得平衡。

主机和服务主体

  • 将访问哪些资源?
  • 需要哪些身份验证协议?
  • 如何获得Kerberos凭据? 如何申请或验证SSL证书?
  • 用户是否需要访问单个域或同时访问Linux和Windows域?

DNS域,查询和名称解析

  • 什么是DNS配置?
  • 是否有一个单一的DNS域?有子域吗?
  • 如何解析系统主机名?
  • 如何配置服务发现?

安全策略

  • 访问控制指令在哪里设置?
  • 为每个域配置哪些管理员?

变更管理

  • 系统添加到域的频率是多少?
  • 如果更改了与Windows集成相关的基础配置(例如DNS服务),那些更改将如何传播?
  • 是通过域相关工具还是配置系统维护配置?
  • 集成路径是否需要Windows服务器上的其它应用程序或配置?

与集成域中的哪些元素一样重要,是如何维护集成。 如果特定的集成工具是大量手动操作的,但环境中有大量经常更新的系统,那么从维护的角度来看,那个工具可能无法在该环境中工作。

以下部分概述了与Windows集成的主要方案。 在直接集成中,Linux系统连接到Active Directory而无需任何其他中介。 另一方面,间接集成涉及一个集中管理Linux系统的身份服务器,并将整个环境连接到服务器到服务器级别的Active Directory。

直接集成

您需要两个组件才能将Linux系统连接到Active Directory(AD)。 一个组件与中央身份和身份验证源交互,在这种情况下是AD。 另一个组件检测可用域并配置第一个组件以使用正确的标识源。 有多种选项可用于检索信息并对AD执行身份验证。 其中包括:

原生LDAP和Kerberos PAM和NSS模块

这些模块包括nss_ldappam_ldappam_krb5。由于PAM和NSS模块被加载到每个应用程序进程中,它们直接影响到执行环境。由于没有缓存、脱机支持或对访问凭据的足够保护,因此不鼓励对NSS和PAM使用基本的LDAP和Kerberos模块,因为它们的功能有限。

Samba Winbind

Samba Winbind是将Linux系统连接到AD的传统方式。 Winbind在Linux系统上模拟Windows客户端,并且能够与AD服务器通信。 最新版本的系统安全服务守护进程(SSSD)弥补了Samba Winbind和SSSD之间的功能差距,现在可以使用SSSD替代Winbind。 在某些极端情况下,Winbind可能仍然需要使用,但它不再是一般的首选。

注意:

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

系统安全服务守护进程(SSSD)

SSSD的主要功能是通过一个通用框架访问远程身份和身份验证资源,该框架为系统提供缓存和脱机支持。 SSSD具有高度可配置性; 它提供PAM和NSS集成以及用于存储本地用户的数据库,以及从中央服务器检索的核心和扩展用户数据。 SSSD是将Linux系统与您选择的身份服务器连接的推荐组件,无论是Active Directory,Red Hat Enterprise Linux中的身份管理(IdM),还是任何通用LDAP或Kerberos服务器。

注意:

  • 默认情况下,与SSSD的直接集成只能在单个AD林中工作。对于多林设置,请按此知识库解决方案中所述配置手动域枚举:将SSSD加入到不同林中的域。
  • 远程林必须信任本地林,以确保idmap_ad插件正确处理远程林用户。

从Winbind过渡到SSSD的主要原因是SSSD可用于直接和间接集成,并允许从一种集成方法切换到另一种集成方法,而无需显着的迁移成本。 配置SSSD或Winbind以便直接将Linux系统与AD集成的最方便方法是使用realmd服务。 它允许调用方以标准方式配置网络身份验证和域成员身份。 realmd服务自动发现有关可访问域和域的信息,并且不需要高级配置来加入域或域。

直接集成是将Linux系统引入AD环境的简单方法。 但是,随着Linux系统份额的增长,部署通常会看到需要更好地集中管理与身份相关的策略,例如基于主机的访问控制,sudo或SELinux用户映射。 首先,可以在本地配置文件中维护Linux系统的这些方面的配置。 随着系统数量的增加,使用Red Hat Satellite等配置系统可以更轻松地分发和管理配置文件。 此方法会产生更改配置文件然后分发它们的开销。 当直接集成不再扩展时,考虑下一节中描述的间接集成更为有利。

间接集成

间接集成的主要优点是集中管理与这些系统相关的Linux系统和策略,同时使来自Active Directory(AD)域的用户能够透明地访问Linux系统和服务。 间接整合有两种不同的方法:

基于信任的解决方案

推荐的方法是利用RedHat Enterprise Linux中的身份管理(IdM)作为控制Linux系统的中心服务器,然后与AD建立跨域Kerberos信任,使AD的用户能够登录并使用单点登录来访问Linux系统和资源。此解决方案使用Kerberos功能在不同的标识源之间建立信任。IDM将自己作为一个单独的林呈现给AD,并利用AD支持的林级信任。

在复杂环境中,单个IdM林可以连接到多个AD林。 此设置可以更好地分离组织中不同功能的职责。 AD管理员可以专注于与用户相关的用户和策略,而Linux管理员可以完全控制Linux基础架构。 在这种情况下,由IdM控制的Linux域类似于AD资源域或域,但其中包含Linux系统。

注意

在Windows中,每个域同时是Kerberos域和DNS域。 域控制器管理的每个域都需要拥有自己的专用DNS区域。 当ADM将林信任为IdM时,同样适用。 AD希望IdM拥有自己的DNS域。 要使信任设置起作用,DNS域必须专用于Linux环境。

请注意,在信任环境中,IdM允许您使用ID视图为IdM服务器上的AD用户配置POSIX属性。 有关详情,请参阅:

  • 在活动目录环境中使用ID视图
  • “系统级认证指南”中的“SSSD客户端视图”

基于同步的解决方案

基于信任的解决方案的替代方案是利用用户同步功能(也可在IdM或Red Hat Directory Server(RHDS)中使用),允许用户帐户(以及RHDS也是组帐户)从AD同步到IdM或RHDS,但是 不是相反的方向。 用户同步有一定的局限性,包括:

  • 用户的重复
  • 需要同步密码,这需要AD域中所有域控制器上的特殊组件
  • 为了能够捕获密码,所有用户必须首先手动更改密码
  • 同步仅支持单个域
  • AD中只有一个域控制器可用于将数据同步到IdM或RHDS的一个实例

在一些集成场景中,用户同步可能是唯一可用的选项,但通常不鼓励使用同步方法来支持基于跨域信任的集成。

将单个LINUX系统添加到活动目录域

使用活动目录作为SSSD的身份提供程序

系统安全服务守护进程(SSSD)是一种访问远程目录和身份验证机制的系统服务。 它将本地系统(SSSD客户端)连接到外部后端系统(域)。 这为SSSD客户端提供了使用SSSD提供程序访问身份和身份验证远程服务的权限。 例如,这些远程服务包括:LDAP目录,身份管理(IdM)或Active Directory(AD)域或Kerberos域。

当将SSSD用作AD集成的身份管理服务时,其是NIS或Winbind等服务的替代方案。 本章介绍SSSD如何与AD配合使用。 有关SSSD的更多详细信息,请参阅“系统级身份验证指南”。

为SSSD配置AD提供程序

AD提供程序使SSSD能够使用LDAP身份提供程序和Kerberos身份验证提供程序,并对AD环境进行优化。

集成选项概述

Linux和Windows系统对用户和组使用不同的标识符:

  • Linux使用用户ID(UID)和组ID(GID)。 Linux UID和GID符合POSIX标准。
  • Windows使用安全ID(SID)。

对Red Hat Enterprise Linux系统进行身份验证的用户(包括AD用户)必须分配UID和GID。 为此,SSSD提供以下集成选项:

自动为AD用户生成新的UID和GID

  SSSD可以使用AD用户的SID在称为ID映射的过程中以算法方式生成POSIX ID。 ID映射在AD中的SID和Linux上的ID之间创建映射。

  • 当SSSD检测到新的AD域时,它会为新域分配一系列可用ID。因此,每个AD域在每台SSSD客户端计算机上具有相同的ID范围。
  • 当AD用户首次登录SSSD客户端计算机时,SSSD会在SSSD缓存中为用户创建一个条目,包括基于用户的SID和该域的ID范围的UID。
  • 由于AD用户的ID是从同一SID以一致的方式生成的,因此用户在登录任何Red Hat Enterprise Linux系统时具有相同的UID和GID。

请参见“将带有ID映射的AD域配置为SSSD的提供程序”。

注意

当所有客户端系统使用SSSD将SID映射到Linux ID时,映射是一致的。 如果某些客户端使用不同的软件,请选择以下选项之一:

  • 确保在所有客户端上使用相同的映射算法。
  • 使用显式POSIX属性,如在使用AD中定义的POSIX属性中所述。

使用AD中定义的POSIX属性

  AD可以创建和存储POSIX属性,例如uidNumbergidNumberunixHomeDirectoryloginShell

  使用“自动生成AD用户的新UID和GID”中描述的ID映射时,SSSD会创建新的UID和GID,这将覆盖AD中定义的值。 要保留AD定义的值,必须在SSSD中禁用ID映射。

  请参见“配置SSSD以使用AD中定义的POSIX属性”。

将具有ID映射的AD域配置为SSSD的提供程序

先决条件

确保AD系统和Linux系统都正确配置:

  • 验证配置以进行名称解析。 特别是,验证DNS SRV记录。 例如,对于名为ad.example.com的域:

    • 验证DNS SRV LDAP记录:

      # dig -t SRV _ldap._tcp.ad.example.com
      
    • 验证AD记录:

      # dig -t SRV _ldap._tcp.dc._msdcs.ad.example.com
      

    如果稍后将SSSD连接到特定的AD域控制器,则无需验证DNS SRV记录。

  • 验证两个系统上的系统时间是否同步。 这可确保Kerberos能够正常工作。

  • 在Linux系统和所有AD域控制器上双向打开所需的端口:从Linux系统到AD域控制器,然后返回。

    表1.使用SSSD将Linux系统直接集成到AD所需的端口

    服务 端口 协议 注释
    DNS 53 UDP 和TCP
    LDAP 389 UDP和TCP
    Kerberos 88 UDP和TCP
    Kerberos 464 UDP 和TCP 由kadmin用于设置和更改密码
    LDAP全局编录 3268 TCP 如果正在使用id_provider = ad选项
    NTP 123 UDP 可选
配置本地系统

Red Hat建议使用realm join命令配置系统。 请参阅“使用realmd连接到Active Directory域“”。 realmd套件自动编辑所有必需的配置文件。 例如:

# realm join ad.example.com

如果您不想使用realmd,可以手动配置系统。 请参阅Red Hat知识库中的“手动将SSSD客户端连接到Active Directory域“。

可选:配置用户主目录和shell

当用户首次登录Linux系统时,pam_oddjob_mkhomedir.so库会自动创建主目录。 默认情况下,SSSD从AD身份提供程序检索主目录的格式。 要在Linux客户端上自定义目录格式:

  1. 打开/etc/sssd/sssd.conf文件。

  2. 在[domain]部分中,使用以下选项之一:

    • fallback_homedir设置故障恢复主目录格式(仅在AD中未定义主目录时使用)

    • override_homedir设置主目录模板,该模板始终覆盖AD中定义的主目录

      例如,要始终使用格式/home/domain_name/user_name

      [domain/EXAMPLE]

      [… file truncated …]

      override_homedir = /home/%d/%u

有关详细信息,请参见sssd.conf(5)手册页

默认情况下,SSSD从AD中配置的loginShell参数中检索有关用户shell的信息。 要在Linux客户端上自定义用户shell设置:

  1. 打开/etc/sssd/sssd.conf文件。
  2. 使用以下选项定义所需的用户shell设置:
    • shell_fallback设置一个回退值(仅在AD中未定义shell时使用)。
    • override_shell设置一个始终覆盖AD中定义的shell的值。
    • default_shell设置默认的shell值。
    • allowed_shellsvetoed_shells设置允许或列入黑名单的shell列表

有关详细信息,请参见sssd.conf(5)手册页。

加载新配置
  • 更改配置文件后重启SSSD。

    # systemctl restart sssd.service
    
其它资源
  • 有关LDAP和Kerberos提供程序的其它配置选项,请参见sssd-ldap(5)和sssd-krb5(5)手册页。
  • 有关AD提供程序的其它配置选项,请参见sssd-ad(5)手册页。

配置SSSD以使用AD中定义的POSIX属性

注意

以前,Identity Management for UNIX扩展可用于向用户帐户提供POSIX属性。 该扩展程序现已弃用。 有关详细信息,请参阅Microsoft Developer Network。

如果您一直在使用Identity Management for UNIX,请参阅此知识库文章以获取常见问题的解答。

对于引用Identity Management for Unix和Services for Unix软件包的旧过程,请参阅以下Red Hat知识库文章:

  • 配置带POSIX属性的Active Directory域
  • 将Active Directory配置为LDAP域
建议

为获得最佳性能,请将POSIX属性发布到AD全局编录。 如果全局编录中不存在POSIX属性,则SSSD将直接在LDAP端口上连接到各个域控制器。

将Linux系统加入AD域

按照“将具有ID映射的AD域配置为SSSD的提供程序”中的步骤进行操作。

在SSSD中禁用ID映射
  1. 打开/etc/sssd/sssd.conf文件。

  2. 在AD域部分中,添加ldap_id_mapping = false设置。

    注意

    如果您使用realm实用程序加入域并添加了**–automatic-id-mapping = no开关,则realm实用程序已使用ldap_id_mapping = false**设置SSSD。

  3. 如果您之前请求任何具有默认ID映射配置的用户,请删除SSSD缓存:

    # rm -f /var/lib/sss/db/*
    

SSSD现在将使用AD中的POSIX属性,而不是在本地创建它们。

自动更新Kerberos主机密钥表(keytab)

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

默认的更新间隔是30天。若要更改默认设置,请执行以下操作:

  1. 在/etc/sssd/sssd.conf文件中将以下参数添加到AD提供程序:

    ad_maximum_machine_account_password_age = value_in_days
    
  2. 重启SSSD:

    # systemctl restart sssd
    

要禁用自动Kerberos主机密钥表更新,请设置
ad_maximum_machine_account_password_age = 0

启用动态DNS更新

AD允许其客户端自动刷新其DNS记录。AD还积极维护DNS记录,以确保它们得到更新,包括超时(老化)和删除(清除)非活动记录。默认情况下,AD侧不启用DNS清除功能。

SSSD允许Linux系统通过刷新其DNS记录来模拟Windows客户端,这还可以防止将其记录标记为非活动状态并从DNS记录中删除。当启用动态DNS更新时,将刷新客户端的DNS记录:

  • 当身份提供程序上线时(总是)

  • 当Linux系统重启时(总是)

  • 以指定的间隔(可选配置); 默认情况下,AD提供程序每24小时更新一次DNS记录

    可以将此行为设置为与DHCP租约相同的时间间隔。在这种情况下,在续订租约后,Linux客户端将被续订。

使用Kerberos / GSSAPI for DNS(GSS-TSIG)将DNS更新发送到AD服务器。 这意味着只需要启用安全连接。

为每个域设置动态DNS配置。 例如:

[domain/ad.example.com]
id_provider = ad
auth_provider = ad
chpass_provider = ad
access_provider = ad
ldap_schema = ad
dyndns_update = true
dyndns_refresh_interval = 43200
dyndns_update_ptr = true
dyndns_ttl = 3600

有关这些选项的详细信息,请参见sssd-ad(5)手册页。

使用SSSD进行范围检索搜索

SSSD支持AD的范围检索功能。有关范围检索搜索的详细信息,请参阅Microsoft Developer Network。

重要提示

如果您在组或搜索库中设置自定义过滤器,则过滤器可能无法与非常大的组一起使用。

组策略对象访问控制

组策略是Microsoft Windows的一项功能,它使管理员能够集中管理Active Directory(AD)环境中的用户和计算机的策略。组策略对象(GPO)是存储在域控制器(DC)上的策略设置的集合,可以应用于策略目标,如计算机和用户。与Windows登录权限相关的GPO策略设置通常用于管理AD环境中基于计算机的访问控制。

SSSD如何与GPO访问控制一起使用

配置SSSD以应用GPO访问控制时,SSSD将检索适用于主机系统和AD用户的GPO。 根据检索到的GPO配置,SSSD确定是否允许用户登录特定主机。 这使管理员能够在AD域控制器上集中定义Linux和Windows客户端都遵循的登录策略。

重要提示

安全筛选是一种功能,使您可以通过在安全筛选器中列出GPO访问控制的范围,进一步限制GPO访问控制的范围到特定用户,组或主机。 但是,SSSD仅支持安全筛选器中的用户和组。 SSSD忽略安全筛选器中的主机条目。

要确保SSSD将GPO访问控制应用于特定系统,请在AD域中创建新OU,将系统移至OU,然后将GPO链接到此OU。

SSSD支持的GPO设置

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

GPO选项[a] 相应的sssd.conf选项[b]
允许本地登录
拒绝本地登录
ad_gpo_map_interactive
允许通过远程桌面服务登录
拒绝通过远程桌面服务登录
ad_gpo_map_remote_interactive
允许从网络访问此计算机
拒绝从网络访问此计算机
ad_gpo_map_network
允许以批处理作业的形式登录
拒绝以批处理作业的形式登录
ad_gpo_map_batch
允许以服务的形式登录
拒绝以服务的形式登录
ad_gpo_map_service
[a]在Windows上的组策略管理编辑器中指定。
[b]有关这些选项以及默认情况下GPO选项映射到的可插入身份验证模块(PAM)服务列表的详细信息,请参见sssd-ad(5)手册页。
#### 为SSSD配置基于GPO的访问控制

可以在/etc/sssd/sssd.conf文件中配置基于GPO的访问控制。ad_gpo_access_control选项指定基于GPO的访问控制运行的模式.。它可以设置为以下值:

ad_gpo_access_control = permissive

  permissive值指定对基于GPO的访问控制评估但不强制执行; 每次访问被拒绝时都会记录syslog消息。 这是默认设置。

ad_gpo_access_control = enforcing

  enforcing值指定评估并强制执行基于GPO的访问控制。

ad_gpo_access_control = disabled

  disabled值指定既不评估也不强制执行基于GPO的访问控制。

重要提示

在开始使用基于GPO的访问控制并将ad_gpo_access_control设置为enforcing模式之前,建议确保将ad_gpo_access_control设置为permissive模式并检查日志。 通过查看syslog消息,您可以在最终设置enforcing模式之前根据需要测试和调整当前的GPO设置。

还可以在sssd.conf文件中指定与基于GPO的访问控制相关的以下参数:

  • ad_gpo_map_*选项和ad_gpo_default_right选项配置哪些PAM服务映射到特定的Windows登录权限。

  要将PAM服务添加到映射到特定GPO设置的默认PAM服务列表,或要从列表中删除该服务,请使用**ad_gpo_map_ ***选项。 例如,要从映射到交互式登录(GPO设置允许本地登录并拒绝本地登录)的PAM服务列表中删除su服务:

ad_gpo_map_interactive = -su
  • ad_gpo_cache_timeout选项指定后续访问控制请求可以重用存储在缓存中的文件的时间间隔,而不是从DC中重新检索这些文件。

有关可用GPO参数及其说明和默认值的详细列表,请参见sssd-ad(5)手册页。

其它资源

有关配置SSSD以使用GPO的更多详细信息,请参阅在Red Hat知识库中配置SSSD以遵守Active Directory SSH或控制台/GUI GPO。

使用SSSD自动创建用户私有组

直接集成到AD中的SSSD客户端可以为检索到的每个AD用户自动创建用户私有组,确保其GID与用户的UID匹配,除非已经采用了GID号。 为避免冲突,请确保服务器上不存在与用户UID具有相同GID的组。

GID没有存储在AD中。 这可确保AD用户从组功能中受益,而LDAP数据库不包含不必要的空组。

为AD用户激活自动创建用户私有组

要为AD用户激活自动创建用户私有组,请执行以下操作:

  1. 编辑/etc/sssd/sssd.conf文件,在[domain/LDAP]部分添加:

    auto_private_groups = true
    
  2. 重启sssd服务,删除sssd数据库:

    # service sssd stop ; rm -rf /var/lib/sss/db/* ; service sssd start
    

执行此过程后,每个AD用户都有一个与UID相同的GID:

# id ad_user1
uid=121298(ad_user1) gid=121298(ad_user1)
groups=121298(ad_user1),10000(Group1)
# id ad_user2
uid=121299(ad_user2) gid=121299(ad_user2)
groups=121299(ad_user2),10000(Group1)

为AD用户停用自动创建用户私有组

要为AD用户停用自动创建用户私有组,请执行以下操作:

  1. 编辑/etc/sssd/sssd.conf文件,在[domain/LDAP]部分添加:

    auto_private_groups = false
    
  2. 重启sssd服务,删除sssd数据库:

    # service sssd stop ; rm -rf /var/lib/sss/db/* ; service sssd start
    

执行此过程后,所有AD用户都具有相同的通用GID:

# id ad_user1
uid=121298(ad_user1) gid=10000(group1) groups=10000(Group1)
# id ad_user2
uid=121299(ad_user2) gid=10000(group1) groups=10000(Group1)

SSSD客户端和活动目录DNS站点自动发现

Active Directory林可能非常大,具有许多不同的域控制器,域和子域以及物理站点。 Active Directory使用站点的概念来标识其域控制器的物理位置。 这使客户端能够连接到地理位置最接近的域控制器,从而提高客户端性能。

默认情况下,SSSD客户端使用自动发现来查找其AD站点并连接到最近的域控制器。 该过程包括以下步骤:

  1. SSSD从AD林中的DNS服务器查询SRV记录。 返回的记录包含林中DC的名称。
  2. SSSD向每个DC发送LDAP ping。 如果DC在配置的时间间隔内没有响应,则请求超时,SSSD将LDAP ping发送到下一个。 如果连接成功,则响应包含有关SSSD客户端所属的AD站点的信息。
  3. SSSD然后从DNS服务器查询SRV记录,以定位它所属的站点中的DC,并连接到其中一个DC。

SSSD默认会记住它所属的AD站点。 通过这种方式,SSSD可以在自动发现过程中将LDAP ping直接发送到此站点中的DC,以刷新站点信息。 因此,自动发现的过程非常快,因为通常不会发生超时。

如果站点不再存在或客户端同时被分配到不同的站点,SSSD将开始查询林中的SRV记录并再次完成整个过程。

要覆盖自动发现,请使用/etc/sssd/sssd.conf文件的[domain]部分中的ad_site选项指定客户端要连接的AD站点。

其它资源

  • 有关ad_site的详细信息,请参见sssd-ad(5)手册页。
  • 有关身份管理和ActiveDirectory之间具有信任关系的环境,请参阅“将身份管理或SSSD限制到受信任的ActiveDirectory域中选定的ActiveDirectory服务器或站点”一节。

使用REALMD连接到活动目录域

realmd系统提供了一种清晰简单的方法来发现和加入身份域,以实现直接域集成。 它配置底层Linux系统服务(如SSSD或Winbind)以连接到域。

使用Active Directory作为SSSD的身份提供程序描述了如何在本地系统和Active Directory上使用系统安全服务守护程序(SSSD)作为后端身份提供程序。 确保为此正确配置系统可能是一项复杂的任务:每个可能的身份提供者和SSSD本身都有许多不同的配置参数。 此外,所有域信息必须提前可用,然后在SSSD的SSSD配置中正确格式化,以便将本地系统与AD集成。

realmd系统简化了这种配置。它可以运行发现搜索来标识可用的AD和身份管理域,然后将系统连接到该域,还可以设置所需的客户端服务,用于连接到给定的身份域和管理用户访问。此外,由于SSSD作为基础服务支持多个域,realmd还可以发现和支持多个域。

支持的域类型和客户端

realmd系统支持以下域类型:

  • Microsoft Active Directory
  • 红帽企业级Linux身份管理(IDM)

realmd支持以下域客户端:

  • 红帽企业级Linux身份管理和Microsoft Active Directory的SSSD
  • Winbind for Microsoft Active Directory

使用REALMD的前提条件

要使用realmd系统,请安装realmd软件包。

# yum install realmd

此外,请确保已安装oddjoboddjob-mkhomedirsssdadcli软件包。要使用realmd管理系统需要这些包。

如章节“发现和加入身份域”中所述,您只需使用realmd找出要安装的软件包。

REALMD命令

realmd系统有两个主要任务区:

  • 管理域中的系统注册
  • 设置允许哪些域用户访问本地系统资源

realmd中的中心实用程序称为realm。 大多数realm命令要求用户指定实用程序应执行的操作,以及要为其执行操作的实体(如域或用户帐户):

realm command arguments

例如:

realm join ad.example.com
realm permit user_name

表3.1 realmd命令

命令 描述
realm命令
discover 对网络上的域运行发现扫描。
join 将系统添加到指定的域。
leave 从指定的域中删除系统。
list 列出系统的所有已配置域或所有已发现和配置的域。
登录命令
permit 为指定用户或已配置域中的所有用户启用访问权限以访问本地系统。
deny 限制指定用户或配置域中的所有用户访问本地系统的访问权限。

有关realm命令的更多信息,请参见realm(8)手册页。

发现和加入身份域

realm discover命令返回完整的域配置和要在域中注册的系统必须安装的软件包列表。

然后,realm join命令通过配置本地系统服务和身份域中的条目来设置本地计算机以用于指定的域。 由realm join运行的进程遵循以下步骤:

  1. 为指定的域运行发现扫描。

  2. 自动安装将系统加入域所需的软件包。

    这包括SSSD和PAM home directory job包。 请注意,自动安装软件包需要运行PackageKit套件。

    如果PackageKit被禁用,系统会提示您输入缺少的软件包,并且需要使用yum实用程序手动安装它们。

  3. 通过在目录中为系统创建帐户条目来加入域。

  4. 创建/etc/krb5.keytab主机密钥表文件。

  5. 在SSSD中配置域并重启服务。

  6. 在PAM配置和/etc/nsswitch.conf文件中为系统服务启用域用户。

发现域

在没有任何选项的情况下运行时,realm discover命令显示有关默认DNS域的信息,该域是通过动态主机配置协议(DHCP)分配的域:

# realm discover
ad.example.com
  type: kerberos
  realm-name: AD.EXAMPLE.COM
  domain-name: ad.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

也可以为特定域运行发现。 为此,请运行realm discover并添加要发现的域的名称:

# realm discover ad.example.com

然后,realmd系统将使用DNS SRV查寻自动查找此域中的域控制器。

realm discover命令需要NetworkManager运行; 特别是,它取决于NetworkManager的D-Bus接口。 如果您的系统不使用NetworkManager,请始终在realm discover命令中指定域名。

realmd系统可以发现Active Directory和Identity Management域。 如果您的环境中存在这两个域,则可以使用**–server-software**选项将发现结果限制为特定类型的服务器。 例如:

# realm discover --server-software=active-directory

发现搜索中返回的属性之一是login-policy,它显示了在连接完成后是否允许域用户登录。 如果默认情况下不允许登录,则可以使用realm permit命令手动允许登录。 有关详细信息,请参见“管理域用户的登录权限”部分。

有关realm discover命令的更多信息,请参见realm(8)手册页。

加入域

要将系统加入身份域,请使用realm join命令并指定域名:

# realm join ad.example.com
realm: Joined ad.example.com domain

默认情况下,连接以域管理员身份执行。 对于AD,管理员帐户称为Administrator; 对于IdM,它被称为admin。 要以其它用户身份连接,请使用-U选项:

# realm join ad.example.com -U user

该命令首先尝试在没有凭据的情况下进行连接,但如果需要,它会提示输入密码。

如果在Linux系统上正确配置了Kerberos,则还可以使用Kerberos票证进行连接以进行身份验证。 要选择Kerberos主体,请使用-U选项。

# kinit user
# realm join ad.example.com -U user

realm join命令接受其它几个配置选项。 有关realm join命令的更多信息,请参见realm(8)手册页。

示例3.1 将系统注册到域中的示例过程

  1. 运行realm discover命令以显示有关域的信息。

    # realm discover ad.example.com
    ad.example.com
    type: kerberos
    realm-name: AD.EXAMPLE.COM
    domain-name: ad.example.com
    configured: no
    server-software: active-directory
    client-software: sssd
    
  2. 运行realm join命令,并将域名传递给命令。 如果系统提示,请提供管理员密码。

    # realm join ad.example.com
    Password for Administrator: password
    

请注意,在发现或加入域时,realmd会检查DNS SRV记录:

  • _ldap._tcp.domain.example.com. 用于身份管理记录(IDM)
  • _ldap._tcp.dc._msdcs.domain.example.com. 用于Active Directory记录

加入域后测试系统配置

要测试系统是否已成功注册到域,请验证您是否可以从域中以用户身份登录并正确显示用户信息:

  1. 执行id user@domain_name命令,显示域中用户的信息。

    # id [email protected]
    uid=1348601103([email protected]) gid=1348600513(domain
    [email protected]) groups=1348600513(domain [email protected])
    
  2. 使用ssh实用程序,以同一用户身份登录。

    # ssh -l [email protected] linux-client.ad.example.com
    [email protected]@linux-client.ad.example.com's password:
    Creating home directory for [email protected]
    
  3. 验证pwd实用程序是否打印用户的主目录。

    $ pwd
    /home/ad.example.com/user
    
  4. 验证id实用程序是否打印出与第一步中的id user@domain_name命令相同的信息。

    $ id
    uid=1348601103([email protected]) gid=1348600513(domain
    [email protected]) groups=1348600513(domain [email protected])
    context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
    

在测试域加入是否成功时,kinit实用程序也很有用。 请注意,要使用该实用程序,必须安装krb5-workstation软件包。

从身份域中删除系统

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

# realm leave ad.example.com

默认情况下,删除作为默认管理员执行。 对于AD,管理员帐户称为Administrator;对于IdM,它被称为admin。 如果使用其它用户加入域,则可能需要以该用户身份执行删除。 要指定其他用户,请使用-U选项:

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

该命令首先尝试在没有凭据的情况下进行连接,但如果需要,它会提示输入密码。

请注意,当客户端离开域时,不会从目录中删除计算机帐户; 仅删除本地客户端配置。 如果要删除计算机帐户,请运行指定了–remove选项的命令。

有关realm leave命令的更多信息,请参见realm(8)手册页。

列出域

realm list命令列出系统的每个已配置域,以及该域的完整详细信息和默认配置。 这与realm discovery命令返回的信息相同,仅适用于已在系统配置中的域。

# realm list --all --name-only
ad.example.com

realm list接受的最值得注意的选项是:

–all

  –all选项列出所有已发现的域,包括已配置和未配置的域。

–name-only

  –name-only选项将结果限制为域名,不显示域配置详细信息。

有关realm list命令的更多信息,请参见realm(8)手册页。

管理域用户的登录权限

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

如果域应用客户端访问控制,则可以使用realmd系统为该域中的用户配置基本允许或拒绝访问规则。 请注意,这些访问规则允许或拒绝访问系统上的所有服务。 必须在特定系统资源或域中设置更具体的访问规则。

要设置访问规则,请使用以下两个命令:

realm deny

  realm deny命令简单地拒绝域内所有用户的访问。将此命令与–all选项一起使用。

realm permit

  realm permit命令可用于:

  • 使用**–all**选项允许所有用户访问,例如:

    $ realm permit --all
    
  • 允许指定用户访问,例如:

    $ realm permit [email protected]
    $ realm permit 'AD.EXAMPLE.COM\user'
    
  • 使用-x选项禁止指定用户访问,例如:

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

请注意,当前允许访问仅适用于主域中的用户,而不适用于受信任域中的用户。 这是因为虽然用户登录必须包含域名,但SSSD当前无法为realmd提供有关可用子域的信息。

重要提示

仅允许特定选定的用户或组访问比拒绝某些用户或组访问更安全,同时将其启用给其他人。 因此,建议不要在默认情况下允许全部访问,同时仅拒绝具有realm permit -x的指定用户。 相反,Red Hat建议为所有用户维护默认的无访问策略,并仅使用**realm permit **授予对所选用户的访问权限。

有关realm denyrealm permit命令的更多信息,请参见realm(8)手册页。

更改默认用户配置

realmd系统支持修改默认用户主目录和shell POSIX属性。例如,当在Windows用户帐户中未设置某些POSIX属性或这些属性与本地系统上其他用户的POSIX属性不同时,可能需要这样做。

重要提示

如果尚未运行realm join命令,则仅按本节所述更改配置。 如果系统已加入,请更改**/etc/sssd/sssd.conf**文件中的默认主目录和shell,如“可选:配置用户主目录和shell”一节中所述。

要覆盖默认主目录和shell POSIX属性,请在**/etc/realmd.conf文件的[users]**部分中指定以下选项:

default-home

  default-home选项设置模板,用于为未明确设置主目录的帐户创建主目录。 常见的格式是/home/%d/%u,其中%d是域名,%u是用户名。

default-shell

  default-shell选项定义默认用户shell。 它接受任何受支持的系统shell。

例如:

[users]
default-home = /home/%u
default-shell = /bin/bash

有关这些选项的更多信息,请参见realmd.conf(5)手册页。

活动目录域条目的附加配置

可以在/etc/realmd.conf文件中定义每个域的自定义设置。 每个域都可以有自己的配置部分; 该部分的名称必须与域名匹配。例如:

[ad.example.com]
attribute = value
attribute = value

重要提示

如果尚未运行realm join命令,则仅按本节所述更改配置。 如果系统已加入,则更改这些设置不会产生任何影响。 在这种情况下,您必须离开域,如章节“从身份域中删除系统”中所述,然后再次加入,如“加入域”一节中所述。 请注意,加入需要域管理员的凭据。

要更改域的配置,请编辑/etc/realmd.conf中的相应部分。 以下示例禁用ad.example.com域的ID映射,设置主机主体,并将系统添加到指定的子树:

[ad.example.com]
computer-ou = ou=Linux Computers,DC=domain,DC=example,DC=com
user-principal = host/[email protected]
automatic-id-mapping = no

请注意,最初使用realm join命令将系统加入域时也可以设置相同的配置,如“加入域”一节中所述:

# realm join --computer-ou="ou=Linux Computers,dc=domain,dc=com" --
automatic-id-mapping=no --user-principal=host/[email protected]

表3.2“Realm配置选项”列出了可以在/etc/realmd.conf的域默认部分中设置的最值得注意的选项。 有关可用配置选项的完整信息,请参见realmd.conf(5)手册页。

表3.2 Realm配置选项

选项 描述
computer-ou 设置将计算机帐户添加到域的目录位置。 相对于根条目,这可以是完整DN或RDN。 子树必须已经存在。
user-principal 将计算机帐户的userPrincipalName属性值设置为提供的Kerberos主体。
automatic-id-mapping 设置是否启用动态ID映射或禁用映射并使用在Active Directory中配置的POSIX属性。

使用Samba进行Active Directory集成

Samba在Red Hat Enterprise Linux中实现了服务器消息块(SMB)协议。 SMB协议用于访问服务器上的资源,例如文件共享和共享打印机。

您可以使用Samba将Active Directory(AD)域用户身份验证到域控制器(DC)。 此外,您可以使用Samba将打印机和本地目录共享给网络中的其它SMB客户端。

使用winbindd验证域用户

Samba的winbindd服务为名称服务交换(NSS)提供了接口,并使域用户能够在登录到本地系统时对AD进行身份验证。

使用winbindd提供的好处是,您可以增强配置以共享目录和打印机,而无需安装其他软件。 有关更多详细信息,请参阅“Red Hat系统管理员指南”中有关Samba的部分。

加入AD域

如果要加入AD域并使用Winbind服务,请使用realm join --client-software = winbind domain_name命令。 realm实用程序会自动更新配置文件,例如Samba,Kerberos和PAM的配置文件。

有关更多详细信息和示例,请参阅“Red Hat系统管理员指南”中的“将Samba设置为域成员”部分。

使用SSSD和WINBIND的SMB共享

本节介绍如何使用SSSD客户端访问和完全使用基于服务器消息块(SMB)协议(也称为通用Internet文件系统(CIFS)协议)的共享。

在Red Hat Enterprise Linux 7.1之前,只有Winbind提供了此功能。 在Red Hat Enterprise Linux 7.1及更高版本中,您不再需要并行运行Winbind和SSSD来访问SMB共享。 例如,访问访问控制列表(ACL)不再需要SSSD客户端上的Winbind。

重要提示

SSSD不支持Winbind提供的所有服务。 例如,SSSD不支持使用NT LAN Manager(NTLM)或NetBIOS名称查找进行身份验证。如果需要这些服务,请使用Winbind。 请注意,在身份管理域中,Kerberos身份验证和DNS名称查找可用于相同目的。SSSD不支持Winbind提供的所有服务。 例如,SSSD不支持使用NT LAN Manager(NTLM)或NetBIOS名称查找进行身份验证。如果需要这些服务,请使用Winbind。 请注意,在身份管理(IDM)域中,Kerberos身份验证和DNS名称查找可用于相同目的。

SSSD如何与SMB配合使用

SMB文件共享协议广泛用于Windows机器上。 在具有Identity Management和Active Directory之间信任的Red Hat Enterprise Linux环境中,SSSD可以无缝使用SMB,就好像它是标准的Linux文件系统一样。

要访问SMB共享,系统必须能够将Windows SID转换为Linux POSIX UID和GID。 SSSD客户端使用SID-to-ID或SID-to-name算法,该算法启用此ID映射。

确定是使用SSSD还是Winbind进行SMB共享

对于大多数SSSD客户端,建议使用SSSD:

  • 默认情况下,Identity Management客户端使用SSSD将Active Directory用户映射到UNIX用户。使用Winbind进行SMB ID映射而不是SSSD可能导致映射不一致。
  • 在具有直接Active Directory集成的环境中,客户端使用SSSD进行常规Active Directory用户映射,使用Winbind进行SMB ID映射而不是SSSD可能导致映射不一致。

SSSD不支持Winbind提供的所有服务。 例如,SSSD不支持使用NT LAN Manager(NTLM)或NetBIOS名称查找进行身份验证。如果需要这些服务,请使用Winbind。 请注意,在身份管理域中,Kerberos身份验证和DNS名称查找可用于相同目的。

从SSSD客户端访问SMB共享

您可以从属于Samba域的所有SSSD客户端访问SMB共享。

要验证系统是否使用SSSD访问SMB共享,请使用alternative实用程序。 该实用程序显示当前使用的库。 在以下示例中,系统使用SSSD库:

# alternatives --list | grep -E cifs\|libwbclient
cifs-idmap-plugin auto /usr/lib64/cifs-utils/cifs_idmap_sss.so
libwbclient.so.0.11-64 auto /usr/lib64/sssd/modules/libwbclient.so.0.11.0

在SSSD和Winbind之间切换以进行SMB共享访问

此过程描述如何在用于从SSSD客户端访问SMB共享的SSSD和Winbind插件之间切换。 要使Winbind能够访问SMB共享,您需要在客户端上安装cifs-utils软件包。 要确保您的计算机上安装了cifs-utils

$ rpm -q cifs-utils
  1. 可选的。 了解您当前是否正在使用SSSD或Winbind从SSSD客户端访问SMB共享:

    # alternatives --display cifs-idmap-plugin
    cifs-idmap-plugin - status is auto.
    link currently points to /usr/lib/cifs-utils/cifs_idmap_sss.so
    /usr/lib/cifs-utils/cifs_idmap_sss.so - priority 20
    /usr/lib/cifs-utils/idmapwb.so - priority 10
    Current `best' version is /usr/lib/cifs-utils/cifs_idmap_sss.so.
    

    如果安装了SSSD插件(cifs_idmap_sss.so),则默认情况下它的优先级高于Winbind插件(idmapwb.so)。

  2. 在切换到Winbind插件之前,请确保Winbind在系统上运行:

    # systemctl is-active winbind.service
    active
    

    在切换到SSSD插件之前,请确保SSSD正在系统上运行:

    # systemctl is-active sssd.service
    active
    
  3. 要切换到其它插件,请使用alternatives --set cifs-idmap-plugin命令,并指定所需插件的路径。 例如,要切换到Winbind:

    # alternatives --set cifs-idmap-plugin /usr/lib/cifs-
    utils/idmapwb.so
    

配置SSSD客户端以在不使用Winbind的情况下运行Samba服务器

如果在您的环境中运行Red Hat Identity Management(IdM)和Samba,则可以将Samba服务器配置为使用Kerberos对连接到共享的IdM用户进行身份验证。

重要提示

IdM不提供全局编录。 因此,IdM仅允许存储在IdM域中的用户对Samba服务器进行身份验证。 不支持在此配置中从Windows客户端访问Samba共享。

前提条件

在IdM主服务器上,运行ipa-adtrust-install以配置主服务器以管理特定于Samba的对象类和属性。 有关详细信息,请参见“为信任准备IdM服务器”一节。

设置Samba以将用户身份验证到IdM域

要设置一个新的Samba服务器来验证用户到IdM域的身份,请执行以下操作:

  1. 为IdM安装所需的包并将客户端加入域。 有关详细信息,请参阅“Red Hat Linux域身份,身份验证和策略指南”中的相应部分。

  2. 安装Samba服务器和sssd-libwbclient包:

    # yum install samba sssd-libwbclient
    

    sssd-libwbclient包提供了libwbclient.so库。 此库是Winbind服务使用的libwbclient包提供的库的系统安全服务守护程序(SSSD)的替代品。

  3. 为Samba服务器创建cifs Kerberos主体。 例如:

    # ipa service-add cifs/samba_server.idm.example.com
    
  4. 检索cifs主体的Kerberos keytab,并将其存储在/etc/samba/samba.keytab文件中:

    # ipa-getkeytab -p cifs/samba_server.idm.example.com -k
    /etc/samba/samba.keytab
    
  5. 在/etc/samba/smb.conf文件的[global]部分中设置以下参数:

    workgroup = IDM
    realm = IDM.EXAMPLE.COM
    security = ads
    dedicated keytab file = FILE:/etc/samba/samba.keytab
    kerberos method = dedicated keytab
    
  6. 设置文件和打印机共享。 有关详细信息,请参阅“Red Hat系统管理员指南”中的以下部分:

    • 在Samba服务器上配置文件共享
    • 设置Samba打印服务器
  7. 验证/etc/samba/smb.conf文件:

    # testparm
    

    如果testparm实用程序未返回任何错误,则配置有效。

  8. 打开所需的端口并使用firewall-cmd实用程序重新加载防火墙配置:

    # firewall-cmd --permanent --add-service=samba
    # firewall-cmd --reload
    
  9. 启动smb服务:

    # systemctl start smb
    
  10. (可选)配置smb服务在系统引导时自动启动:

    # systemctl enable smb
    
  11. 验证sssd服务是否已启用并正在运行:

    # systemctl status sssd
    
  12. 验证winbind服务是否已启用并正在运行:

    # systemctl status winbind
    
验证IdM用户是否可以向Samba进行身份验证

要进行验证,请列出Samba服务器提供的共享。 例如:

  1. 安装samba-client软件包:

    # yum install samba-client
    
  2. 对Kerberos进行身份验证:

    # kinit user_name
    
  3. 列出共享:

    # smbclient -k -U user_name -L samba_server.idm.example.com
    
其它资源

有关Samba的更多详细信息,请参阅“Red Hat系统管理员指南”中的相应部分。

其它资源

有关Samba的详细信息,请参阅“Red Hat系统管理员指南”中的相应部分。

你可能感兴趣的:(红帽企业级Linux 7和 Windows集成指南)