AWS Directory Services Simple ADで作成したユーザーとして(SSH経由でsssd
を実行しているAmazonLinux EC2インスタンスに)ログインしようとしています。 Kerberosで認証し、LDAPでユーザーを識別しています(すべてsssd
を介して)。複数のプロキシサーバーを介してELBを介してSimpleADに接続します。
KerberosポートにTLSを使用するようにELBを構成すると、sssd
がKerberosサーバーに接続できず、ログインが失敗します。 TLSがなくても問題なく動作し、TLSなしでログインすると、資格情報がキャッシュされ、TLSをオンに戻してもログインは引き続き機能します。
RFC 6251 Kerberos V5をTLS経由で転送する方法について説明しているので、仮にこれは可能であるはずですよね?これを正しく行っていないのか、sssd
がKerberosoverTLSをサポートしていないのかわかりません。グーグルは実りあるものを何も生み出さず、manページには一見関連性のあるものは何もありません。
私はLDAPSがELBを介して完全に機能していることに注意してください。したがって、少なくとも、完全に軌道に乗っていないわけではないことを知っています。
どちらか教えてください:
sssd
はKerberosoverTLSをサポートしていませんこれはsssd
の出力からのものです。 IPアドレスを編集したことに注意してください。
(Thu Dec 31 18:36:43 2015) [[sssd[krb5_child[2780]]]] [sss_child_krb5_trace_cb] (0x4000): [2780] 1451587003.307171: Sending request (218 bytes) to MYTEAM.MYCOMPANY.INTERNAL
(Thu Dec 31 18:36:43 2015) [[sssd[krb5_child[2780]]]] [sss_child_krb5_trace_cb] (0x4000): [2780] 1451587003.307390: Initiating TCP connection to stream 1.2.3.4:88
(Thu Dec 31 18:36:43 2015) [[sssd[krb5_child[2780]]]] [sss_child_krb5_trace_cb] (0x4000): [2780] 1451587003.309053: Sending TCP request to stream 1.2.3.4:88
(Thu Dec 31 18:36:43 2015) [[sssd[krb5_child[2780]]]] [sss_child_krb5_trace_cb] (0x4000): [2780] 1451587003.310487: TCP error receiving from stream 1.2.3.4:88: 104/Connection reset by peer
(Thu Dec 31 18:36:43 2015) [[sssd[krb5_child[2780]]]] [sss_child_krb5_trace_cb] (0x4000): [2780] 1451587003.310609: Terminating TCP connection to stream 1.2.3.4:88
(Thu Dec 31 18:36:43 2015) [[sssd[krb5_child[2780]]]] [sss_child_krb5_trace_cb] (0x4000): [2780] 1451587003.310729: Sending initial UDP request to dgram 1.2.3.4:88
# Lots of other output...
(Thu Dec 31 18:36:58 2015) [sssd[be[myteam]]] [krb5_child_timeout] (0x0040): Timeout for child [2780] reached. In case KDC is distant or network is slow you may consider increasing value of krb5_auth_timeout.
(Thu Dec 31 18:36:58 2015) [sssd[be[myteam]]] [krb5_auth_done] (0x0020): child timed out!
SimpleADを中心とした私のアーキテクチャは次のようになります。
この設定により、AWSのSimple ADがLDAPSをサポートしていなくても、LDAPSを使用できるようになります。 Kerberos overTLSも使用できると思いました。
ELBのroute53レコードはdirectory.myteam.mycompany.com
ですが、SimpleADに使用したドメインはmyteam.mycompany.internal
です。
テラフォームを使用してアーキテクチャを作成しました。残りは無関係なので、ELBリソースの定義は次のとおりです。
resource "aws_elb" "proxy" {
name = "directory-proxy-pub"
subnets = ["${split(",", module.vpc.public_subnet_ids_dsv)}}"]
cross_zone_load_balancing = true
security_groups = [ "${aws_security_group.elb-proxy.id}" ]
listener {
lb_port = 636
lb_protocol = "ssl"
instance_port = 389
instance_protocol = "tcp"
ssl_certificate_id = "${var.my_cert}"
}
listener {
lb_port = 88
lb_protocol = "ssl"
instance_port = 88
instance_protocol = "tcp"
ssl_certificate_id = "${var.my_cert}"
}
health_check {
interval = 15
timeout = 5
unhealthy_threshold = 2
healthy_threshold = 3
target = "TCP:389"
}
tags {
Name = "directory-proxy"
}
}
私が使用している証明書は信頼できるCAからのものであり、*.myteam.mycompany.com
に指定されていることに注意してください。
/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
これらの2つのファイルに加えて、sshd_config
でパスワード認証を有効にし、Sudo authconfig --updateall --enablesssd --enablesssdauth
を使用してpamモジュールでsssdを有効にしました。
/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.2RFC 6251で達成したいことは、このスキームを実装する計画がないため、MIT Kerberosでは不可能です。ただし、MIT Kerberos 1.13 MicrosoftのActiveDirectoryがサポートするのと同じプロトコルであるMS-KKDCPをサポートすることにより、HTTPSを介したKerberosのプロキシをサポートします。MS-KKDCPのクライアント側もRHEL 7にバックポートされました( https://rhn.redhat.com /errata/RHSA-2015-0439.html )。
機能は、クライアントによるKerberosトラフィックのプロキシ機能に依存します。 RHEL 7/CentOS7で実行されているSSSDはそうすることができるはずです。 Amazon LinuxにはこのバージョンのKerberosライブラリがないので、あなたのアプローチは機能しないと思います。
さらに、AmazonのSimple ADは、Heimdalkerberosで構築されたSambaADです。また、MS-KKDCPをサポートしていないため、MS-KKDCPプロキシとして使用することはできません。