当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 使用 SSSD 和 Realmd 将 Linux 主机加入 Active Directory 域

作者:精品下载站 日期:2024-12-14 06:17:05 浏览:12 分类:玩电脑

使用 SSSD 和 Realmd 将 Linux 主机加入 Active Directory 域


自 1991 年 Linux Torvalds 首次将其作为免费操作系统推出以来,Linux 操作系统已经取得了长足的进步。如今,从高端服务器和虚拟机到物联网设备和嵌入式设备,各种形式的 Linux 都在使用。通常,Oracle、PostgreSQL、MySQL、MongoDB 等常见数据库平台都部署在运行 Linux 的服务器上。

Microsoft SQL Server 是一个值得注意的例外。当微软宣布从 SQL Server 2017 开始支持 Linux 时,情况发生了变化。但是,微软没有提供将 Linux 主机集成到 Active Directory (AD) 的直接方法,这使得管理它们变得更加困难。

幸运的是,有一种简单的方法可以将 Linux 与适用于云和本地 Windows 系统的 AD 集成 - 通过使用 Realmd 和系统安全服务守护进程 (SSSD)。

阅读本指南以了解如何将 Linux 与 Active Directory 集成。我们还将介绍如何使用 Realmd 加入 AD、使用 SSSD 是什么样的,以及如何将 Linux 唯一标识符 (UID) 和组 ID (GID) 映射到 AD 中的站点标识符 (SID)。

Linux 与 Active Directory 交互的简要总结

作为介绍,这里简单总结一下Linux如何与AD交互。

将 Linux 计算机加入基于轻量级目录访问协议 (LDAP) 的目录服务(例如 Windows AD)的主要原因包括:

  • 经营政策
  • 访问控制
  • 集中身份管理

将 Linux 主机加入 Active Directory (AD) 时,需要两个组件:

  • 一个管理中央身份和验证源(Active Directory)
  • 用于处理域发现并充当第一个组件和身份源之间的中间人

多年来,有一些配置选项可以将 Linux 计算机加入 AD。大多数配置不方便,需要您手动设置(SSSD)才能加入域。但是,realmd 套件可以让您完成任务,而无需进行繁琐的配置文件编辑。

如何将Linux主机集成到Windows AD域中

现在,让我们逐步完成将在 CentOS 8 上运行的 Linux 主机集成到在 Windows 2012 R2 Server 标准版上配置的 Windows Active Directory (AD) 域的步骤。 (我们之所以指定 Linux 发行版和 Windows Server 的版本和类型,是因为 Linux 和 Windows 版本之间存在细微差别。例如,在 CentOS/RHEL 8 中,网络时间协议 (NTP) 客户端和服务器活动是由管理的使用 ntp 守护进程,但在 CentOS/RHEL 8 中,它已被替换为 chrony 守护进程。)

步骤 1:确保指定主机名和 FQDN。

确保在 /etc/hosts 文件中指定主机名和完全限定域名 (FQDN)。主机名不能是 localhost,因为它映射到环回适配器 127.0.0.1。如果需要更改现有主机名,请使用以下命令将其更改为所需的名称。无需将 FQDN 指定为主机名的一部分。

[root@oldhostname ~]# hostnamectl set-hostname <new_host_name>

[root@newhostname~]# echo 192.168.44.9 sblinmssql2019 >> /etc/hosts

步骤2:指定AD域控制器。

使用以下命令在 /etc/hosts 文件中指定 AD 域控制器 (DC):

[root@newhostname~]# echo 192.168.xx.x sbad.sbits.net sbad >> /etc/hosts

[root@newhostname~]# ping sbad.sbits.net

[玩转系统] 使用 SSSD 和 Realmd 将 Linux 主机加入 Active Directory 域

步骤3:Ping AD域控制器。

对步骤 2 中指定的 AD 域控制器执行 Ping 操作,并确保获得 ping 响应。

[玩转系统] 使用 SSSD 和 Realmd 将 Linux 主机加入 Active Directory 域

步骤4:将DNS服务器指向AD域控制器。

就我而言,DNS 服务器需要指向 AD 域控制器,因为我的 DC 也是我的域 sbits.net 的 DNS 服务器。

