这是我在撰写本文时(2017 年 6 月)通过 SSSD 与这些版本的 FreeBSD 进行 AD 集成的指南

这是我在撰写本文时(2017 年 6 月)通过 SSSD 与这些版本的 FreeBSD 进行 AD 集成的指南

我在使用 FreeBSD 10.3 时遇到了很多问题

我发现二进制包相当没用。我几乎必须构建所有东西才能让它们“工作”。我喜欢使用 adcli 工具加入域(比 samba 好多了)。但是 pkg 中的二进制版本不起作用。从 ports 构建它并启用所有显而易见的东西可以让它工作。

此时,我已经可以成功执行“getent”了,但无论我怎么尝试,它都不会对我的帐户进行身份验证。SSH、sudo,甚至直接运行登录,它的行为就像我的密码不正确一样。

我想知道我是否需要使用 heimdal krb 包而不是 MIT?

以下是我的相关配置:

krb5.conf:

[libdefaults]
   default_realm = MYDOMAIN-SR.NET
   forwardable = true
[realms]
   MYDOMAIN-SR.NET = {
      admin_server = ad.mydomain-sr.net
      kdc = ad.mydomain-sr.net
   }
[domain_realm]
   mydomain.net = MYDOMAIN-SR.NET
   .mydomain.net = MYDOMAIN-SR.NET
   MYDOMAIN.net = MYDOMAIN-SR.NET
   .MYDOMAIN.net = MYDOMAIN-SR.NET

nsswitch.conf:

#
# nsswitch.conf(5) - name service switch configuration file
# $FreeBSD: releng/10.3/etc/nsswitch.conf 224765 2011-08-10 20:52:02Z dougb $
#
#group: compat
group: files sss
#group_compat: nis
hosts: files dns
networks: files
#passwd: compat
passwd: files sss
#passwd_compat: nis
shells: files
services: compat
services_compat: nis
protocols: files
rpc: files

sssd.conf:

[sssd]
config_file_version = 2
#domains = mydomain-sr.net
domains = MYDOMAIN-SR.NET
services = nss, pam, pac
fallback_homedir = /home/%u
debug_level = 9

[pam]
pam_verbosity = 3

[domain/MYDOMAIN-SR.NET]
id_provider = ad
access_provider = ad
auth_provider = ad
chpass_provider = ad
ldap_id_mapping = False
#cache_credentials = true
cache_credentials = false
ad_server = ad.mydomain-sr.net
override_shell = /bin/tcsh
#ldap_sasl_canonicalize = false
#krb5_canonicalize = false

答案1

(从另一个问题复制而来。这些是我关于如何在具有现有 AD 基础设施的大型客户机上使所有这些工作正常进行的笔记/指南)

