Я пытаюсь войти (через SSH в инстанс Amazon Linux EC2, работающий sssd
) в качестве пользователей, которых я создал в своем AWS Directory Services Simple AD. Я проверяю подлинность с помощью Kerberos и идентифицирую пользователя с помощью LDAP (все через sssd
.) Я подключаюсь к Simple AD через ELB через несколько прокси-серверов.
Когда я настраиваю ELB для использования TLS для порта Kerberos, sssd
не удается подключиться к серверу Kerberos, и вход в систему не выполняется. Без TLS он работает нормально, и как только я вхожу в систему без TLS, учетные данные кэшируются, и вход продолжает работать, когда я снова включаю TLS.
RFC 6251 представляет объяснение того, как Kerberos V5 может передаваться через TLS, так что гипотетически это должно быть возможно, верно? Я не уверен, правильно ли я делаю это или sssd
не поддерживает Kerberos через TLS. Поиск в Google не дает ничего плодотворного, и на страницах руководства нет ничего, казалось бы, важного.
Обратите внимание, что у меня LDAPS отлично работает через ELB, поэтому я, по крайней мере, знаю, что я не совсем сбился с пути.
Скажите мне либо:
sssd
не поддерживает Kerberos через TLSЭто из вывода 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!
Вот как выглядит моя архитектура вокруг Simple AD:
Эта настройка позволяет мне использовать LDAPS, хотя AWS Simple AD не поддерживает его. Я предполагал, что это также позволит мне использовать Kerberos поверх TLS.
Запись route53 для ELB: directory.myteam.mycompany.com
, но домен, который я использовал для Simple AD, это 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"
}
}
Обратите внимание, что сертификат, который я использую, получен от доверенного центра сертификации и указан для *.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
В дополнение к этим двум файлам я включил аутентификацию по паролю в sshd_config
и включил sssd в модулях pam с 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.2То, что вы хотите достичь с помощью RFC 6251, невозможно с MIT Kerberos, поскольку нет планов по реализации этой схемы. Однако, начиная с MIT Kerberos 1.13, существует поддержка проксирования Kerberos через HTTPS, поддерживая тот же протокол, который поддерживает Microsoft Active Directory, MS-KKDCP. Клиентская сторона для MS-KKDCP также была перенесена на RHEL 7 (https://rhn.redhat.com/errata/RHSA-2015-0439.html).
Функциональность зависит от способности клиентов проксировать трафик Kerberos. SSSD, работающий на RHEL 7 / CentOS 7, должен иметь такую возможность. Думаю, в Amazon Linux нет этой версии библиотеки Kerberos, поэтому ваш подход не сработает.
Кроме того, Amazon Simple AD - это Samba AD, созданная с использованием кербера Heimdal. Он также не поддерживает MS-KKDCP, поэтому не может использоваться в качестве прокси-сервера MS-KKDCP.