[玩转系统] 使用 SSSD 和 Realmd 将 Linux 主机加入 Active Directory 域

步骤 5:如有必要,配置 NTP 服务器。

如果您计划用作 NTP 服务器的主 DC 未配置 NTP 服务器,请按照屏幕截图中的步骤在主 DC 上配置并启用 NTP 服务器。

[玩转系统] 使用 SSSD 和 Realmd 将 Linux 主机加入 Active Directory 域

步骤 6:安装 chrony 并将其配置为使用 DC。

Linux主机需要与AD域中的其中一台DC进行时间同步。就我而言,只有一个域控制器,因此 Linux 主机将与其同步时间。

如果尚未安装 chrony,请安装它并将其配置为使用 DC 来同步时间。 (如果已经安装,您将收到一条消息报告该情况。)

[root@newhostname~]# vi /etc/resolv.conf

[root@newhostname~]# systemctl restart NetworkManager

[玩转系统] 使用 SSSD 和 Realmd 将 Linux 主机加入 Active Directory 域

[root@sblinmssql2019~]# vi /etc/chrony.conf

 [root@sblinmssql2019~]# systemctl enable chronyd

 [root@sblinmssql2019~]# systemctl restart chronyd

 [root@sblinmssql2019~]# systemctl enable chronyd 

如果已经安装了chrony,我们需要编辑chrony.conf配置文件并将时间服务器设置为AD域控制器并重新启动chronyd服务。如果未预安装该服务,请使其在重新启动时启动,并确保在安装后将防火墙配置为允许 NTP 流量。

[玩转系统] 使用 SSSD 和 Realmd 将 Linux 主机加入 Active Directory 域

配置并启用 chronyd 后,timedatectl 命令将显示 NTP 服务是否处于活动状态。确认 NTP 服务处于活动状态后,运行 chronycsources 命令以确认它正在使用域控制器作为时间服务器,如下所示。

[玩转系统] 使用 SSSD 和 Realmd 将 Linux 主机加入 Active Directory 域

步骤7:在Linux上安装Samba套件。

接下来,在 Linux 主机上安装 Samba 套件,包括 winbind。 winbind服务使Linux主机能够像Windows主机一样与AD域进行交互。安装完成后,确认下图所示的软件包已安装。

[玩转系统] 使用 SSSD 和 Realmd 将 Linux 主机加入 Active Directory 域

步骤 8:修改 /etc/samba/smb.conf 文件以反映领域值。

接下来,修改/etc/samba/smb.conf文件,将realm值反映为完全限定域名,并将workgroup值更改为域的名称,如下图所示。

[root@sblinmssql2019~]# yum -y install samba samba-client

[root@sblinmssql2019~]# yum -y install samba-winbind samba-winbind-clients

[玩转系统] 使用 SSSD 和 Realmd 将 Linux 主机加入 Active Directory 域

步骤 9:在系统重新引导时启用 winbind 守护进程。

使用 systemctl 命令在系统重新引导时启用 winbind 守护进程,如下面的屏幕截图所示。请注意,与 Windows 主机不同,没有理由重新启动 Linux 主机。

注意:realm参数是您的域名。在此示例中,它是“sbits.net”,工作组参数设置为“sbits”。如果您愿意,可以将工作组参数设置为 Windows 默认值“WORKGROUP”。 security=ADS 指定该主机是 AD 域的一部分。 winbind 分隔符 =+ 指定使用加号 (+) 分隔域名和用户名。传统的 Windows 分隔符与 Linux 不兼容,每次使用域前缀指定用户名时都必须使用转义字符。

[玩转系统] 使用 SSSD 和 Realmd 将 Linux 主机加入 Active Directory 域

步骤 10:安装 Kerberos 领域包。

使用 yum 命令安装 Kerberos 领域包:

[root@sblinmssql2019~]# yum -y install krb5-workstation

[玩转系统] 使用 SSSD 和 Realmd 将 Linux 主机加入 Active Directory 域

步骤11:将Linux主机添加到AD域。

现在,使用以下命令将 Linux 主机添加到 AD 域。您很可能会收到错误“DNS 更新失败:NT_STATUS_INVALID_PARAMETER”。

