如何使用security / sssd将Active Directory与FreeBSD 10.0集成?


Answers:


14

有一些棘手的考虑因素可以使所有东西开箱即用。FreeBSD目前仅支持sssd1.9.6版本。因此,不支持企业主体名称。

如果您的域具有不匹配的UPN,则该域将无法登录,因为Kerberos身份验证将在此过程中失败,即使使用支持Kerberos的企业主名称的FreeBSD,sssd也无法处理这种情况。

因此,在您的实际版本中sssd,只能将用户主体名称包含在同一域名中,例如:

Domain Name = example.com
NetBIOS Name = EXAMPLE
User Principal Name:
username@example.com sAMAccountName: username

知道了这一点,我们就可以描述在FreeBSD中从AD成功验证用户身份的步骤。

1.配置Kerberos

创建/etc/krb5.conf具有以下内容的文件:

[libdefaults]
    default_realm = EXAMPLE.COM
    dns_lookup_realm = true
    dns_lookup_kdc = true
    ticket_lifetime = 24h
    renew_lifetime = 7d
    forwardable = yes

2.安装Samba 4.1并将其配置为加入域

安装Samba 4.1:

$ pkg install samba41

创建/usr/local/etc/smb4.conf具有以下内容的文件:

[global]
    security = ads
    realm = EXAMPLE.COM
    workgroup = EXAMPLE

    kerberos method = secrets and keytab

    client signing = yes
    client use spnego = yes
    log file = /var/log/samba/%m.log

要求管理员Kerberos票证:

$ kinit Administrator

然后加入域并创建密钥表

$ net ads join createupn=host/server-hostname.example.com@EXAMPLE.COM -k
$ net ads keytab create -k

3.安装具有Kerberos支持的sssd软件包和Cyrus SASL

安装所需的软件包:

$ pkg install sssd cyrus-sasl-gssapi

编辑文件/usr/local/etc/sssd/sssd.conf以匹配此设置:

[sssd]
    config_file_version = 2
    services = nss, pam
    domains = example.com

[nss]

[pam]

[domain/example.com]
    # Uncomment if you need offline logins
    #cache_credentials = true

    id_provider = ad
    auth_provider = ad
    access_provider = ad
    chpass_provider = ad

    # Comment out if the users have the shell and home dir set on the AD side
    default_shell = /bin/tcsh
    fallback_homedir = /home/%u

    # Uncomment and adjust if the default principal SHORTNAME$@REALM is not available
    #ldap_sasl_mech = GSSAPI
    #ldap_sasl_authid = SERVER-HOSTNAME$@EXAMPLE.COM

4.将sssd支持添加到nsswitch.conf

编辑文件/etc/nsswitch.conf以匹配此设置:

group: files sss
passwd: files sss

5.配置PAM以允许sssd身份验证并处理主目录创建

安装用于主目录创建的可选软件包:

$ pkg install pam_mkhomedir

修改必要的PAM领域以匹配此设置:

auth            sufficient      /usr/local/lib/pam_sss.so
account         required        /usr/local/lib/pam_sss.so        ignore_unknown_user
session         required        /usr/local/lib/pam_mkhomedir.so  mode=0700
session         optional        /usr/local/lib/pam_sss.so
password        sufficient      /usr/local/lib/pam_sss.so        use_authtok

6.切换到启用SASL的OpenLDAP Client

$ pkg remove -f openldap-client
$ pkg install openldap-sasl-client

7.最后确认一切正常

$ getent passwd <username>

您是否有针对FreeBSD 10.3的解决方案,在其中安装openldap-sasl-client会导致pkg删除sssd,ldb和samba44?使用您的答案时,我感觉我很亲近,但我只停留在这一部分。
bgStack15 '16

2

您在这里使用哪个Kerberos?内置的还是来自MIT的security / krb5?

在安装sssd时,它要求安装security / krb5,目前在FreeBSD中仍被视为试验性的。因此这个问题。

