背景
我正在尝试以我在 AWS Directory Services Simple AD 中创建的用户身份登录(通过 SSH,登录到运行的 Amazon Linux EC2 实例sssd
)。我正在使用 kerberos 进行身份验证,并使用 LDAP 识别用户(全部通过sssd
)。
问题
我无法以我创建的用户身份登录adtool
,这意味着我很难自动将新用户添加到我的 Simple AD。当我尝试时,KDC 说它不支持加密类型(我猜这是针对用户密码的?)请参阅下面的“错误消息”部分。
但是,我能在加入域的 Windows Server 2008 EC2 实例上,以内置管理员用户和通过 Microsoft 管理控制台创建的用户身份登录。因此我的设置有效,或者至少部分有效。
TL;DR 需要解决方案
我需要知道我做错了什么,导致adtool
我无法以他们创建的用户身份登录。我做错了什么并不明显,我认为这对那些试图做与我类似事情的人可能很有用。详情如下。
错误信息
sssd
这是尝试以使用以下命令创建的用户身份登录时的输出adtool
:
(Thu Dec 31 15:35:35 2015) [[sssd[krb5_child[5459]]]] [sss_child_krb5_trace_cb] (0x4000): [5459] 1451576135.446649: Response was from master KDC
(Thu Dec 31 15:35:35 2015) [[sssd[krb5_child[5459]]]] [sss_child_krb5_trace_cb] (0x4000): [5459] 1451576135.446788: Received error from KDC: -1765328370/KDC has no support for encryption type
(Thu Dec 31 15:35:35 2015) [[sssd[krb5_child[5459]]]] [get_and_save_tgt] (0x0020): 996: [-1765328370][KDC has no support for encryption type]
(Thu Dec 31 15:35:35 2015) [[sssd[krb5_child[5459]]]] [map_krb5_error] (0x0020): 1065: [-1765328370][KDC has no support for encryption type]
(Thu Dec 31 15:35:35 2015) [[sssd[krb5_child[5459]]]] [k5c_send_data] (0x0200): Received error code 1432158209
从客户端来看Permission denied, please try again.
建筑学
以下是我围绕 Simple AD 的架构:
即使 AWS 的 Simple AD 不支持 LDAPS,此设置也使我能够使用 LDAPS。
ELB 的 route53 记录是directory.myteam.mycompany.com
,但我用于 Simple AD 的域是myteam.mycompany.internal
。
运行 sssd 的机器上的配置
/etc/sssd/sssd.conf
:
[sssd]
config_file_version = 2
reconnection_retries = 3
sbus_timeout = 30
services = nss, pam
domains = myteam
[nss]
default_shell = /bin/bash
fallback_homedir = /home/%u
ldap_user_home_directory = unixHomeDirectory
[pam]
reconnection_retries = 3
offline_credentials_expiration = 2
offline_failed_login_attempts = 3
offline_failed_login_delay = 5
[domain/myteam]
enumerate = true
cache_credentials = TRUE
id_provider = ldap
ldap_uri = ldaps://directory.myteam.mycompany.com
ldap_tls_cacert = /etc/pki/tls/certs/ca-bundle.crt
ldap_default_bind_dn = CN=test-user,CN=users,DC=myteam,DC=mycompany,DC=internal
ldap_default_authtok = REDACTED_PASSWORD
ldap_id_use_start_tls = true
ldap_schema = AD
ldap_force_upper_case_realm = true
ldap_id_mapping = true
ldap_search_base = CN=users,DC=myteam,DC=mycompany,DC=internal
ldap_user_uuid = none
ldap_group_uuid = none
chpass_provider = krb5
auth_provider = krb5
krb5_server = directory.myteam.mycompany.com
krb5_realm = MYTEAM.MYCOMPANY.INTERNAL
krb5_changepw_principal = kadmin/changepw
krb5_ccachedir = /tmp
krb5_ccname_template = FILE:%d/krb5cc_%U_XXXXXX
krb5_auth_timeout = 15
krb5_canonicalize = True
/etc/sysconfig/authconfig
:
IPADOMAINJOINED=no
USEMKHOMEDIR=yes
USEPAMACCESS=no
CACHECREDENTIALS=yes
USESSSDAUTH=yes
USESHADOW=yes
USEWINBIND=no
PASSWDALGORITHM=sha512
FORCELEGACY=yes
USEFPRINTD=no
FORCESMARTCARD=no
USEDB=no
USELDAPAUTH=no
USEPASSWDQC=no
IPAV2NONTP=no
WINBINDKRB5=no
USELOCAUTHORIZE=yes
USEECRYPTFS=no
USECRACKLIB=yes
USEIPAV2=no
USEWINBINDAUTH=no
USESMARTCARD=no
USELDAP=yes
USENIS=no
USEKERBEROS=no
USESYSNETAUTH=no
USESSSD=yes
USEPWQUALITY=yes
USEHESIOD=no
除了这两个文件之外,我还确保sshd_config
在 pam 模块中启用了密码验证并启用了 sssd sudo authconfig --updateall --enablesssd --enablesssdauth
。
/etc/pam.d/system-auth
:
auth required pam_env.so
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 500 quiet_success
auth sufficient pam_sss.so use_first_pass
auth required pam_deny.so
account required pam_unix.so
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 500 quiet
account [default=bad success=ok user_unknown=ignore] pam_sss.so
account required pam_permit.so
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password sufficient pam_sss.so use_authtok
password required pam_deny.so
session optional pam_keyinit.so revoke
session required pam_limits.so
-session optional pam_systemd.so
session optional pam_mkhomedir.so umask=0077
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
session optional pam_sss.so
软件版本
uname -a
:Linux ip-172-31-31-2 4.1.10-17.31.amzn1.x86_64 #1 SMP Sat Oct 24 01:31:37 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
sssd
1.12.2adtool
1.3.3openldap-clients
2.4.23-34.25.amzn1
用户之间的差异
ldapsearch
为了显示这些用户在我的目录中有何不同,下面是从运行的实例中查询他们的输出sssd
。
用户创建adtool
(编辑:您将在下面看到该pwdLastSet
值存在,我相信它之前并不存在,它的存在是我答案的关键):
$ ldapsearch -LLL -H ldaps://directory.myteam.mycompany.com -D CN=Administrator,CN=users,DC=myteam,DC=mycompany,DC=internal -x -W '(cn=test-user)'
Enter LDAP Password:
dn: CN=test-user,CN=Users,DC=myteam,DC=mycompany,DC=internal
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: user
cn: test-user
instanceType: 4
whenCreated: 20151230204358.0Z
displayName: Test user
uSNCreated: 3532
name: test-user
objectGUID:: ZhfGzcqLd06x2UBU3UNiZQ==
codePage: 0
countryCode: 0
primaryGroupID: 513
objectSid:: AQUAAAAAAAUVAAAAHWfr9xoaXwKvEcuoUwQAAA==
accountExpires: 9223372036854775807
sAMAccountName: test-user
sAMAccountType: 805306368
userPrincipalName: [email protected]
objectCategory: CN=Person,CN=Schema,CN=Configuration,DC=myteam,DC=mycompany,DC
=internal
userAccountControl: 512
lockoutTime: 0
whenChanged: 20151231150317.0Z
uSNChanged: 3619
pwdLastSet: 130960477970000000
distinguishedName: CN=test-user,CN=Users,DC=myteam,DC=mycompany,DC=internal
通过 Microsoft 管理控制台创建的用户:
$ ldapsearch -LLL -H ldaps://directory.myteam.mycompany.com -D CN=Administrator,CN=users,DC=myteam,DC=mycompany,DC=internal -x -W '(sAMAccountName=test-windows-2008)'
Enter LDAP Password:
dn: CN=Test User,CN=Users,DC=myteam,DC=mycompany,DC=internal
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: user
cn: Test User
sn: User
givenName: Test
instanceType: 4
whenCreated: 20151230223533.0Z
whenChanged: 20151230223534.0Z
displayName: Test User
uSNCreated: 3563
uSNChanged: 3563
name: Test User
objectGUID:: 2cuynP3/9EeRIm1fCUJ9jA==
userAccountControl: 512
codePage: 0
countryCode: 0
pwdLastSet: 130959885340000000
primaryGroupID: 513
objectSid:: AQUAAAAAAAUVAAAAHWfr9xoaXwKvEcuoVwQAAA==
accountExpires: 9223372036854775807
sAMAccountName: test-windows-2008
sAMAccountType: 805306368
userPrincipalName: [email protected]
objectCategory: CN=Person,CN=Schema,CN=Configuration,DC=myteam,DC=mycompany,DC
=internal
distinguishedName: CN=Test User,CN=Users,DC=myteam,DC=mycompany,DC=internal
答案1
我使用的 和 MMC 之间的区别adtool
在于,MMC 鼓励我初始化用户密码,但我忘记对使用 创建的用户执行相同的操作adtool
。以下步骤解决了该问题,并且可以重现:
$ adtool userunlock -w REDACTED_PASSWORD 'test-user'
$ adtool setpass -w REDACTED_PASSWORD test-user REDACTED_PASSWORD
在我最初的问题中,今天早上,在一位同事按照上述步骤设置密码后,我重新查询了原始test-user
问题,因此输出显示密码已设置,但昨晚我尝试登录时密码尚未设置,因此出现了问题。当我今天再次尝试登录时,它成功了,经过一番侦查,我发现这就是原因。
现在,我只能猜测为什么会出现“KDC 不支持加密类型”消息:因为没有密码,所以没有加密类型。如果我错了,我很乐意得到纠正。
总结adtool
使用MMC时必须记住解锁用户并设置密码。
答案2
我之前曾见过类似的错误,这是由设置其中一个帐户选项(在非 AWS 环境中)引起的,但我不记得具体是哪个属性。ADTool
与使用 MMC 创建的用户相比,使用 创建的用户是否设置了任何额外的“选项”?我不确定如何使用 显示这些选项LDAPSearch
。我确实知道如何使用两种方法显示。您还可以使用-prop *
显示Get-Aduser
所有属性。
PS C:\temp> get-aduser mbe998 -prop DoesNotRequirePreAuth,UseDESKeyOnly
DistinguishedName : CN=Mary Brown,OU=Junk,DC=acme,DC=com
DoesNotRequirePreAuth : True
Enabled : False
GivenName : Mary
Name : Mary Brown
ObjectClass : user
ObjectGUID : f7f30ebe-f91d-41de-b38e-ae29853b7291
SamAccountName : mbe998
SID : S-1-5-21-3362165994-992225803-2260058754-129428
Surname : Brown
UseDESKeyOnly : True
UserPrincipalName : [email protected]