就我而言,即使出现错误,Linux 主机也已添加到 AD 域。我使用 -no-dns-updates 标志重新发出该命令,并且没有弹出错误。

[玩转系统] 使用 SSSD 和 Realmd 将 Linux 主机加入 Active Directory 域

步骤 12:使用 DNS 管理器更改安全设置。

如果您不想遇到该错误并希望 DNS 更新有关新 Linux 主机的信息,请使用 DNS 管理器更改安全设置,如下所示。

[玩转系统] 使用 SSSD 和 Realmd 将 Linux 主机加入 Active Directory 域

步骤 13:验证 Linux 计算机对象是否已添加。

在主域控制器上,验证是否使用 Active Directory 用户和计算机工具添加了 Linux 计算机对象。

[玩转系统] 使用 SSSD 和 Realmd 将 Linux 主机加入 Active Directory 域

第14步:确认winbind服务正在运行。

确认 Linux 主机上正在运行 winbind 服务。

[玩转系统] 使用 SSSD 和 Realmd 将 Linux 主机加入 Active Directory 域

步骤 15:验证 Linux 主机是否属于 AD 域。

验证 Linux 主机实际上是 AD 域的一部分,并且能够通过使用 wbinfo 包对 DC 运行加密的 RPC 调用来与 DC 通信:

[root@sblinmssql2019~]# wbinfo -t # verifies if encrypted RPC are supported

[root@sblinmssql2019~]# wbinfo – u # enumerates AD the list of users

[root@sblinmssql2019~]# wbinfo – g # enumerates AD the list of groups

[玩转系统] 使用 SSSD 和 Realmd 将 Linux 主机加入 Active Directory 域

[玩转系统] 使用 SSSD 和 Realmd 将 Linux 主机加入 Active Directory 域

[玩转系统] 使用 SSSD 和 Realmd 将 Linux 主机加入 Active Directory 域

步骤 16:确保选择 winbind 作为授权提供程序。

接下来,我们需要使用 authselect select winbind -force 命令确保选择 winbind 作为授权提供程序,如下所示。 -force 标志将覆盖 /etc/nsswitch.conf 中的条目。 conf 文件。

[玩转系统] 使用 SSSD 和 Realmd 将 Linux 主机加入 Active Directory 域

步骤 17:确保列出密码和组条目以使用 winbind。

要确保 Linux 在本地 Linux 身份验证之前使用 winbind 进行用户身份验证,请确保在 /etc/ 中列出 passwdgroup 条目以使用 winbind nsswitch.conf 文件。

[玩转系统] 使用 SSSD 和 Realmd 将 Linux 主机加入 Active Directory 域

步骤 18:使用 kinit 获取 Kerberos TGT。

最后,使用 kinit 尝试获取 Kerberos Ticket Granting Ticket (TGT):

[root@sblinmssql2019~]# wbinfo -t # kinit [email protected]

[root@sblinmssql2019~]# wbinfo – u # klist

[玩转系统] 使用 SSSD 和 Realmd 将 Linux 主机加入 Active Directory 域

您很可能会遇到上面屏幕截图中显示的错误。如果是这样,请编辑 /etc/krb5.conf 文件并更改设置,如下所示:

[玩转系统] 使用 SSSD 和 Realmd 将 Linux 主机加入 Active Directory 域

一旦文件被修改,就没有理由在Linux主机上启动任何服务,并且票证请求应该可以正常工作。

[玩转系统] 使用 SSSD 和 Realmd 将 Linux 主机加入 Active Directory 域

也可以在AD域控制器上验证,如下图:

[玩转系统] 使用 SSSD 和 Realmd 将 Linux 主机加入 Active Directory 域

恭喜!已将Linux主机加入Windows AD域。

使用realmd加入AD域

现在您已经知道如何将 Linux 与 Active Directory 域集成,让我们转向加入 AD 域。有一种快速简单的方法可以设置 SSSD 来加入域,而无需进行繁琐的配置文件编辑:realmd 套件。此命令行工具可用于管理 Kerberos 领域(例如 Active Directory 域或 IPA 域)中的注册。 Realmd系统提供了一种清晰简单的方法来发现和加入身份域,以实现直接域集成。这也不是太大的提升,因为 Realmd 处理复杂的底层 Linux 系统服务的配置,例如 SSSD 或 winbind。

