问:RHEL、SSSD、Active Directory

问:RHEL、SSSD、Active Directory

大家下午好。我已经浏览了各种关于让 Linux 系统使用 AD 进行身份验证的帖子,但没有看到任何接近我所反对的内容。

这里有很多设置,所以请耐心等待。

首先,我们的目标是让所有 Linux 和 Unix 系统都通过 AD 进行身份验证。对于几百个系统来说,这并非可选项;用户帐户管理早已不再是问题。

我们有几个 AD 实例:一个是“管理 AD”(“MAD”),所有系统管理员帐户都应驻留在该实例中。MAD 不信任其他域。所有其他域(“CAD”、“FAD”、“BAD”)都信任 MAD。大多数系统将与 CAD、FAD 或 BAD 相关联。只有内部系统将与 MAD 相关联。

主要平台是 RHEL,我同时拥有 5、6 和 7。5 不会很快消失,尽管不到一年 RH 就不再支持它了,但我仍然需要将 5 与 AD 集成。任何解决方案都需要在 5、6 和 7 上工作,因为我们不想支持多种做事方式。

我的主要选择(至少是我正在研究的)是 Winbind 和 SSSD。如果要在两者之间选择,我更喜欢 SSSD,因为 Winbind“相当老旧”。还有一个要求是“groups”和“id”从 AD 中生成信息,因为我们打算使用 openssh 的“AllowGroups”功能将登录限制到特定的 AD 组。

我遵循了每本手册、每条操作指南和每条指南,但当需要做这些事情时,总有一些小事情似乎没有得到有用的记录,阻碍着我。

总体而言,我对 unix/linux 相当熟悉,但对 AD、Kerberos 或 LDAP 不太熟悉。

为了实验目的,我首先从 ISO 开始全新安装 RHEL7(使用一些基本配置进行启动),并且未在 KS 中设置任何身份验证位。

步骤 1:同步时间。完成。

第 2 步:安装/激活 oddjob。完成。

步骤 3:确保目标系统有正向和反向 DNS 条目。完成。手动操作,因为到目前为止,我不能依赖后续步骤来确保正确。我会应付的。

步骤 4:配置 Kerberos。/etc/krb5.conf 的净化版本:

