在sssd
具有ADFT后端且Kerberos TGT正常工作的情况下,要通过FreeBSD 10.0中运行于Windows Server 2012 R2上的Active Directory上的Active Directory验证用户的必需步骤是什么?
在sssd
具有ADFT后端且Kerberos TGT正常工作的情况下,要通过FreeBSD 10.0中运行于Windows Server 2012 R2上的Active Directory上的Active Directory验证用户的必需步骤是什么?
Answers:
有一些棘手的考虑因素可以使所有东西开箱即用。FreeBSD目前仅支持sssd
1.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成功验证用户身份的步骤。
创建/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
创建/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
安装所需的软件包:
$ 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
编辑文件/etc/nsswitch.conf
以匹配此设置:
group: files sss
passwd: files sss
安装用于主目录创建的可选软件包:
$ 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的security / krb5?
在安装sssd时,它要求安装security / krb5,目前在FreeBSD中仍被视为试验性的。因此这个问题。
我在执行“ getent”命令时没有运气来获得AD用户/组。可能是由于NETBIOS名称与域名不同-例如,在我的情况下,域名是awningsign.com,而NETBIOS名称是DSP。
我仅配置了pam.d登录模块。为了成功进行身份验证,还需要编辑其他哪些pam模块?
任何其他信息将不胜感激!
即使没有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
你好,
这是使用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
安装(以及有趣的打包和依赖问题)
/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。adcli
want openldap-sasl-client
,但其他软件包(包括的子依赖项sssd
)pull in openldap-client
,这与sasl客户端是互斥的(出于任何愚蠢的原因)。即使使用最少的二进制软件包集,安装也很麻烦。在撰写本文时,用于FreeBSD的SSSD的二进制pkg不包括SSSD中的AD支持。
SMB
adcli
存在pkg二进制版本,但在撰写本文时,它不起作用。
GSSAPI_MIT
cyrus-sasl-gssapi
是必需的,但是pkg二进制版本不起作用,并且具有奇数个依赖项问题,导致它删除了SSSD。
GSSAPI_MIT
openldap-sasl-client
功能是必需的,但SSSD希望引入非SASL版本的openldap。
openldap-sasl-client
与所述GSSAPI
选择的(选项make config
)的端口。pkg remove –f openldap-client
openldap-client
而不进行任何其他软件包(例如SSSD)的自动删除,并允许安装SASL版本openldap-sasl-client
pkg remove –f sssd
(可选)一切正常且经过验证后,您可以使用已pkg create
启用适当选项的方式创建四个软件包的二进制软件包,并使用它们而不是在每个系统的端口中构建它们。二进制文件的安装与端口构建过程类似:
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
,以取代的依赖openldap-client
与openldap-sasl-client
去除需要这样做删除/重新安装。我没有时间考虑这样做。
openldap-client
可以引入,因此您也必须修复这些依赖项 。Kerberos配置:
[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] 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
/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命令出现问题。su
root用户身份进入AD帐户,因为一旦成为root用户,su
就不需要进行身份验证,并且帐户信息将通过SSSD通过名称服务开关提取。sudo
仅出于安全原因使用ksu
并且该方法可用于从用户A切换到用户B
ksu
(中的/usr/bin
)默认未设置SUID
ksu
工作,chmod u+s /usr/bin/ksu
krb5
安装在中的软件包/usr/local/bin
)在安装时为SUID/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
加入域:
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
实用程序是Samba套件的一部分。smb.conf
配置文件中设置域详细信息,这使得使用起来更加困难且不便,尤其是非交互方式。kinit
。同样,这更不方便,并且在脚本中非交互地使用它会更加困难,因为有两个步骤而不是一个步骤。
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>
正常工作而无需提示输入密码(假设您已经完成“ kinit”操作,当然)。