这是我在撰写本文时(2017 年 6 月)通过 SSSD 与这些版本的 FreeBSD 进行 AD 集成的指南

  • FreeBSD 10.3 和 11.0(10.3-RELEASE-p18 和 11.0-RELEASE-p9)
  • 安装(以及有趣的打包和依赖问题)
    • 所需的软件包似乎与 Heimdal Kerberos 不兼容,因此必须在启用 MIT Kerberos 标志的情况下安装和编译。这很可能是软件包依赖性问题,而不是实际的兼容性问题。

    • Heimdal 随基本系统一起安装,因此如果您安装 MIT Kerberos,则将留下两组 Kerberos 命令,一组在 中 /usr/bin,另一组在 中/usr/local/bin。由于基本系统文件似乎都不在包中,因此您不能简单地删除 Heimdal KRB 内容。需要注意这一点。

    • 各个软件包的前向依赖关系(有趣的依赖关系以粗体表示,冲突的依赖关系以粗体斜体表示):

      • net-mgmt/adcli:net/openldap24-sasl-client
      • security/cyrus-sasl2-gssapi: security/cyrus-sasl2
      • net/openldap24-sasl-client: security/cyrus-sasl2
      • security/sssd: security/nss
      • security/sssd:security/krb5
      • security/sssd: security/cyrus-sasl2
      • security/sssd:net/openldap24-client
      • security/sssd: lang/python27
      • security/sssd: lang/python2
      • security/sssd: dns/c-ares
      • security/sssd: devel/tevent
      • security/sssd: devel/talloc
      • security/sssd: devel/popt
      • security/sssd: devel/pcre
      • security/sssd: devel/libunistring
      • security/sssd: devel/libinotify
      • security/sssd: devel/gettext-runtime
      • security/sssd: devel/ding-libs
      • security/sssd: devel/dbus
      • security/sssd: databases/tdb
      • security/sssd: databases/ldb
    • 各个包的反向依赖关系:

      • net/openldap24-sasl-client: sysutils/msktutil
      • net/openldap24-sasl-client: net/nss-pam-ldapd-sasl
      • net/openldap24-sasl-client: net-mgmt/adcli
        • 我们看到sssd它需要 MIT Kerberos,尽管我们有 Heimdal 作为基础包
        • adcli需要openldap-sasl-client,但其他软件包(包括 的子依赖项sssd)会拉入openldap-client,而 是与 sasl 客户端互斥的(无论出于什么愚蠢的原因)。这使得安装有点麻烦,即使使用一组最小的二进制软件包。
        • 这些依赖关系对于二进制 repo 包和在 ports 树中构建的包都存在。这需要一种烦人的特殊安装方法来获得我们需要的一切(如下所述)。
    • 截至撰写本文时,FreeBSD 的 SSSD 二进制包不包括 SSSD 中的 AD 支持

      • 必须构建 SSSD 的端口版本并启用适当的 (make config) 选项:
        • SMB
      • SSSD 还想引入 openldap-client,但实际上它需要 openldap-sasl-client 才能正常运行。
    • pkg 二进制版本adcli存在,但在撰写本文时,还不起作用。

      • 再次强调,ports 版本是在启用了适当的选项的情况下进行编译的:
        • GSSAPI_MIT
    • cyrus-sasl-gssapi是必需的,但是 pkg 二进制版本不起作用,并且存在奇怪的依赖问题,导致它删除 SSSD。

      • 从启用了 MIT-KRB5 选项的端口构建它:
        • GSSAPI_MIT
    • openldap-sasl-client是功能所必需的,但 SSSD 想要引入非 SASL 版本的 openldap。

      • 为了实现这一目标
        • openldap-sasl-client使用在端口中GSSAPI选择的选项 ( )进行配置。make config
        • 在端口中进行构建
        • 在进行安装之前,请执行以下操作pkg remove –f openldap-client
          • 这将删除openldap-client任何其他软件包(如 SSSD),但不执行任何自动删除,并允许安装 SASL 版本
        • 执行 make installopenldap-sasl-client
          • 这会将其安装到系统中
    • 这将为具有 AD 功能的功能性 SSSD 提供所需的内容。

    • 请注意,如果您从端口编译 SSSD,它将引入大量依赖项,这将导致构建它们,并需要选择配置选项。

      • 建议您先使用 pkg install sssd 安装二进制包,然后使用pkg remove –f sssd
        • 这将导致 SSSD 需要引入大多数二进制包,并且无需在端口中构建所有这些依赖项,这需要相当长的时间。
      • 删除后,从端口重新安装 SSSD,并启用上述选项,您只需要重建上面提到的四个包即可获得正常工作的设置。
    • (可选)一切正常并经过验证后,您可以使用pkg create创建四个软件包的二进制包,并启用适当的选项,然后使用这些包,而不是在每个系统的端口中构建它们。二进制文件的安装遵循与端口构建过程类似的模式:

      • pkg install sssd-1.11.7_8.txz
        • 当然你的版本可能有所不同
        • 这将安装 SSSD 的二进制包并从 FreeBSD 存储库中提取所需的一切。
      • pkg add其他软件包(不是安装,而是添加),最后保存 openldap 包。
      • 在添加openldap-sasl-client之前pkg remove –f openldap-client
        • 这将删除非 SASL 版本并允许安装我们的版本
      • pkg add openldap-sasl-client-2.4.44.txz
        • 再次强调,你的版本可能有所不同
      • 您应该已经安装了所需的软件包。
      • 可能在执行 之前可以更改 SSSD 二进制文件的元数据,pkg create以替换对 的依赖,openldap-client从而openldap-sasl-client消除执行此删除/重新安装的需要。我还没有时间研究这样做。
        • 另外,SSSD 还有一些子依赖项也会被引入 openldap-client,因此您也必须修复它们。
      • 请注意,所有这些说明均基于这些软件包当前在 ports 树中的版本截至撰写本文时以及它们所关联的依赖项。随着 FreeBSD 更新端口树和二进制文件,这一切都可能发生变化。也许有一天,我们将拥有所有内容的二进制版本,它可以提取所有正确的依赖项,并为 AD 功能配置正确的选项。
    • Kerberos 配置:

      • 示例 /etc/krb5.conf 文件:
[libdefaults]
   default_realm = MYDOMAIN.NET
   可转发 = true
