Openldap

AWS Simple AD:“KDC 不支持加密類型”用於使用 adtool 創建的使用者,但不使用 MS 管理控制台

  • July 28, 2016

背景

我正在嘗試以sssd我在 AWS Directory Services Simple AD 中創建的使用者身份登錄(通過 SSH,登錄到正在執行的 Amazon Linux EC2 實例)。我正在使用 kerberos 進行身份驗證並使用 LDAP 辨識使用者(全部通過sssd.)

問題

我無法以我創建的使用者身份登錄adtool,這意味著我很難自動將新使用者添加到我的 Simple AD。當我嘗試時,KDC 說它不支持加密類型(我假設這是使用者密碼?)請參閱下面的“錯誤消息”部分。

但是,我既可以作為內置管理員使用者登錄,也可以作為我通過 Microsoft 管理控制台在加入域的 Windows Server 2008 EC2 實例上創建的使用者登錄。所以我的設置有效,或者至少部分有效。

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 的架構:

架構圖

此設置使我能夠使用 LDAPS,即使 AWS 的 Simple AD 不支持它。

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
  • sssd1.12.2
  • adtool1.3.3
  • openldap-clients2.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: test-user@myteam.mycompany.internal
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: test-windows-2008@myteam.mycompany.internal
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

我使用 MMC 和 MMC 的區別在於adtoolMMC 鼓勵我初始化使用者密碼,但我忘記對使用adtool. 以下步驟解決了它,並且可重現:

$ adtool userunlock -w REDACTED_PASSWORD 'test-user'
$ adtool setpass -w REDACTED_PASSWORD  test-user REDACTED_PASSWORD

在我最初的問題中,今天早上我在同事完成上述步驟設置密碼後重新查詢了原件test-user,所以輸出顯示密碼已設置但昨晚我嘗試登錄時沒有已設置,因此問題。當我今天再次嘗試登錄時,它成功了,經過一番調查,我發現這就是原因。

現在,我只能推測為什麼會出現“KDC不支持加密類型”的消息:因為沒有密碼,所以沒有加密類型。如果我錯了,我很想得到糾正。

TL; DR必須記住在使用adtool而不是 MMC 時解鎖使用者並設置他們的密碼。

引用自:https://serverfault.com/questions/746157