includedir /var/lib/sss/pubconf/krb5.include.d/
[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 default_realm = CAD.LAB
 dns_lookup_realm = true
 dns_lookup_kdc = true
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true

[realms]
 CAD.LAB = {
  kdc = cad_dc_01.cad.lab
 }

[domain_realm]
 .cad.lab = CAD.LAB
 cad.lab = CAD.LAB

步骤 5:设置 samba.conf 以满足 SSSD 的要求。/etc/samba/smb.conf [globals] 部分,已清理:

[global]
workgroup = CAD
client signing = yes
client use spnego = yes
kerberos method = secrets and keytab
log file = /var/log/samba/%m.log
log level = 0
password server = cad_dc_01.cad.lab
realm = CAD.LAB
security = ads

步骤 6:将系统加入 CAD。“kinit Administrator”,然后是“net ads join -k”。运行正常。

步骤 7:配置 SSSD。清理后的 /etc/sss/sssd.conf:

[sssd]
domains = CAD
services = nss, pam
config_file_version = 2
cache_credentials = true
debug_level = 7

[domain/CAD]
enumerate = true
# I know enumerate will cause problems later, I'm only turning it on for lab
debug_level = 7
id_provider = ad
ad_server = cad_dc_01.cad.lab
auth_provider = ad
chpass_provider = ad
access_provider = ad
default_shell = /bin/bash
fallback_homedir = /home/%u

[nss]
debug_level = 7

[pam]
debug_level = 7

接下来是“systemctl start sssd”。这似乎有效,但没有 AD 登录有效。

浏览 /var/log/sssd/sssd_CAD.log,我发现了一些线索,可以告诉我哪里出了问题,但我没能找到解决方法:我读过的每一份指南都给出了一系列步骤,并假设每个步骤都有效。当其中一个步骤不起作用时,我没有找到任何东西可以帮助我找出问题所在。

除非有人要求,否则我不会发布整个 sssd_CAD.log,但这是表明出现问题的第一个指标。

(Tue May 31 12:35:05 2016) [sssd[be[CAD]]] [ad_set_sdap_options] (0x0100): Option krb5_realm set to CAD
(Tue May 31 12:35:05 2016) [sssd[be[CAD]]] [sdap_set_sasl_options] (0x0100): Will look for rhel7lab.CAD.LAB@CAD in default keytab
(Tue May 31 12:35:05 2016) [sssd[be[CAD]]] [select_principal_from_keytab] (0x0200): trying to select the most appropriate principal from keytab
(Tue May 31 12:35:05 2016) [sssd[be[CAD]]] [find_principal_in_keytab] (0x0400): No principal matching rhel7lab.CAD.LAB@CAD found in keytab.
(Tue May 31 12:35:05 2016) [sssd[be[CAD]]] [find_principal_in_keytab] (0x0400): No principal matching rhel7lab$@CAD found in keytab.
(Tue May 31 12:35:05 2016) [sssd[be[CAD]]] [find_principal_in_keytab] (0x0400): No principal matching host/rhel7lab.CAD.LAB@CAD found in keytab.
(Tue May 31 12:35:05 2016) [sssd[be[CAD]]] [find_principal_in_keytab] (0x0400): No principal matching *$@CAD found in keytab.
(Tue May 31 12:35:05 2016) [sssd[be[CAD]]] [find_principal_in_keytab] (0x0400): No principal matching host/*@CAD found in keytab.
(Tue May 31 12:35:05 2016) [sssd[be[CAD]]] [match_principal] (0x1000): Principal matched to the sample (host/*@(null)).
(Tue May 31 12:35:05 2016) [sssd[be[CAD]]] [select_principal_from_keytab] (0x0200): Selected primary: host/rhel7lab.CAD.LAB
(Tue May 31 12:35:05 2016) [sssd[be[CAD]]] [select_principal_from_keytab] (0x0200): Selected realm: CAD.LAB

后面的条目抱怨 sssd_ad 没有连接到 AD,但根据我在这里看到的情况,这并不奇怪。

因此:带有 timesync/krb5.conf/smb.conf 的新映像已完成,现在是“kinit Administrator”,然后是“klist”

[root@rhel7lab]# kinit Administrator
Password for [email protected]: 
[root@rhel7lab]# net ads join -k
Using short domain name -- CAD
Joined 'RHEL7LAB' to dns domain 'CAD.dev'
[root@rhel7lab]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: [email protected]

Valid starting       Expires              Service principal
05/31/2016 12:46:35  05/31/2016 22:46:35  krbtgt/[email protected]
        renew until 06/07/2016 12:46:30
05/31/2016 12:46:39  05/31/2016 22:46:35  cifs/[email protected]
        renew until 06/07/2016 12:46:30
05/31/2016 12:46:39  05/31/2016 22:46:35  ldap/[email protected]
        renew until 06/07/2016 12:46:30
[root@rhel7lab]# 

我猜这个列表应该更长,但由于我对 kerb 不是很了解,我不知道这是否真的正确,如果不知道它应该是什么样子,也不知道如何将它放到那里。

我对这件事已经忍无可忍了,开始认为做三明治会是一个不那么烦人的职业选择。

非常感谢大家的任何指导。如果我需要在这里添加更多内容,只需说一声,它就会上传。

谢谢,-9

答案1

你的 SSSD 配置可能是罪魁祸首:

在 keytab 中未找到与 rhel7lab.CAD.LAB@CAD 匹配的主体。

难道不应该[电子邮件保护],根据 klist 输出?

您可以尝试这个 SSSD conf(注意默认后缀):

[sssd]
domains = CAD
default_domain_suffix = CAD.LAB
services = nss, pam
config_file_version = 2
cache_credentials = true
debug_level = 7

重新启动 SSSD,看看是否有效?

答案2

我不确定它是否直接解决了您的问题,但您尝试过 realmd 吗?它会conf自动处理大量文件设置。这往往会产生更可预测的错误,并且消息更容易在 Google 上找到。

就您而言,混合大小写的 keytab 搜索对我来说看起来是错误的:

rhel7lab.CAD.LAB

您的hostnamehosts条目是否大写?Kerberos 领域应该全部大写,但我认为这不适用于其他任何领域。以下是在测试台“领域加入”期间生成的列表的示例:

LIN3$@LDAP.<REALM>.COM
host/LIN3@LDAP.<REALM>.COM
host/lin3.ldap.<domain>.com@LDAP.<REALM>.COM

相关内容