# 通常情况下,在 AD 环境中你需要的是 DNS SRV 记录
# 将识别 AD/KRB 服务器/服务。如果您
# 想要手动指向你的 AD 服务器
dns_lookup_kdc = true
[境界]
   MYDOMAIN.NET = {
# 如果您手动指向与 DNS 中不同的 AD 服务器
#admin_server = adserver.mydomain.net
#kdc = adserver.mydomain.net
   }
[域名]
   mydomain.net = MYDOMAIN.NET
   .mydomain.net = MYDOMAIN.NET
  • (缩进)
    • SSSD 配置:
      • 此示例假定 AD 中用户和组的 POSIX 属性,通常在替换已经建立 UID 和 GID 的现有环境时需要。
      • 示例 /usr/local/etc/sssd/sssd.conf 文件:
[sssd]
配置文件版本 = 2
域名 = MYDOMAIN.NET
服务 = nss、pam、pac
fallback_homedir = /home/%u

[域名/MYDOMAIN.NET]
id_provider = 广告
access_provider = 广告
auth_provider = 广告
chpass_provider = ad
# 使用 AD POSIX 属性,如果使用自动生成的,则注释掉
# UID 和 GID。
ldap_id_mapping = 假
缓存凭据 = true
ad_server = adserver.mydomain.net
# 如果你没有 bash,或者 AD 账户的 loginShell 中的任何内容
# 已安装属性
override_shell = /bin/tcsh
  • (缩进)
    • PAM 配置:
      • 由于 OpenPAM 的工作方式,FreeBSD 上的 PAM 配置有点棘手。
        • /etc/pam.d以下是我必须修改的文件列表,以使 SSSD 与 FreeBSD 一起工作:

/etc/pam.d/sshd:

#
#$FreeBSD: releng/11.0/etc/pam.d/sshd 197769 2009-10-05 09:28:54Z des $
#
#“sshd”服务的 PAM 配置
#

# 授权
身份验证充分 pam_opie.so no_warn no_fake_prompts
auth requisite pam_opieaccess.so no_warn allow_local
#auth 足够 pam_krb5.so no_warn try_first_pass
#auth 足够 pam_ssh.so no_warn try_first_pass
身份验证充分 pam_sss.so forward_pass
需要身份验证 pam_unix.so no_warn use_first_pass

# 帐户
需要帐户 pam_nologin.so
#需要帐户 pam_krb5.so
需要帐户 pam_login_access.so
帐户需要pam_unix.so
帐户足够的pam_sss.so

# 会议
#会话可选 pam_ssh.so want_agent
会话可选 pam_sss.so
会话需要 pam_mkhomedir.so 模式=0700
会话需要 pam_permit.so

# 密码
#密码足够 pam_krb5.so no_warn try_first_pass
#密码足够 pam_unix.so try_first_pass use_authtok nullok
密码足够 pam_unix.so try_first_pass use_authtok
密码足够 pam_sss.so use_authtok

/etc/pam.d/系统:

#
#$FreeBSD: releng/11.0/etc/pam.d/system 197769 2009-10-05 09:28:54Z des $
#
# 系统范围的默认值
#

# 授权
身份验证充分 pam_opie.so no_warn no_fake_prompts
auth requisite pam_opieaccess.so no_warn allow_local
#auth 足够 pam_krb5.so no_warn try_first_pass
#auth 足够 pam_ssh.so no_warn try_first_pass
#需要身份验证 pam_unix.so no_warn try_first_pass nullok
身份验证充分 pam_unix.so no_warn try_first_pass
身份验证充分 pam_sss.so use_first_pass
身份验证需要 pam_deny.so

# 帐户
#需要帐户 pam_krb5.so
需要帐户 pam_login_access.so
帐户需要pam_unix.so
帐户足够的pam_sss.so

# 会议
#会话可选 pam_ssh.so want_agent
会话需要 pam_lastlog.so no_fail
会话可选 pam_sss.so
会话需要 pam_mkhomedir.so 模式=0700

# 密码
#密码足够 pam_krb5.so no_warn try_first_pass
#需要密码 pam_unix.so no_warn try_first_pass
密码足够 pam_unix.so no_warn try_first_pass nullok use_authtok
密码足够 pam_sss.so use_authtok
#需要密码 pam_deny.so

/etc/pam.d/su:

#
#$FreeBSD: releng/11.0/etc/pam.d/su 219663 2011-03-15 10:13:35Z des $
#
#“su”服务的 PAM 配置
#

# 授权
auth 足够 pam_rootok.so no_warn
auth 足够 pam_self.so no_warn
auth requisite pam_group.so no_warn group=wheel root_only fail_safe ruser
授权包括 system.dist

# 帐户
帐户包括system.dist