Realmd 还是一个用于访问管理、事件管理、配置域成员资格、实现集成直接域以及网络和用户 SSH 身份验证的出色工具。许多企业网络安全团队使用realmd 通过控制谁有权访问什么来减少攻击面。

按照以下步骤使用realmd 桌面总线(D-Bus) 工具加入Active Directory 服务器。这些说明适用于所有 Linux 发行版,包括 Fedora 和 Ubuntu。

  1. 要将Linux添加到Active Directory域,请确保您的Linux主机可以通过网络与DC通信。正确的 DNS 和主机名解析对于此过程至关重要。
  2. 接下来,在您的计算机帐户上使用root访问权限安装realmd,并检查我们是否已经是域的成员。
sudo apt install realmd

realm list

如果先前未安装realmd,则输出应为空,表明:

  • 主机未加入 AD 或其他域服务
  • 我们没有任何域成员资格。

如果输出列出了您想要离开的域,请以最初用于加入该域的域管理员用户帐户运行以下命令:

sudo 领域离开 example.com -U [email protected]

3. 接下来,我们要发现我们的域:

realm discover <domain_controller_hostname_or_ip_address>

输出是必须安装才能加入域的软件包列表:

example.com

 type: kerberos

 realm-name: EXAMPLE.COM

 domain-name: example.com

 configured: no

 server-software: active-directory

 client-software: sssd

required-package: sssd-tools

 required-package: sssd

 required-package: libnss-sss

 required-package: libpam-sss

 required-package: adcli

 required-package: samba-common-bin

领域发现输出可能会有所不同,具体取决于您的特定主机和域控制器设置。

请注意,realmd 使用 SSSD 作为其默认的 Active Directory 客户端软件。 SSSD 允许本地服务检查 SSSD 中的本地用户和凭证缓存,但这些缓存可以取自任何远程身份证明者,包括 AD、LDAP 目录、身份管理域或 Kerberos 领域。

如果不想使用SSSD,可以指定winbind来使用Samba Winbind。

4. 确认Windows服务器和Linux在同一网络中。如果不是,您的 Linux 主机将无法加入 Active Directory。我们强烈建议为域控制器使用静态 IP 地址。

5. 确认一切后,继续安装列出的所需软件包(如上所示),然后使用领域加入命令。这将执行多项操作,包括设置本地计算机以与特定域一起使用以及在 /etc/krb5.keytab 中创建主机密钥表文件。它还将使用具有 AD 域管理员权限的凭据将 Linux 添加到 Windows 域:

sudo apt install sssd sssd-tools libnss-sss libpam-sss adcli samba-common-bin

sudo realm join --client-software=sssd <domain_controller_hostname_or_ip> -U <domain_admin>

指定域管理员时,我们可以只使用用户名,而不是使用 example.comuser 格式,因为我们已经在命令中指定了域控制器。

