背景
我正在尝试以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
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
我使用 MMC 和 MMC 的区别在于
adtool
MMC 鼓励我初始化用户密码,但我忘记对使用adtool
. 以下步骤解决了它,并且可重现:在我最初的问题中,今天早上我在同事完成上述步骤设置密码后重新查询了原件
test-user
,所以输出显示密码已设置但昨晚我尝试登录时没有已设置,因此问题。当我今天再次尝试登录时,它成功了,经过一番调查,我发现这就是原因。现在,我只能推测为什么会出现“KDC不支持加密类型”的消息:因为没有密码,所以没有加密类型。如果我错了,我很想得到纠正。
TL; DR必须记住在使用
adtool
而不是 MMC 时解锁用户并设置他们的密码。我之前看到过由设置的帐户选项之一(在非 AWS 环境中)引起的类似错误,但我不记得是哪个确切的属性。
ADTool
与使用 MMC 创建的用户相比,使用创建的用户是否设置了任何额外的“选项” ?我不确定如何用LDAPSearch
. 我确实知道如何使用显示的两种方法。您还可以使用-prop *
withGet-Aduser
来显示所有属性。