# 会议
会话需要 pam_permit.so
  • (缩进)
    • 笔记:

      • system.dist是库存文件的副本/etc/pam.d/system。它包含在/etc/pam.d/su上面的文件中,以防止 su 命令出现问题。
      • 人们仍然可以su以 root 身份访问 AD 帐户,因为一旦成为​​ root,su就不需要进行身份验证,并且帐户信息会通过 SSSD 通过名称服务交换机提取。
      • 如果你确实想从一个用户(非root)切换到另一个用户,则应该sudo仅出于安全原因使用
      • 您还可以使用ksu和 来从用户 A 切换到用户 B
        • Heimdal ksu(在 中/usr/bin)默认未设置 SUID
          • 为了让 Heimdalksu发挥作用,chmod u+s /usr/bin/ksu
        • MIT Kerberos(krb5安装在/usr/local/bin)在安装时是SUID
      • 由于 Heimdal 是基础包的一部分,因此您将拥有两组 Kerberos 二进制文件。
        • 您可能需要调整默认路径,以便在此/usr/local/bin之前/usr/bin
      • ksu将提示用户输入目标用户的 AD/Kerberos 密码
      • passwdpam_sss.so即使您将其添加到 passwd PAM 文件中,也无法更改您的 AD/Kerberos 密码。passwd二进制文件仅支持本地和 NIS 用于kpasswd更改 AD/Kerberos 服务器上的密码。
    • 名称服务切换:

      • /etc/nsswitch.conf文件应配置为使用 sss 服务来处理密码和组。例如:
        • group: files sss
        • passwd: files sss
    • 加入域:

      • *nixs 上有两个主要工具可以加入你的 Linux 机器
        • adcli
          • 这是我最喜欢的工具。它工作得很好,所有操作都可以在单个命令行上完成。可以非交互地提供凭证(通过 stdin 等)
          • 使用前不需要做任何事情kinit,它会根据提供的凭证为您完成。
            • 例子:
              • adcli join -D mydomain.net -U Administrator--show-details –v
              • adcli join –H adclient.mydomain.net -D mydomain.net -U Administrator --show-details -v
                • 建议使用此形式,因为实用程序并不总是能正确确定 FQDN。当您提供与主机的正向和反向 DNS 匹配的 FQDN 时,将正确创建主体。如果实用程序使用错误的主机名(例如,不包括 DNS 域),则不会创建某些服务主体,并且 SSH 进入主机等操作可能会失败。
        • Sambanet实用程序
          • net实用程序是 Samba 套件的一部分。
          • 该实用程序需要在配置文件中设置域详细信息smb.conf,这使得使用起来更加困难和不方便,尤其是非交互式使用。
          • 此工具还要求您在使用之前通过 获取 Kerberos 票证kinit。同样,这更加不方便,并且使得在脚本中非交互使用时更加困难,因为有两个步骤而不是一个。
    • SSHD 注意事项:

      • 让 SSHD 与 AD 和 SSSD 协同工作通常相当简单
      • 需要添加以下选项/etc/ssh/sshd_config
        • GSSAPIAuthentication yes
          • 为 SSHD 启用 GSS API 身份验证。这将导致 SSHD 针对 AD KDC 进行身份验证
        • PasswordAuthentication yes
          • 允许用户使用密码登录。如果您希望用户在登录时获得 KRB5 票证,则必须启用该选项。如果不启用该选项,系统将无法解密 KDC 发送的 TGT。
        • ChallengeResponseAuthentication yes
          • 对于 FreeBSD 来说,这种方法似乎效果最好。
            • 确保PasswordAuthentication no在使用此选项时进行配置。
            • 这是我在 FreeBSD 中发现的唯一一种可以在登录时更改过期密码的方法。如果您使用其他方法,它会调用/bin/passwd,它不支持除 NIS 和本地密码文件之外的任何内容。
        • GSSAPICleanupCredentials yes
          • kdestroy(可选)退出时执行
        • GSSAPIStrictAcceptorCheck no
          • (可选)如果 SSHD 无法识别自己的主机名,或者为多宿主主机等,或者使用其他服务主体与 KDC 通信,则通常需要此选项。通常,SSHD 将使用服务主体与 KDC 通信host/<FQDN>@REALM,但有时会出错(例如,如果主机名与 SSH 服务器的 DNS 名称不匹配)。此选项允许 SSHD 使用文件中的任何主体/etc/krb5.keytab,其中包括正确的host/<FQDN>@REALM
      • 根据您使用的选项组合,您可能需要或不需要将主机主体添加到 KDC,以便主机的 IPv4 和 IPv6 地址可以正常ssh -K <ip>工作而无需提示输入密码(当然,假设您已经完成“kinit”)。

相关内容