我在执行“ getent”命令时没有运气来获得AD用户/组。可能是由于NETBIOS名称与域名不同-例如,在我的情况下,域名是awningsign.com,而NETBIOS名称是DSP。

我仅配置了pam.d登录模块。为了成功进行身份验证,还需要编辑其他哪些pam模块?

任何其他信息将不胜感激!


我从基础上使用Heimdal Kerberos。未安装MIT Kerberos端口。
维尼修斯Ferrão

1

即使没有sssd,也可以从端口重新编译samba4来使用像Linux这样的winbind自动化。在启用sasl ldap之后,只需从端口重新编译samba4

    pkg remove samba41 
    pkg install cyrus-sasl-gssapi samba36-libsmbclient pam_mkhomedir ldb 
    pkg remove -f openldap-client 
    pkg install openldap-sasl-client 
    cd /usr/ports/security/sssd && make install

这将使用所需的所有支持(gssapi,ldap,kerberos)重新编译samba,然后像这样编辑nsswitch.conf。

passwd: files winbind
group: files winbind

如果可以使用本机Kerberos,为什么还要使用winbind和samba?
维尼修斯Ferrão

对于活动目录用户,kerberos用于密码和sso
elbarna 2015年

0

你好,

这是使用sssd v1.11.7的一个小更新

如果使用的是``id_provider = ad'',并且在sssd日志文件中看到以下错误:

/var/log/sssd/sssd_example.com.log
(Sun Oct  5 18:41:37 2014) [sssd[be[alidaho.com]]] [sasl_bind_send] (0x0020): ldap_sasl_bind failed (-12)[Not Supported]
(Sun Oct  5 18:41:37 2014) [sssd[be[alidaho.com]]] [sasl_bind_send] (0x0080): Extended failure message: [unknown error]

可以使用以下过程解决此问题并使AD集成正常工作。现在使用Samba支持构建sssd v1.11.7,需要从src sssd进行构建,因此其与libsasl2链接

​pkg remove samba41
pkg install cyrus-sasl-gssapi samba36-libsmbclient pam_mkhomedir ldb
pkg remove -f openldap-client
pkg install openldap-sasl-client
cd /usr/ports/security/sssd && make install

删除samba41的目的是什么?它仅适用于samba36吗?我遇到了这个确切的问题,但是如果不需要的话,我不想将版本回滚到3.6。
MikeyB 2015年

删除二进制文件samba41,然后从端口重新编译samba41(由sssd请求)。在我的情况下(全新安装10.1)samba41二进制文件不起作用,由ports编译的
samba41

0

