web-dev-qa-db-ja.com

sssdを介してKerberosover TLSを使用することは可能ですか?

バックグラウンド

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を介して完全に機能していることに注意してください。したがって、少なくとも、完全に軌道に乗っていないわけではないことを知っています。

TL; DR私の質問に答える方法

どちらか教えてください:

  • Kerberos over TLSを設定するときに私が間違っていること、または
  • 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を中心とした私のアーキテクチャは次のようになります。

Architecture diagram

この設定により、AWSのSimple ADがLDAPSをサポートしていなくても、LDAPSを使用できるようになります。 Kerberos overTLSも使用できると思いました。

ELBのroute53レコードはdirectory.myteam.mycompany.comですが、SimpleADに使用したドメインはmyteam.mycompany.internalです。

ELB構成

テラフォームを使用してアーキテクチャを作成しました。残りは無関係なので、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に指定されていることに注意してください。

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

これらの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 -aLinux 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.2
7
2rs2ts

RFC 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プロキシとして使用することはできません。

2
abbra