在FreeBSD 10.0中运行Windows Server 2012 R2的Active Directory中使用sssd
与AD后端与Kerberos TGT一起工作,对用户进行身份validation所需的步骤是什么?
有一些棘手的考虑,使所有的东西都是现成的。 FreeBSD现在只支持sssd
版本1.9.6。 所以不支持企业主要名称。
如果你有一个不匹配UPN的域,它将无法login,因为在这个过程中Kerberosauthentication将失败,即使FreeBSD支持使用Kerberos的企业主体名称, sssd
也不能处理这种情况。
因此,在sssd
实际版本中,您仅限于在同一个域名中包含用户主体名称,例如:
Domain Name = example.com NetBIOS Name = EXAMPLE User Principal Name: [email protected] sAMAccountName: username
知道这一点,我们可以描述在FreeBSD上成功validationAD用户的步骤。
使用以下内容创build文件/etc/krb5.conf
:
[libdefaults] default_realm = EXAMPLE.COM dns_lookup_realm = true dns_lookup_kdc = true ticket_lifetime = 24h renew_lifetime = 7d forwardable = yes
安装Samba 4.1:
$ pkg install samba41
使用以下内容创build文件/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
询问pipe理员Kerberos票据:
$ kinit Administrator
然后join域并创build一个keytab
$ net ads join createupn=host/[email protected] -k $ net ads keytab create -k
安装所需的软件包
$ 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 = [email protected]
编辑文件/etc/nsswitch.conf
以匹配这个设置:
group: files sss passwd: files sss
安装用于创build主目录的可选软件包:
$ 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
$ pkg remove -f openldap-client $ pkg install openldap-sasl-client
$ getent passwd <username>
你在用哪个Kerberos? 内置的MIT或安全/ krb5?
在安装sssd时,需要安装secure / krb5,目前在FreeBSD上仍然被认为是实验性的。 因此这个问题。
在执行“getent”命令时,我没有任何运气获取AD用户/组。 这可能是由于NETBIOS名称与域名不同,在我的情况下,域名是dawnsign.com,NETBIOS名称是DSP。
我只configuration了pam.dlogin模块。 还有哪些其他pam模块需要进行编辑才能成功进行身份validation?
任何额外的信息将不胜感激!
从端口重新编译samba4是可能的,即使没有sssd,也可以使用像linux一样的winbindauthentication。 在启用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)桑巴然后编辑nsswitch.conf像这样
passwd: files winbind group: files winbind
你好,
这是使用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支持构buildsssd v1.11.7,需要从src构buildsssd,以便与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
安装(以及有趣的打包和依赖性问题)
/usr/bin
,另一个设置在/usr/local/bin
,则会为您提供两套Kerberos命令。 由于没有基本系统文件似乎在一个包中,你不能简单地删除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,尽pipe我们有Heimdal作为基础包 adcli
openldap-sasl-client
,但其他软件包(包括sssd
子依赖sssd
)需要拉入openldap-client
,这是与sasl客户端互斥(无论什么原因)。 即使使用最less的二进制包,这也会使安装变得有点痛苦。 在撰写本文时,FreeBSD的SSSD二进制包不包括SSSD中的AD支持
SMB
adcli
的pkg二进制版本存在,但在撰写本文时不起作用。
GSSAPI_MIT
cyrus-sasl-gssapi
是必需的,但pkg二进制版本不起作用,并且具有奇怪的相关性问题,导致它删除SSSD。
GSSAPI_MIT
openldap-sasl-client
是function所必需的,但SSSD想要拉入非SASL版本的openldap。
GSSAPI
选项( make config
)来configurationopenldap-sasl-client
。 pkg remove –f openldap-client
openldap-client
而不做任何其他包的自动删除(如SSSD),并允许安装SASL版本 openldap-sasl-client
进行make install
pkg remove –f sssd
删除它
(可选)一切正常并validation完毕后,可以使用pkg create
创build启用了适当选项的四个软件包的二进制包,并使用这些包而不是在每个系统的端口上构build它们。 二进制安装遵循与端口构build过程类似的模式:
pkg install sssd-1.11.7_8.txz
pkg add
其他软件包(不安装,添加),最后保存openldap软件包。 openldap-sasl-client
请执行pkg remove –f openldap-client
pkg add openldap-sasl-client-2.4.44.txz
pkg create
之前, 可能会更改SSSD二进制文件的元数据,以便用openldap-sasl-client
replace对openldap-client
的依赖关系,以便删除/重新安装。 我没有时间去研究这个。
openldap-client
,所以你也必须修复这些依赖关系。 Kerberosconfiguration:
[libdefaults] default_realm = MYDOMAIN.NET 可转换= true #通常情况下,你需要在AD环境中,因为DNS SRVlogging #将识别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] config_file_version = 2 域= MYDOMAIN.NET 服务= nss,pam,pac fallback_homedir = / home /%u [域/ MYDOMAIN.NET] id_provider = ad access_provider = ad auth_provider = ad chpass_provider = ad #使用AD POSIX属性 ldap_id_mapping = False cache_credentials = true ad_server = adserver.mydomain.net #如果您没有bash,或AD帐户的loginShell中有任何内容 #属性安装 override_shell = / bin / tcsh
authconfig
style命令为SSSD正确设置PAM文件。 相反,您必须直接编辑文件。 pam_opie.so
和pam_opieaccess.so
行,PAM将允许用户在没有密码的情况下,或者根本不会让任何人login。我试图做这个工作,但似乎是不可能。
sshd
, sudo
, su
, login
和大多数正常的服务与SSSD和AD一起工作,我不得不修改sshd
和system pam.d
文件,还要创build一个默认系统文件的副本,我称其为system.dist
,并将其包含在su
文件中而不是修改后的系统中。 否则su
停止工作。 /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”服务的PAMconfiguration # #auth #禁用禁用。 启用opie似乎打破了添加其他的东西 #modules,如pam_sss.so。 它打破了任何人都可以login的方式 #if pam_sss.so设置为必需,它打破本地loginw /密码 #足够的pam_opie.so no_warn no_fake_prompts #auth requisite pam_opieaccess.so no_warn allow_local #足够的pam_krb5.so no_warn try_first_pass #足够的pam_ssh.so no_warn try_first_pass auth足够pam_unix.so no_warn try_first_pass nullok auth足够pam_sss.so use_first_pass #如果在sshd_conf中使用PasswordAuthentification yes,则这些行是必需的 #而不是ChallengeResponseAuthentication是的。 如果你使用 #ChallengeResponseAuthentication yes然后注释掉这些行。 然而 #如果使用PasswordAuthentification yes,则在login时更改密码(过期 #密码)将不起作用,因为这会导致sshd调用/ bin / passwd,哪个 #在FreeBSD上不支持KRB。 ChallengeResponeAuthentification会的 #工作,但会要求你的旧密码两次。 #auth需要pam_deny.so #帐户 需要帐户pam_nologin.so #account需要pam_krb5.so 需要帐户pam_login_access.so 帐户需要pam_unix.so 足够的帐户pam_sss.so #会话 #session可选pam_ssh.so want_agent 会话可选pam_sss.so #安装security / pam_mkhomedir,并取消注释,自动制作家用目录 #session需要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 $ # #系统范围的默认值 # #auth auth足够pam_opie.so no_warn no_fake_prompts auth requisite pam_opieaccess.so no_warn allow_local #足够的pam_krb5.so no_warn try_first_pass #足够的pam_ssh.so no_warn try_first_pass #auth需要pam_unix.so no_warn try_first_pass nullok validation足够的pam_unix.so no_warn try_first_pass auth足够pam_sss.so use_first_pass auth需要pam_deny.so #帐户 #account需要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 #安装security / pam_mkhomedir,并取消注释,自动制作家用目录 #session需要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
/etc/pam.d/su中:
# #$ FreeBSD:releng / 11.0 /etc/pam.d/ su 219663 2011-03-15 10:13:35Z des $ # #“su”服务的PAMconfiguration # #auth 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 auth包含system.dist #帐户 账户包括system.dist #会话 会话需要pam_permit.so
(缩进)
system.dist
是股票/etc/pam.d/system
文件的副本。 它包含在上面的/etc/pam.d/su
文件中,以防止su命令出现问题。 su
不需要authentication,帐户信息通过名称服务开关通过SSSD拉。 sudo
ksu
,并且用于从用户A切换到用户B.
ksu
(在/usr/bin
)默认没有设置SUID
ksu
工作, chmod u+s /usr/bin/ksu
/usr/local/bin
krb5
软件包)在安装时是SUID /usr/local/bin
位于/usr/bin
之前 ksu
将提示用户input目标用户的AD / Kerberos密码 pam_sss.so
添加到passwd PAM文件, passwd
也无法更改您的AD / Kerberos密码。 passwd
二进制文件仅支持本地和NIS使用kpasswd
在AD / Kerberos服务器上更改您的密码。 名称服务开关:
/etc/nsswitch.conf
文件configuration为使用密码和组的sss服务。 例:
group: files sss
passwd: files sss
join域名:
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
net
实用程序
net
utility是Samba套件的一部分。 smb.conf
configuration文件中设置域详细信息,这使得使用起来更加困难和不便,特别是非交互式。 kinit
之前获取Kerberos票证。 再次,这是更不方便的,并且使得在脚本中非交互地使用有点困难,因为有两个步骤而不是一个步骤。 SSHD注意事项:
/etc/ssh/sshd_config
GSSAPIAuthentication yes
PasswordAuthentication yes
ChallengeResponseAuthentication yes
PasswordAuthentication no
。 /bin/passwd
,除了NIS和本地passwd文件之外,它不支持任何内容。 GSSAPICleanupCredentials yes
kdestroy
GSSAPIStrictAcceptorCheck no
host/<FQDN>@REALM
与KDC通话,但有时会出错(例如,如果主机名与SSH服务器的DNS名称不匹配)。 此选项允许SSHD使用/etc/krb5.keytab
文件中的任何主体,其中包括正确的host/<FQDN>@REALM
ssh -K <ip>
在不提示input密码的情况下工作(假定您已完成当然已经是'kinit'了)。