这是我撰写本文时(6/2017)通过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内容。有一点要注意。
    • 转发各种程序包的依赖项(粗体显示有趣的deps,粗体显示倾斜的deps):

      • 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,即使我们将Heimdal作为基本软件包,它本身也需要MIT Kerberos。
        • adcliwant openldap-sasl-client,但其他软件包(包括的子依赖项sssd)pull in openldap-client,这与sasl客户端是互斥的(出于任何愚蠢的原因)。即使使用最少的二进制软件包集,安装也很麻烦。
        • 这些相关性在二进制回购软件包以及在端口树中构建的软件包中都存在。这需要一种烦人的特殊安装方法来获得我们需要的一切(下面介绍)。
    • 在撰写本文时,用于FreeBSD的SSSD的二进制pkg不包括SSSD中的AD支持。

      • 必须在启用了适当的(make config)选项的情况下构建SSSD的端口版本:
        • SMB
      • 当SSSD确实需要openldap-sasl-client正常运行时,它也希望引入openldap-client。
    • adcli存在pkg二进制版本,但在撰写本文时,它不起作用。
      • 同样,ports版本在启用适当选项的情况下进行了编译:
        • GSSAPI_MIT
    • cyrus-sasl-gssapi 是必需的,但是pkg二进制版本不起作用,并且具有奇数个依赖项问题,导致它删除了SSSD。
      • 从启用了MIT-KRB5选项的端口构建它:
        • GSSAPI_MIT
    • openldap-sasl-client 功能是必需的,但SSSD希望引入非SASL版本的openldap。
      • 为了使这项工作
        • 配置openldap-sasl-client与所述GSSAPI选择的(选项make config)的端口。
        • 做make in port来构建它
        • 在进行安装之前,请执行 pkg remove –f openldap-client
          • 这将删除openldap-client而不进行任何其他软件包(例如SSSD)的自动删除,并允许安装SASL版本
        • 进行安装 openldap-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-clientpkg remove –f openldap-client
        • 这摆脱了非SASL版本,并允许安装我们的版本
      • pkg add openldap-sasl-client-2.4.44.txz
        • 同样,您的版本可能有所不同
      • 您应该已经安装了必需的软件包。
      • 可能是可能做之前更改SSSD二进制的元数据pkg create,以取代的依赖openldap-clientopenldap-sasl-client去除需要这样做删除/重新安装。我没有时间考虑这样做。
        • 另外,还有SSSD的子依赖项也openldap-client可以引入,因此您也必须修复这些依赖项 。
      • 请注意,所有这些注释是截至本文撰写时截至端口树中当前这些软件包的版本以及它们与之关联的依赖关系。随着FreeBSD更新端口树和二进制文件,这一切可能会改变。也许有一天,我们将提供所有内容的二进制版本,该版本可以直接使用为AD功能配置的正确选项提取所有正确的依赖项。
    • Kerberos配置:

      • 样本/etc/krb5.conf文件:
[libdefaults]
   default_realm = MYDOMAIN.NET
   转发=真
#由于DNS SRV记录,通常您在AD环境中所需的全部内容
#将标识AD / KRB服务器/服务。注释掉,如果你
#想要手动指向您的AD服务器
dns_lookup_kdc = true
[领域]
   MYDOMAIN.NET = {
#如果您要​​手动指向与DNS中不同的AD服务器
#admin_server = adserver.mydomain.net
#kdc = adserver.mydomain.net
   }
[domain_realm]
   mydomain.net = MYDOMAIN.NET
   .mydomain.net = MYDOMAIN.NET
  • (缩进)
    • SSSD配置:
      • 本示例在AD中为用户和组假定POSIX属性,通常在替换现有的已建立UID和GID的现有环境时才需要。
      • 样本/usr/local/etc/sssd/sssd.conf文件:
[sssd]
config_file_version = 2
域= MYDOMAIN.NET
服务= nss,pam,pac
fallback_homedir = / home /%u

[域名/MYDOMAIN.NET]
id_provider =广告
access_provider =广告
auth_provider =广告
chpass_provider =广告
#使用AD POSIX属性,如果使用的是自动生成,请注释掉
#UID和GID。
ldap_id_mapping = False
cache_credentials = true
ad_server = adserver.mydomain.net
#如果您没有bash或AD帐户的loginShell中的任何内容
#属性已安装
overlay_shell = / bin / tcsh
  • (缩进)
    • PAM配置:
      • 由于OpenPAM的工作方式,在FreeBSD上配置PAM有点棘手。我不会详细介绍,但是要使用pam_sss for SSSD并使其工作,并且还需要passwd登录,您需要将pam_unix放入文件两次。据我了解,这与“在幕后”进行的第二次检查有关,该检查需要第二个pam_unix模块通过。
        • 这是/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
验证必填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_sss.so use_first_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

#次
#session可选pam_ssh.so want_agent
会话可选pam_sss.so
所需的会话pam_mkhomedir.so模式= 0700
所需的会话pam_permit.so

#密码
#password足够pam_krb5.so no_warn try_first_pass
#password足够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/system:

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

#认证
验证足够的pam_opie.so no_warn no_fake_prompts
验证必填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
#auth必需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

