IT环境有一个结构。其中的系统是有目的安排。要整合两个独立的基础设施,就需要评估每一个环境的目的,并了解它们如何以及在何处进行交互。
Windows集成可能意味着非常不同的东西,具体取决于Linux环境和Windows环境之间所需的交互。 这可能意味着单个Linux系统已注册到Windows域,这可能意味着Linux域被配置为Windows域的对等体,或者它可能仅仅意味着在环境之间复制信息。
Windows域和Linux系统之间有几个联系点。 这些要点中的每一个都围绕识别不同的域对象(用户,组,系统,服务)以及在该标识中使用的服务。
在大多数环境中,Active Directory域是用户信息的中心集线器,这意味着Linux系统需要某种方式来访问该用户信息以进行身份验证请求。 那么真正的问题是如何获得该用户信息以及外部系统可以获得多少信息。 还需要在Linux系统(POSIX属性)和Linux用户(某些应用程序管理员)所需的信息以及如何管理这些信息之间取得平衡。
与集成域中的哪些元素一样重要,是如何维护集成。 如果特定的集成工具是大量手动操作的,但环境中有大量经常更新的系统,那么从维护的角度来看,那个工具可能无法在该环境中工作。
以下部分概述了与Windows集成的主要方案。 在直接集成中,Linux系统连接到Active Directory而无需任何其他中介。 另一方面,间接集成涉及一个集中管理Linux系统的身份服务器,并将整个环境连接到服务器到服务器级别的Active Directory。
您需要两个组件才能将Linux系统连接到Active Directory(AD)。 一个组件与中央身份和身份验证源交互,在这种情况下是AD。 另一个组件检测可用域并配置第一个组件以使用正确的标识源。 有多种选项可用于检索信息并对AD执行身份验证。 其中包括:
原生LDAP和Kerberos PAM和NSS模块
这些模块包括nss_ldap、pam_ldap和pam_krb5。由于PAM和NSS模块被加载到每个应用程序进程中,它们直接影响到执行环境。由于没有缓存、脱机支持或对访问凭据的足够保护,因此不鼓励对NSS和PAM使用基本的LDAP和Kerberos模块,因为它们的功能有限。
Samba Winbind
Samba Winbind是将Linux系统连接到AD的传统方式。 Winbind在Linux系统上模拟Windows客户端,并且能够与AD服务器通信。 最新版本的系统安全服务守护进程(SSSD)弥补了Samba Winbind和SSSD之间的功能差距,现在可以使用SSSD替代Winbind。 在某些极端情况下,Winbind可能仍然需要使用,但它不再是一般的首选。
注意:
系统安全服务守护进程(SSSD)
SSSD的主要功能是通过一个通用框架访问远程身份和身份验证资源,该框架为系统提供缓存和脱机支持。 SSSD具有高度可配置性; 它提供PAM和NSS集成以及用于存储本地用户的数据库,以及从中央服务器检索的核心和扩展用户数据。 SSSD是将Linux系统与您选择的身份服务器连接的推荐组件,无论是Active Directory,Red Hat Enterprise Linux中的身份管理(IdM),还是任何通用LDAP或Kerberos服务器。
注意:
从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属性。 有关详情,请参阅:
基于同步的解决方案
基于信任的解决方案的替代方案是利用用户同步功能(也可在IdM或Red Hat Directory Server(RHDS)中使用),允许用户帐户(以及RHDS也是组帐户)从AD同步到IdM或RHDS,但是 不是相反的方向。 用户同步有一定的局限性,包括:
在一些集成场景中,用户同步可能是唯一可用的选项,但通常不鼓励使用同步方法来支持基于跨域信任的集成。
系统安全服务守护进程(SSSD)是一种访问远程目录和身份验证机制的系统服务。 它将本地系统(SSSD客户端)连接到外部后端系统(域)。 这为SSSD客户端提供了使用SSSD提供程序访问身份和身份验证远程服务的权限。 例如,这些远程服务包括:LDAP目录,身份管理(IdM)或Active Directory(AD)域或Kerberos域。
当将SSSD用作AD集成的身份管理服务时,其是NIS或Winbind等服务的替代方案。 本章介绍SSSD如何与AD配合使用。 有关SSSD的更多详细信息,请参阅“系统级身份验证指南”。
AD提供程序使SSSD能够使用LDAP身份提供程序和Kerberos身份验证提供程序,并对AD环境进行优化。
Linux和Windows系统对用户和组使用不同的标识符:
对Red Hat Enterprise Linux系统进行身份验证的用户(包括AD用户)必须分配UID和GID。 为此,SSSD提供以下集成选项:
自动为AD用户生成新的UID和GID
SSSD可以使用AD用户的SID在称为ID映射的过程中以算法方式生成POSIX ID。 ID映射在AD中的SID和Linux上的ID之间创建映射。
请参见“将带有ID映射的AD域配置为SSSD的提供程序”。
注意
当所有客户端系统使用SSSD将SID映射到Linux ID时,映射是一致的。 如果某些客户端使用不同的软件,请选择以下选项之一:
- 确保在所有客户端上使用相同的映射算法。
- 使用显式POSIX属性,如在使用AD中定义的POSIX属性中所述。
使用AD中定义的POSIX属性
AD可以创建和存储POSIX属性,例如uidNumber,gidNumber,unixHomeDirectory或loginShell。
使用“自动生成AD用户的新UID和GID”中描述的ID映射时,SSSD会创建新的UID和GID,这将覆盖AD中定义的值。 要保留AD定义的值,必须在SSSD中禁用ID映射。
请参见“配置SSSD以使用AD中定义的POSIX属性”。
确保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域“。
当用户首次登录Linux系统时,pam_oddjob_mkhomedir.so库会自动创建主目录。 默认情况下,SSSD从AD身份提供程序检索主目录的格式。 要在Linux客户端上自定义目录格式:
打开/etc/sssd/sssd.conf文件。
在[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设置:
有关详细信息,请参见sssd.conf(5)手册页。
更改配置文件后重启SSSD。
# systemctl restart sssd.service
注意
以前,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端口上连接到各个域控制器。
按照“将具有ID映射的AD域配置为SSSD的提供程序”中的步骤进行操作。
打开/etc/sssd/sssd.conf文件。
在AD域部分中,添加ldap_id_mapping = false设置。
注意
如果您使用realm实用程序加入域并添加了**–automatic-id-mapping = no开关,则realm实用程序已使用ldap_id_mapping = false**设置SSSD。
如果您之前请求任何具有默认ID映射配置的用户,请删除SSSD缓存:
# rm -f /var/lib/sss/db/*
SSSD现在将使用AD中的POSIX属性,而不是在本地创建它们。
如果安装了adcli软件包,SSSD会自动更新AD环境中的Kerberos主机密钥表文件。 守护进程每天检查机器帐户密码是否早于配置的值,并在必要时进行更新。
默认的更新间隔是30天。若要更改默认设置,请执行以下操作:
在/etc/sssd/sssd.conf文件中将以下参数添加到AD提供程序:
ad_maximum_machine_account_password_age = value_in_days
重启SSSD:
# systemctl restart sssd
要禁用自动Kerberos主机密钥表更新,请设置
ad_maximum_machine_account_password_age = 0。
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支持AD的范围检索功能。有关范围检索搜索的详细信息,请参阅Microsoft Developer Network。
重要提示
如果您在组或搜索库中设置自定义过滤器,则过滤器可能无法与非常大的组一起使用。
组策略是Microsoft Windows的一项功能,它使管理员能够集中管理Active Directory(AD)环境中的用户和计算机的策略。组策略对象(GPO)是存储在域控制器(DC)上的策略设置的集合,可以应用于策略目标,如计算机和用户。与Windows登录权限相关的GPO策略设置通常用于管理AD环境中基于计算机的访问控制。
配置SSSD以应用GPO访问控制时,SSSD将检索适用于主机系统和AD用户的GPO。 根据检索到的GPO配置,SSSD确定是否允许用户登录特定主机。 这使管理员能够在AD域控制器上集中定义Linux和Windows客户端都遵循的登录策略。
重要提示
安全筛选是一种功能,使您可以通过在安全筛选器中列出GPO访问控制的范围,进一步限制GPO访问控制的范围到特定用户,组或主机。 但是,SSSD仅支持安全筛选器中的用户和组。 SSSD忽略安全筛选器中的主机条目。
要确保SSSD将GPO访问控制应用于特定系统,请在AD域中创建新OU,将系统移至OU,然后将GPO链接到此OU。
表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)手册页。 |
可以在/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的访问控制相关的以下参数:
要将PAM服务添加到映射到特定GPO设置的默认PAM服务列表,或要从列表中删除该服务,请使用**ad_gpo_map_ ***选项。 例如,要从映射到交互式登录(GPO设置允许本地登录并拒绝本地登录)的PAM服务列表中删除su服务:
ad_gpo_map_interactive = -su
有关可用GPO参数及其说明和默认值的详细列表,请参见sssd-ad(5)手册页。
有关配置SSSD以使用GPO的更多详细信息,请参阅在Red Hat知识库中配置SSSD以遵守Active Directory SSH或控制台/GUI GPO。
直接集成到AD中的SSSD客户端可以为检索到的每个AD用户自动创建用户私有组,确保其GID与用户的UID匹配,除非已经采用了GID号。 为避免冲突,请确保服务器上不存在与用户UID具有相同GID的组。
GID没有存储在AD中。 这可确保AD用户从组功能中受益,而LDAP数据库不包含不必要的空组。
要为AD用户激活自动创建用户私有组,请执行以下操作:
编辑/etc/sssd/sssd.conf文件,在[domain/LDAP]部分添加:
auto_private_groups = true
重启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用户停用自动创建用户私有组,请执行以下操作:
编辑/etc/sssd/sssd.conf文件,在[domain/LDAP]部分添加:
auto_private_groups = false
重启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)
Active Directory林可能非常大,具有许多不同的域控制器,域和子域以及物理站点。 Active Directory使用站点的概念来标识其域控制器的物理位置。 这使客户端能够连接到地理位置最接近的域控制器,从而提高客户端性能。
默认情况下,SSSD客户端使用自动发现来查找其AD站点并连接到最近的域控制器。 该过程包括以下步骤:
注
SSSD默认会记住它所属的AD站点。 通过这种方式,SSSD可以在自动发现过程中将LDAP ping直接发送到此站点中的DC,以刷新站点信息。 因此,自动发现的过程非常快,因为通常不会发生超时。
如果站点不再存在或客户端同时被分配到不同的站点,SSSD将开始查询林中的SRV记录并再次完成整个过程。
要覆盖自动发现,请使用/etc/sssd/sssd.conf文件的[domain]部分中的ad_site选项指定客户端要连接的AD站点。
realmd系统提供了一种清晰简单的方法来发现和加入身份域,以实现直接域集成。 它配置底层Linux系统服务(如SSSD或Winbind)以连接到域。
使用Active Directory作为SSSD的身份提供程序描述了如何在本地系统和Active Directory上使用系统安全服务守护程序(SSSD)作为后端身份提供程序。 确保为此正确配置系统可能是一项复杂的任务:每个可能的身份提供者和SSSD本身都有许多不同的配置参数。 此外,所有域信息必须提前可用,然后在SSSD的SSSD配置中正确格式化,以便将本地系统与AD集成。
realmd系统简化了这种配置。它可以运行发现搜索来标识可用的AD和身份管理域,然后将系统连接到该域,还可以设置所需的客户端服务,用于连接到给定的身份域和管理用户访问。此外,由于SSSD作为基础服务支持多个域,realmd还可以发现和支持多个域。
realmd系统支持以下域类型:
realmd支持以下域客户端:
要使用realmd系统,请安装realmd软件包。
# yum install realmd
此外,请确保已安装oddjob,oddjob-mkhomedir,sssd和adcli软件包。要使用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运行的进程遵循以下步骤:
为指定的域运行发现扫描。
自动安装将系统加入域所需的软件包。
这包括SSSD和PAM home directory job包。 请注意,自动安装软件包需要运行PackageKit套件。
注
如果PackageKit被禁用,系统会提示您输入缺少的软件包,并且需要使用yum实用程序手动安装它们。
通过在目录中为系统创建帐户条目来加入域。
创建/etc/krb5.keytab主机密钥表文件。
在SSSD中配置域并重启服务。
在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 将系统注册到域中的示例过程
运行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
运行realm join命令,并将域名传递给命令。 如果系统提示,请提供管理员密码。
# realm join ad.example.com Password for Administrator: password
请注意,在发现或加入域时,realmd会检查DNS SRV记录:
要测试系统是否已成功注册到域,请验证您是否可以从域中以用户身份登录并正确显示用户信息:
执行id user@domain_name命令,显示域中用户的信息。
# id [email protected]
uid=1348601103([email protected]) gid=1348600513(domain
[email protected]) groups=1348600513(domain [email protected])
使用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]
验证pwd实用程序是否打印用户的主目录。
$ pwd
/home/ad.example.com/user
验证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 deny和realm 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在Red Hat Enterprise Linux中实现了服务器消息块(SMB)协议。 SMB协议用于访问服务器上的资源,例如文件共享和共享打印机。
您可以使用Samba将Active Directory(AD)域用户身份验证到域控制器(DC)。 此外,您可以使用Samba将打印机和本地目录共享给网络中的其它SMB客户端。
Samba的winbindd服务为名称服务交换(NSS)提供了接口,并使域用户能够在登录到本地系统时对AD进行身份验证。
使用winbindd提供的好处是,您可以增强配置以共享目录和打印机,而无需安装其他软件。 有关更多详细信息,请参阅“Red Hat系统管理员指南”中有关Samba的部分。
如果要加入AD域并使用Winbind服务,请使用realm join --client-software = winbind domain_name命令。 realm实用程序会自动更新配置文件,例如Samba,Kerberos和PAM的配置文件。
有关更多详细信息和示例,请参阅“Red Hat系统管理员指南”中的“将Samba设置为域成员”部分。
本节介绍如何使用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名称查找可用于相同目的。
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客户端,建议使用SSSD:
SSSD不支持Winbind提供的所有服务。 例如,SSSD不支持使用NT LAN Manager(NTLM)或NetBIOS名称查找进行身份验证。如果需要这些服务,请使用Winbind。 请注意,在身份管理域中,Kerberos身份验证和DNS名称查找可用于相同目的。
您可以从属于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客户端访问SMB共享的SSSD和Winbind插件之间切换。 要使Winbind能够访问SMB共享,您需要在客户端上安装cifs-utils软件包。 要确保您的计算机上安装了cifs-utils:
$ rpm -q cifs-utils
可选的。 了解您当前是否正在使用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)。
在切换到Winbind插件之前,请确保Winbind在系统上运行:
# systemctl is-active winbind.service
active
在切换到SSSD插件之前,请确保SSSD正在系统上运行:
# systemctl is-active sssd.service
active
要切换到其它插件,请使用alternatives --set cifs-idmap-plugin命令,并指定所需插件的路径。 例如,要切换到Winbind:
# alternatives --set cifs-idmap-plugin /usr/lib/cifs-
utils/idmapwb.so
如果在您的环境中运行Red Hat Identity Management(IdM)和Samba,则可以将Samba服务器配置为使用Kerberos对连接到共享的IdM用户进行身份验证。
重要提示
IdM不提供全局编录。 因此,IdM仅允许存储在IdM域中的用户对Samba服务器进行身份验证。 不支持在此配置中从Windows客户端访问Samba共享。
在IdM主服务器上,运行ipa-adtrust-install以配置主服务器以管理特定于Samba的对象类和属性。 有关详细信息,请参见“为信任准备IdM服务器”一节。
要设置一个新的Samba服务器来验证用户到IdM域的身份,请执行以下操作:
为IdM安装所需的包并将客户端加入域。 有关详细信息,请参阅“Red Hat Linux域身份,身份验证和策略指南”中的相应部分。
安装Samba服务器和sssd-libwbclient包:
# yum install samba sssd-libwbclient
sssd-libwbclient包提供了libwbclient.so库。 此库是Winbind服务使用的libwbclient包提供的库的系统安全服务守护程序(SSSD)的替代品。
为Samba服务器创建cifs Kerberos主体。 例如:
# ipa service-add cifs/samba_server.idm.example.com
检索cifs主体的Kerberos keytab,并将其存储在/etc/samba/samba.keytab文件中:
# ipa-getkeytab -p cifs/samba_server.idm.example.com -k
/etc/samba/samba.keytab
在/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
设置文件和打印机共享。 有关详细信息,请参阅“Red Hat系统管理员指南”中的以下部分:
验证/etc/samba/smb.conf文件:
# testparm
如果testparm实用程序未返回任何错误,则配置有效。
打开所需的端口并使用firewall-cmd实用程序重新加载防火墙配置:
# firewall-cmd --permanent --add-service=samba
# firewall-cmd --reload
启动smb服务:
# systemctl start smb
(可选)配置smb服务在系统引导时自动启动:
# systemctl enable smb
验证sssd服务是否已启用并正在运行:
# systemctl status sssd
验证winbind服务是否已启用并正在运行:
# systemctl status winbind
要进行验证,请列出Samba服务器提供的共享。 例如:
安装samba-client软件包:
# yum install samba-client
对Kerberos进行身份验证:
# kinit user_name
列出共享:
# smbclient -k -U user_name -L samba_server.idm.example.com
有关Samba的更多详细信息,请参阅“Red Hat系统管理员指南”中的相应部分。
有关Samba的详细信息,请参阅“Red Hat系统管理员指南”中的相应部分。