此外,我们可以使用 -computer-ou 参数指定要加入的计算机的组织单位,使用专有名称格式(例如,#realm join -computer-ou= ”ou=Linux 计算机,dc=示例,dc=com”)。指定 -computer-ou 也非常适合在非默认位置创建目录计算机帐户。

请注意,如果未使用正确的格式设置主机名,则可能会出现无效主机名错误。要解决此问题,只需正确设置主机名即可:

sudo hostnamectl set-hostname '<new_hostname>'

6. 加入域名后,我们可以再次运行realm list来确认成功并查看域名信息:

example.com

 type: kerberos

 realm-name: EXAMPLE.COM

 domain-name: example.com

 configured: kerberos-member

 server-software: active-directory

 client-software: sssd

 required-package: sssd-tools

 required-package: sssd

 required-package: libnss-sss

 required-package: libpam-sss

 required-package: adcli

 required-package: samba-common-bin

login-formats: %[email protected]

 login-policy: allow-realm-logins

在这种情况下,login-formats 属性指示域帐户将在此主机上以[email protected] 格式指定,而不是domainuser 格式> 格式。

7. 最后,重新启动 SSSD 服务并使用以下命令验证 Active Directory 用户信息。输出应显示域用户的 UID、组等:

sudo service sssd restart

id [email protected]

这里的所有都是它的!这绝不是您可以手动执行和配置的所有选项的综合指南;但是,这是使用现代方法将 Linux 主机加入 Active Directory 的最快途径。

可选步骤

使用realmd加入AD后,您可以采取可选步骤来自定义您的体验,例如调整realmd的行为以及使用各种选项和工具管理AD对象的属性。这些包括:

操作系统版本

os-versionos-name 设置允许您指定操作系统版本和名称。具体来说,您可以使用它们来控制计算机帐户的 operatingSystemVersion operatingSystem 属性中放置的值。

AD属性编辑器

这是一个内置的图形工具,用于管理 AD 对象的属性,例如计算机、用户和组。您可以通过安装 dsa.msc 管理单元来使用它,该管理单元是 Windows 远程服务器管理工具 (RSAT) 的一部分。

拒绝和允许

realm Deny命令拒绝真实账户本地登录。您可以使用领域许可来限制某些帐户的登录。

更改默认用户配置

realmd 系统允许您修改默认的用户主目录和 shell POSIX 属性。您可以通过在 /etc/realmd.conf 文件的 [users] 部分中指定以下选项来覆盖默认目录和属性:

  • Default-shell:定义默认用户 shell;它接受任何受支持的系统 shell。
  • 默认主目录:这设置了一个模板,用于为未明确设置主目录的帐户创建主目录。

将 Linux UID/GID 映射到 Active Directory 中的 SID

您现在知道如何将 Linux 与 Active Directory 集成。然而,我们还没有完成。我们还需要了解 POSIX UID 和 GID 如何映射到 Active Directory 中的 SID,因为 Linux 客户端不像 Windows 那样有 SID 的概念。

使用 SSSD 而不是 Winbind 的优点

如前所述,realmd 默认使用 SSSD 而不是 winbind。这种方法的一大好处是 SSSD 使用每个 Active Directory 用户或组的 SID 自动处理 POSIX UID/GID 生成。如果您在加入域的每台 Linux 主机上保留默认 SSSD 设置,则这些 UID 和 GID 值应在 Linux 主机之间一致映射。

例如,在我的实验室中,无论我在哪台 Linux 机器上运行,只要机器加入到同一域,这个结果都是一致的:

user@my-linux-host:~$ id [email protected]

uid=778006423([email protected]) gid=778001234(domain [email protected]) groups=778001234 (domain [email protected])

此方法的另一个好处是,SSSD 生成的 UID 和 GID 也可以应用于 Active Directory 中用户和组的 uidNumber 和 gidNumber 属性。这允许查询这些 AD 属性的应用程序执行 UID 或 GID 到 SID 的映射,最终导致引用相同的 AD 用户或组,无论用户或组是在 Windows 还是 Linux 系统上使用。

查看和编辑 uidNumber 和 gidNumber 属性

要在 Windows Server 上的 Active Directory 用户和计算机中查看 uidNumber 和 gidNumber 属性,请确保在“视图”下拉列表下启用了“高级功能”:

[玩转系统] 使用 SSSD 和 Realmd 将 Linux 主机加入 Active Directory 域

然后,您将能够在“属性编辑器”选项卡上的用户或组的“属性”菜单中查看和编辑这些字段:

[玩转系统] 使用 SSSD 和 Realmd 将 Linux 主机加入 Active Directory 域

列出所有 AD 用户和组及其 UID 和 GID

根据域中用户和组的数量,手动分配 uidNumber 和 gidNumber 值可能需要很长时间。尽管以编程方式填充这些字段的方法因环境而异,但我们至少可以在加入域的 Linux 主机上使用 getent 命令列出所有 AD 用户和组及其 UID 和 GID。

默认情况下,getent 将仅列出本地计算机上的用户和组。幸运的是,可以通过在 /etc/sssd/sssd.conf 文件中添加一行并重新启动 SSSD 来修改此设置。但是,启用此枚举选项可能会对 Active Directory 服务器造成巨大压力。

通常,我喜欢在生产时间之外逐步执行此过程,保存结果,然后禁用完整枚举。我是这样做的:

  1. 首先,我们将 enumerate=True 添加到 sssd.conf 中,然后重新启动 SSSD 服务:
echo "enumerate = True" | sudo tee -a /etc/sssd/sssd.conf &> /dev/null

sudo service sssd restart

根据 Active Directory 的大小,最多可能需要 10 分钟才能完成本地缓存的初始枚举。在此期间,您会注意到域用户和组分别填充在 getent passwd 和 getent group 的输出中。

2. 完成对本地凭证缓存的枚举后,我们可以使用以下命令来格式化 getent 输出( 需要替换为您的域名):

getent passwd | awk -F: '{print $1 "," $3 "," $4}' | grep <domain>

getent group | awk -F: '{print $1 "," $3}' | grep <domain>

第一个命令以逗号分隔的格式输出每个域用户及其 UID 和 GID:

[email protected],778006423,778001234

第二个以逗号分隔的格式输出每个域组及其 GID:

domain [email protected],778001234

3. 您可以将输出重定向到文本或 CSV 文件,以便解析为 Active Directory 的 uidNumber 和 gidNumber 属性。使用 CSV 格式的 UID 和 GID 信息,您可以创建一个脚本来导入每个 CSV 并自动更新 Active Directory 用户和组的 uidNumber 和 gidNumber。例如,以下 Windows PowerShell 命令将指定的 UID 和 GID 添加到 AD 中的这些属性:

Set-ADUser <ad_user> -Replace @{uidNumber="<uid>"; gidNumber="<gid>"}

使用此命令(和 Set-ADGroup),您可以轻松生成适合您环境的脚本,并加快将 UID/GID 映射到 AD 中的 uidNumber 和 gidNumber 的过程,最终映射到 Windows SID。

4. 保存 getent 命令的输出后,您可以从 sssd.conf 中删除枚举值并重新启动 SSSD 服务,以防止将来发生昂贵的 LDAP 枚举:

sudo sed -i '/enumerate = True/d' /etc/sssd/sssd.conf

sudo service sssd restart

结论

Linux 主机通常用于关键功能,因此管理员需要监控这些主机,了解它们的使用方式,观察谁访问它们并验证它们的安全方式。

将 Linux 主机加入 Active Directory 时,管理员需要特别小心。请记住,攻击者只需利用一台受感染的主机或用户,即可通过利用过度配置的用户访问、弱密码和开放 SMB/NFS 共享等问题横向获取域中的管理员权限。

降低网络安全风险的最佳方法之一是使用 Netwrix Active Directory 安全解决方案。该软件功能全面且用户友好,使 Linux 与 Active Directory 的集成变得轻松而简单。这包括:

  • Unix/Linux 和 Active Directory 上预配置和可定制的审核、日志记录、分析和报告作业
  • 用于保护基础设施其他部分的工具,包括 Google Cloud、网络设备、虚拟化系统和 Kubernetes 容器

有兴趣体验 Netwrix 的差异吗?立即申请免费试用。

常问问题

您可以将 Linux 计算机加入 Active Directory 吗?

是的。您可以通过手动连接 SSSD 客户端或使用领域加入命令将任何发行版加入 AD 域。

Linux 如何连接到 Active Directory?

系统安全服务守护进程 (SSSD) 提供了一组守护进程来管理对 Linux 计算机上的远程目录服务和身份验证机制的访问。

Linux 中的realmd 是什么?

realmd 是一项 Linux 系统服务,允许调用者通过 SSSD 或 winbind 服务配置网络身份验证和域成员身份。

sudo systemctl 命令是什么?

sudo systemctl命令是控制init系统的主要管理工具。您可以在其后使用 start 命令来启动 systemd 服务。

什么是 sudo apt-get update 命令?

sudo apt-get update 命令用于从所有配置的源下载软件包信息。

什么是 sudoers?

Linux和Unix管理员可以使用sudoers文件为系统用户分配系统权限。换句话说,它允许管理员控制谁做什么。您可以在 /etc/sudoers 中找到该文件。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