#次
#session可选pam_ssh.so want_agent
会话必需pam_lastlog.so no_fail
会话可选pam_sss.so
所需的会话pam_mkhomedir.so模式= 0700

#密码
#password足够pam_krb5.so no_warn try_first_pass
#password必需pam_unix.so no_warn try_first_pass
密码足够pam_unix.so no_warn try_first_pass nullok use_authtok
密码足够pam_sss.so use_authtok
#password必需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配置
#

#认证
验证足够的pam_rootok.so no_warn
验证足够的pam_self.so no_warn
身份验证必需的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命令出现问题。
      • 一个人仍然能够以suroot用户身份进入AD帐户,因为一旦成为​​root用户,su就不需要进行身份验证,并且帐户信息将通过SSSD通过名称服务开关提取。
      • 如果您确实要从一个用户(不是root用户)切换到另一个用户,则应sudo仅出于安全原因使用
      • 您也可以使用,ksu并且该方法可用于从用户A切换到用户B
        • Heimdal的ksu(中的/usr/bin)默认未设置SUID
          • 为了让Heimdal ksu工作,chmod u+s /usr/bin/ksu
        • MIT Kerberos(krb5安装在中的软件包/usr/local/bin)在安装时为SUID
      • 由于Heimdal是基本软件包的一部分,因此您将拥有两组Kerberos二进制文件。
        • 您可能需要调整默认路径,使其/usr/local/bin在之前/usr/bin,等等
      • ksu 将提示用户输入目标用户的AD / Kerberos密码
      • passwd即使您添加pam_sss.so到passwd PAM文件,也无法更改您的AD / Kerberos密码。该passwd二进制文件仅支持本地和NIS kpasswd用于更改AD / Kerberos服务器上的密码。
    • 名称服务开关:

      • /etc/nsswitch.conf文件应配置为将sss服务用于passwd和组。例:
        • group: files sss
        • passwd: files sss
    • 加入域:

      • * nixs上有两个主要工具可以加入您的linux系统
        • adcli
          • 这是我的首选工具。它工作得很好,并且所有操作都可以在单个命令行上完成。凭证可以非交互方式提供(通过标准输入等)
          • 不需要使用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进入主机的操作可能会失败。
        • Samba net实用程序
          • 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和本地passwd文件。
        • GSSAPICleanupCredentials yes
          • (可选)将kdestroy在注销后执行
        • GSSAPIStrictAcceptorCheck no
          • (可选)如果SSHD对其自己的主机名感到困惑,或者是多宿主的,或者使用其他服务主体与KDC通信,则通常需要此选项。通常,SSHD将使用服务主体host/<FQDN>@REALM与KDC进行通信,但有时会出错(例如,如果主机名与SSH服务器的DNS名称不匹配)。此选项允许SSHD使用/etc/krb5.keytab文件中的任何主体,包括适当的host/<FQDN>@REALM
      • 根据您使用的选项组合,您可能需要或不需要为KDC添加主机主体,以使主机的IPv4和IPv6地址ssh -K <ip>正常工作而无需提示输入密码(假设您已经完成“ kinit”操作,当然)。

希望对大家有帮助。在尝试使FBSD10和11与SSSD和AD服务器一起使用时,这基本上是从我自己的笔记中编译而来的。我遇到的最大问题是PAM配置,它们确实很奇怪,不能像在Linux(openpam中的bug?)和打包/依赖项下那样工作。如果您有其他方法,请随时发表评论。特别是如果您使它与内置的Heimdal Kerberos一起使用,例如ViníciusFerrão似乎在他的回答中做了。我没有尝试,因为SSSD始终坚持使用MIT krb5软件包。
jbgeek

更新了pam.d内容。我发现了openpam闪烁的原因并找到了解决方法(两次使用了pam_unix模块,因此它通过了登录成功所需的“隐藏”测试)。
jbgeek
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.