7 Active Directory 支持 #
Active Directory* (AD) 是一项基于 LDAP、Kerberos 和其他服务的目录服务。Microsoft* Windows* 使用它来管理资源、服务和人员。在 Microsoft Windows 网络中,Active Directory 会提供有关这些对象的信息,限制对其的访问,并强制执行策略。SUSE® Linux Enterprise Server 可让您加入现有的 Active Directory 域,并将您的 Linux 计算机集成到 Windows 环境中。
7.1 集成 Linux 和 Active Directory 环境 #
使用已加入现有 Active Directory 域的 Linux 客户端(配置为 Active Directory 客户端),可以受益于纯粹的 SUSE Linux Enterprise Server Linux 客户端所不能提供的各种功能:
- 使用 SMB 浏览共享文件和目录
GNOME Files(以前称为 Nautilus)支持通过 SMB 浏览共享资源。
- 使用 SMB 共享文件和目录
GNOME Files 支持如同在 Windows 中那样共享目录和文件。
- 访问并操作 Windows 服务器上的用户数据
通过 GNOME Files,用户可以访问其 Windows 用户数据,并可以在 Windows 服务器上编辑、创建和删除文件与目录。用户无需多次输入其口令便能访问其数据。
- 脱机身份验证
即使用户脱机或者 Active Directory 服务器出于其他原因而无法使用,用户也仍可在 Linux 计算机上登录并访问其本地数据。
- Windows 口令更改
Linux 中的此 Active Directory 支持端口强制执行存储在 Active Directory 中的公司口令策略。显示管理器和控制台支持口令更改消息并接受您的输入。甚至可以使用 Linux
passwd
命令设置 Windows 口令。- 通过 Kerberos 化应用程序进行单点登录
许多桌面应用程序都支持 Kerberos(Kerberos 化),这意味着它们可以透明地为用户处理身份验证,而无需在 Web 服务器、代理、群件应用程序或其他位置重新输入口令。
在 Windows Server 2016 和更高版本中,Microsoft 去除了 IDMU/NIS 服务器角色,并一并去除了 Active Directory 用户和计算机 MMC 管理单元的 Unix 属性插件。
但是,如果在 Active Directory 用户和计算机 MMC 管理单元中启用了 ,则仍可以手动管理 Unix 属性。有关详细信息,请参见https://blogs.technet.microsoft.com/activedirectoryua/2016/02/09/identity-management-for-unix-idmu-is-deprecated-in-windows-server/。
或者,可以使用过程 7.1 “使用中所述的方法在客户端完成属性设置(具体而言,请参见 加入 Active Directory 域”步骤 6.c)。
下一节包含前面所述大多数功能的技术背景。
7.2 有关 Linux Active Directory 支持的背景信息 #
许多系统组件需要无故障交互,以便将 Linux 客户端集成到现有的 Windows Active Directory 域。以下几节重点讲述 Active Directory 服务器和客户端交互中关键事件的底层进程。
为了与目录服务进行通信,客户端至少需要与服务器共享两个协议。
- LDAP
LDAP 是一种为管理目录信息而优化的协议。具有 Active Directory 的 Windows 域控制器可以使用 LDAP 协议来与客户端交换目录信息。要了解有关 LDAP 的详细信息,请参见第 5 章 “使用 389 Directory Server 的 LDAP”。
- Kerberos
Kerberos 是可信的第三方身份验证服务。其所有客户端均信任 Kerberos 对另一个客户端的身份授权,从而支持 Kerberos 化单点登录 (SSO) 解决方案。Windows 支持 Kerberos 实施,因此即使是 Linux 客户端也可以使用 Kerberos SSO。有关 Linux 中 Kerberos 的详细信息,请参阅第 6 章 “使用 Kerberos 进行网络身份验证”。
根据您要使用哪个 YaST 模块设置 Kerberos 身份验证,将由不同的客户端组件处理帐户和身份验证数据:
- 基于 SSSD 的解决方案
sssd
守护程序是此解决方案的核心部分。它处理与 Active Directory 服务器之间的所有通讯。要收集名称服务信息,可使用
sssd_nss
。要对用户进行身份验证,可使用 PAM 的
pam_sss
模块。Linux 客户端上 Active Directory 用户的用户主目录创建由pam_mkhomedir
处理。有关 PAM 的详细信息,请参见第 2 章 “通过 PAM 进行身份验证”。
- 基于 Winbind (Samba) 的解决方案
winbindd
守护程序是此解决方案的核心部分。它处理与 Active Directory 服务器之间的所有通讯。要收集名称服务信息,可使用
nss_winbind
。要对用户进行身份验证,可使用 PAM 的
pam_winbind
模块。Linux 客户端上 Active Directory 用户的用户主目录创建由pam_mkhomedir
处理。有关 PAM 的详细信息,请参见第 2 章 “通过 PAM 进行身份验证”。
图 7.1 “基于 Winbind 的 Active Directory 身份验证的纲要”突出显示了基于 Winbind 的 Active Directory 身份验证的最重要组件。
图 7.1︰ 基于 Winbind 的 Active Directory 身份验证的纲要 #
可感知 PAM 的应用程序(如登录例程和 GNOME 显示管理器)会与 PAM 及 NSS 层交互,以便对 Windows 服务器进行身份验证。支持 Kerberos 身份验证的应用程序(如文件管理器、网页浏览器或电子邮件客户端)使用 Kerberos 身份凭证缓存来访问用户的 Kerberos 票据,因此是 SSO 框架的组成部分。
7.2.1 域加入 #
在域加入过程中,服务器和客户端确立安全关系。在客户端上,需要执行以下任务来加入 Windows 域控制器提供的现有 LDAP 和 Kerberos SSO 环境。整个加入过程由 YaST 域成员资格模块来处理,该模块可以在安装过程中运行或在已安装系统中运行:
找到了提供 LDAP 和 KDC(密钥发布中心)服务的 Windows 域控制器。
加入客户端的计算机帐户是在目录服务中创建的。
客户端的初始票据授予票据 (TGT) 已经获得并存储于其本地 Kerberos 身份凭证缓存。客户端需要此 TGT 来获得进一步的票据,使其可以联系其他服务,如联系目录服务器进行 LDAP 查询。
NSS 和 PAM 配置要进行调整,使客户端能对域控制器进行身份验证。
客户端引导过程中,将启动 winbind 守护程序并检索计算机帐户的初始 Kerberos 票据。winbindd 自动刷新计算机票据以保持其有效。为了跟踪当前的帐户策略,winbindd 定期查询域控制器。
7.2.2 域登录和用户主目录 #
GNOME 的登录管理器 (GDM) 已经过扩展,允许处理 Active Directory 域登录。用户可以选择登录其计算机已加入的主域或主域的域控制器已经与之确立信任关系的可信域之一。
如第 7.2 节 “有关 Linux Active Directory 支持的背景信息”中所述,用户身份验证由多个 PAM 模块调解。如果出现错误,错误代码将转换为用户易于理解的错误消息,这些消息是 PAM 通过任意支持的方法(GDM、控制台和 SSH)在登录时提供的:
Password has expired
用户看到一条消息,说明口令已经失效,需要更改。系统会提示输入新口令,并在新口令不符合公司口令策略(例如口令太短、太简单或已用过)时告知用户。如果用户的口令更改失败,会显示原因,提示输入新口令。
Account disabled
用户会看到一条错误消息,告知其帐户已禁用,需与系统管理员联系。
Account locked out
用户会看到一条错误消息,告知其帐户已锁定,需与系统管理员联系。
Password has to be changed
用户可以登录,但会收到警告说口令很快就必须更改了。该警告会在口令失效前三天发出。失效后,用户便无法登录。
Invalid workstation
如果仅允许用户登录特定的工作站,而当前 SUSE Linux Enterprise Server 计算机并不在此列,则会出现一条消息,告知此用户无法从此工作站登录。
Invalid logon hours
如果仅允许用户在工作时间登录,当该用户尝试在非工作时间登录时,会出现一条消息,告知用户在此时间无法登录。
Account expired
管理员可为特定用户帐户设置失效时间。如果该用户尝试在失效后登录,将会看到一条消息,告知其帐户已失效,不能用于登录。
在成功的身份验证期间,客户端从 Active Directory 的 Kerberos 服务器中获得票据授权票据 (TGT) 并将其存储在用户的身份凭证缓存中。它还可以在后台续订 TGT,而无需用户的交互。
SUSE Linux Enterprise Server 对 Active Directory 用户提供本地主目录支持。如果按第 7.3 节 “为 Active Directory 配置 Linux 客户端”中所述通过 YaST 进行了配置,当 Windows/Active Directory 用户首次登录到 Linux 客户端时,系统会创建用户主目录。这些主目录的外观与标准的 Linux 用户主目录相同,可独立于 Active Directory 域控制器工作。
使用本地用户主目录可以访问此计算机上的用户数据(即使 Active Directory 服务器断开连接),前提是 Linux 客户端已配置为执行脱机身份验证。
7.2.3 办公服务和策略支持 #
公司环境中的用户必须能够成为漫游用户(例如,切换网络,甚至在断开连接的情况下工作一段时间)。为使用户能够登录断开连接的计算机,已经将大量的缓存集成到 winbind 守护程序。winbind 守护程序即使在脱机状态下都可强制实施口令策略。它跟踪失败的登录尝试次数并根据 Active Directory 中配置的策略做出反应。脱机支持默认处于禁用状态,必须在 YaST 域成员资格模块中显式启用。
当域控制器变成不可用状态时,用户仍可使用断开连接之前获得的有效 Kerberos 票据访问网络资源(不包括 Active Directory 服务器本身),这与在 Windows 中一样。域控制器联机时才能处理口令更改。与 Active Directory 服务器断开连接时,用户无法访问存储在此服务器上的任何数据。当工作站与网络完全断开连接并于稍后再次连接到公司网络时,SUSE Linux Enterprise Server 会在用户锁定再解锁桌面(例如使用桌面屏幕保护程序)时获得新的 Kerberos 票据。
7.3 为 Active Directory 配置 Linux 客户端 #
在客户端加入 Active Directory 域之前,需要对网络设置进行调整以确保客户端和服务器的正常交互。
- DNS
将您的客户端计算机配置为使用可将 DNS 请求转发到 Active Directory DNS 服务器的 DNS 服务器。或者,将您的计算机配置为使用 Active Directory DNS 服务器作为名称服务数据源。
- NTP
要成功进行 Kerberos 身份验证,必须准确设置客户端的时间。为此,强烈建议使用中心 NTP 时间服务器(这也可以是 Active Directory 域控制器上运行的 NTP 服务器)。如果您的 Linux 主机和域控制器之间的时钟偏差超过特定限制,Kerberos 身份验证将会失败,客户端将使用较弱的 NTLM(NT LAN 管理器)身份验证登录。有关使用 Active Directory 进行时间同步的更多细节,请参见过程 7.2 “使用 。 加入 Active Directory 域”
- 防火墙
要浏览您的网上邻居,请完全禁用防火墙,或将用于浏览的接口标记为内部区域的一部分。
要更改客户端上的防火墙设置,请以
root
身份登录并启动 YaST 防火墙模块。选择 。从接口列表选择网络接口并单击 。选择 并单击 应用您的设置。单击 › 退出防火墙设置。要禁用防火墙,请选中 选项,然后单击 › 退出防火墙模块。- Active Directory 帐户
除非 Active Directory 管理员为您提供了对 Active Directory 域有效的用户帐户,否则您无法登录到该域。在您的 Linux 客户端上使用 Active Directory 用户名和口令登录到 Active Directory 域。
7.3.1 选择用于连接 Active Directory 的 YaST 模块 #
YaST 包含多个可连接 Active Directory 的模块:
将身份服务(通常为 LDAP)和用户身份验证服务(通常为 Kerberos)结合使用。此选项基于 SSSD,在大多数情况下最适合用于加入 Active Directory 域。 :
第 7.3.2 节 “使用中介绍了此模块。 加入 Active Directory”
加入 Active Directory(需要使用 Kerberos 和 LDAP)。此选项基于 :
winbind
,最适合用于加入 Active Directory 域(如果必须提供 NTLM 或跨林信任支持)。第 7.3.3 节 “使用 中介绍了此模块。 加入 Active Directory”
7.3.2 使用 加入 Active Directory #
YaST 模块
支持在 Active Directory 上进行身份验证。此外,它还支持以下相关身份验证和标识提供程序:- 标识提供程序
通过代理提供传统 NSS 提供程序支持。 :
FreeIPA 和 Red Hat Enterprise 身份管理提供程序。 :
一个 LDAP 提供程序。有关配置 LDAP 的详细信息,请参见 :
man 5 sssd-ldap
。面向本地用户的 SSSD 内部提供程序。 :
- 身份验证提供程序
通过代理将身份验证中继到另一个 PAM 目标。 :
FreeIPA 和 Red Hat Enterprise 身份管理提供程序。 :
一个 LDAP 提供程序。 :
Kerberos 身份验证. :
面向本地用户的 SSSD 内部提供程序。 :
显式禁用身份验证。 :
要使用 SSSD 以及 YaST 的
模块加入 Active Directory 域,请执行以下操作:打开 YaST。
如果希望以后能够使用 DNS 自动发现,请将 Active Directory 域控制器(Active Directory 服务器)设置为客户端的名称服务器。
在 YaST 中单击
。选择
,然后在 文本框中输入 Active Directory 域控制器的 IP 地址。单击
保存设置。
在 YaST 主窗口中,启动
模块。该模块随即打开,其中的概述显示了您计算机的不同网络属性,以及当前使用的身份验证方法。
图 7.2︰ 的主窗口 #要开始编辑,请单击
。现在加入该域。
单击
。在出现的对话框中,指定正确的
。然后指定用于处理身份数据和身份验证的服务:为两者均选择 。确保已选中
。单击
。(可选) 在下一个对话框中,可以保留默认设置。不过,在以下情况下将需要做出更改:
如果本地主机名与域控制器上设置的主机名不匹配: 确定您计算机的主机名是否与 Active Directory 域控制器所获悉的计算机名称相匹配。在终端中运行
hostname
命令,然后将其输出与 Active Directory 域控制器的配置进行比较。如果值不相同,请在
下指定 Active Directory 配置中的主机名。否则,请将相应的文本框留空。如果您不想使用 DNS 自动发现: 指定您要使用的 。如果有多个域控制器,请以逗号分隔其主机名。
要继续操作,请单击
。如果尚未安装所有软件,计算机现在将安装缺少的软件。然后,它会检查配置的 Active Directory 域控制器是否可用。
如果一切正常,下一个对话框现在应会显示它已发现一个
,但您 。在对话框中,指定 Active Directory 管理员帐户(通常为
Administrator
)的 和 。为了确保为 Samba 启用当前域,请选中
。要进行注册,请单击
。图 7.3︰ 注册到域中 #现在,您应该会看到一条确认您已成功注册的消息。单击
完成注册。
注册后,使用
窗口配置客户端。图 7.4︰ 的配置窗口 #要允许使用 Active Directory 提供的登录数据登录到计算机,请选中
。(可选) (可选)在 下,激活其他数据源,例如,有关允许哪些用户使用
sudo
或哪些网络驱动器可用的信息。要允许为 Active Directory 用户创建主目录,请选中
。可通过多种方式设置主目录的路径 — 在客户端上、在服务器上,或将两种方式结合使用:要在域控制器上配置主目录路径,请为每个用户的
UnixHomeDirectory
属性设置相应的值。此外,请确保将此属性复制到全局目录。有关在 Windows 中存档该内容的信息,请参见 https://support.microsoft.com/en-us/kb/248717。要在客户端上配置主目录路径并指定域控制器上设置的路径具有优先权,请使用选项
fallback_homedir
。要在客户端上配置主目录路径并指定客户端设置将覆盖服务器设置,请使用
override_homedir
。
由于域控制器上的设置超出了本文档的范畴,下面仅介绍客户端选项的配置。
在侧边栏中选择
› ,然后单击 。在该窗口中选择fallback_homedir
或override_homedir
,然后单击 。指定一个值。要使主目录遵循格式
/home/USER_NAME
,请使用/home/%u
。有关可能变量的详细信息,请参见手册页sssd.conf
(man 5 sssd.conf
) 的 override_homedir 部分。单击
。
单击“确定”
确保现在显示的值正确无误。要退出对话框,请单击 。
7.3.3 使用 加入 Active Directory #
要使用 winbind
以及 YaST 的 模块加入 Active Directory 域,请执行以下操作:
作为
root
登录并启动 YaST。启动
› 。在 图 7.5 “确定 Windows 域成员资格”)。如果您主机上的 DNS 设置与 Windows DNS 服务器正确集成,请以 DNS 格式 (
屏幕中的 ,输入域以加入(请参见mydomain.mycompany.com
) 输入 Active Directory 域名。如果您输入简短域名(也称为 Windows 2000 之前的域名),YaST 必须依赖 NetBIOS 名称解析(而不是 DNS)来查找正确的域控制器。图 7.5︰ 确定 Windows 域成员资格 #要将 SMB 源用于 Linux 身份验证,请选中
。要自动为 Linux 计算机上的 Active Directory 用户创建本地主目录,请选中
。选中
,让域用户即使在 Active Directory 服务器暂时不可用或者无网络连接的情况下也能够登录。要更改 Samba 用户和组的 UID 与 GID 范围,请选择
。仅在需要时让 DHCP 检索 WINS 服务器。当某些计算机仅通过 WINS 系统解析时,就需要这么做。选择
并输入相应的服务器名称或 IP 地址,来为 Active Directory 环境配置 NTP 时间同步。如果您已在独立的 YaST NTP 配置模块中输入了相应的设置,则不需要执行此步骤。单击
并在提示时确认域连接。在 Active Directory 服务器上提供 Windows 管理员的口令并单击图 7.6 “提供管理员身份凭证”)。
(请参见图 7.6︰ 提供管理员身份凭证 #
加入 Active Directory 域之后,使用桌面上的显示管理器或控制台从工作站登录到该域。
如果域名以 .local
结尾,可能无法成功加入域。以 .local
结尾的名称可能导致与多播 DNS (MDNS) 相冲突,在 MDNS 中,.local
是为链路本地主机名保留的。
只有域管理员帐户(例如 Administrator
)能够将 SUSE Linux Enterprise Server 加入 Active Directory。
7.3.4 检查 Active Directory 连接状态 #
要检查您是否已成功在 Active Directory 域中注册,请使用以下命令:
klist
显示当前用户是否具有有效的 Kerberos 票据。getent passwd
显示针对所有用户发布的 LDAP 数据。
7.4 登录到 Active Directory 域 #
如果您的计算机已配置为对 Active Directory 进行身份验证且您拥有有效的 Windows 用户 ID,您便可以使用 Active Directory 身份凭证登录到计算机。支持通过 GNOME、控制台、SSH 和任何其他可感知 PAM 的应用程序登录。
SUSE Linux Enterprise Server 支持脱机身份验证,这样即使客户端计算机处于脱机状态,您也可以登录到其中。有关详细信息,请参见第 7.2.3 节 “办公服务和策略支持”。
7.4.1 GDM #
要对 Active Directory 服务器进行 GNOME 客户端计算机身份验证,请执行以下操作:
单击
。在
文本框中,以DOMAIN_NAME\USER_NAME
格式输入域名和 Windows 用户名。输入您的 Windows 口令。
如果已进行相应的配置,SUSE Linux Enterprise Server 会在已经过身份验证的每个用户通过 Active Directory 首次登录时,在本地计算机上创建一个用户主目录。这样,您便可以获享 SUSE Linux Enterprise Server 的 Active Directory 支持,同时确保您的 Linux 计算机完全正常运行且任您操控。
7.4.2 控制台登录 #
除了使用图形前端登录到 Active Directory 客户端计算机以外,您还可以使用基于文本的控制台登录,甚至是使用 SSH 远程登录。
要从控制台登录到 Active Directory 客户端,请在 login:
提示符处输入 DOMAIN_NAME\USER_NAME
,并提供口令。
要使用 SSH 远程登录到 Active Directory 客户端计算机,请执行以下操作:
在登录提示符处,输入:
>
ssh DOMAIN_NAME\\USER_NAME@HOST_NAME\
域和登录名分隔符将用另一个\
符号转义。提供用户密码。
7.5 更改口令 #
SUSE Linux Enterprise Server 可帮助用户选择一个符合公司安全策略的适当的新口令。基础 PAM 模块从域控制器检索当前口令策略设置,并在登录时通过消息向用户告知用户帐户通常需要满足的具体口令质量要求。与 Windows 操作系统一样,SUSE Linux Enterprise Server 也会显示一条描述以下信息的消息:
口令历史设置
口令最短长度要求
口令最短时限
口令复杂度
只有成功满足了所有要求后,口令更改过程才会成功。口令状态的反馈会同时通过显示管理器和控制台提供。
GDM 提供有关口令失效的反馈,并以交互模式提示输入新口令。要通过显示管理器更改口令,请按提示提供口令信息。
要更改 Windows 口令,可以使用标准 Linux 实用程序 passwd
而无需在服务器上操作该数据。要更改 Windows 口令,请执行以下操作:
登录控制台。
输入
passwd
。出现提示时输入当前口令。
输入新口令。
重输入新的口令进行确认。如果新口令不符合 Windows 服务器上的策略,此信息将反馈给您并提示您输入另一个口令。
要从 GNOME 桌面更改 Windows 口令,请按以下步骤操作:
单击面板左边缘的
图标。选择
。在
部分选择 › 。输入旧口令。
输入并确认新口令。
保留对话框中的
,应用设置。
7.6 Active Directory 证书自动注册 #
证书自动注册使网络设备(包括 SUSE Linux Enterprise Server 设备)能够自动从 Active Directory 证书服务注册证书,而无需用户干预。此功能由 Active Directory 的组策略使用 Samba 的 samba-gpupdate
命令进行管理。
7.6.1 在服务器上配置证书自动注册 #
Windows 服务器角色 Certification Authority
、Certificate Enrollment Policy Web Service
、Certificate Enrollment Web Service
和 Network Device Enrollment Service
必须全部已在 Active Directory 服务器上安装且经过配置。
按照以下 Microsoft 文档中的说明配置组策略自动注册:https://docs.microsoft.com/en-us/windows-server/networking/core-network-guide/cncg/server-certs/configure-server-certificate-autoenrollment#configure-server-certificate-auto-enrollment。
7.6.2 在客户端上启用证书自动注册 #
按照以下过程所述的步骤在客户端上启用证书。
安装 samba-gpupdate 软件包。这会自动安装 certmonger、cepces 和 sscep 依赖项。Samba 使用
sscep
下载证书颁发机构根链,然后使用与cepces
配对的certmonger
来监视主机证书模板。加入某个 Active Directory 域(先前已按照第 7.6.1 节 “在服务器上配置证书自动注册”中所述配置了 CA 的域)。
在已加入 Winbind 的计算机上,通过添加
apply group policies = yes
行来设置smb.conf
全局参数。对于已加入 SSSD 的计算机,请从 https://github.com/openSUSE/oddjob-gpupdate 安装 oddjob-gpupdate。
然后通过在客户端上运行以下命令来校验是否已正确配置证书自动注册:
>
/usr/sbin/samba-gpupdate --rsop
如果您看到类似于以下示例的输出,则表明已正确配置:
Resultant Set of Policy Computer Policy GPO: Default Domain Policy ========================================================== CSE: gp_cert_auto_enroll_ext ----------------------------------------------------------- Policy Type: Auto Enrollment Policy ----------------------------------------------------------- [ <CA NAME> ] = [ CA Certificate ] = ----BEGIN CERTIFICATE---- <CERTIFICATE> ----END CERTIFICATE---- [ Auto Enrollment Server ] = <DNS NAME>
使用以下命令显示已安装的证书:
>
getcert list
Number of certificates and requests being tracked: 1. Request ID 'Machine': status: MONITORING stuck: no key pair storage: type=FILE,location='/var/lib/samba/private/certs/Machine.key' certificate: type=FILE,location='/var/lib/samba/certs/Machine.crt' CA: <CA NAME> issuer: CN=<CA NAME> subject: CN=<HOSTNAME> expires: 2017-08-15 17:37:02 UTC dns: <hostname> key usage: digitalSignature,keyEncipherment eku: id-kp-clientAuth,id-kp-serverAuth certificate template/profile: Machine
证书安装在 /var/lib/samba/certs
中,私用密钥安装在 /var/lib/samba/private
/certs 中。
有关详细信息,请参见man samba-gpupdate
。