Логин c Kerberos при помощи смарткарты с сертификатом (pkinit) на Centos 6
Стоит задача настроить вход в систему с использованием Kerberos по смарткарте с сертификатом.
На месте есть Рутокен ЭЦП, хотя не думаю, что в данном случае есть разница, какое именно используется устройство. Пробовал 2 варианта: Kerberos (скорее всего MIT), который есть в EPEL и heimdal оттуда же. Результат, как ни странно, разный.
В случае с MIT получается получить тикет только по паролю. Как ни изощрялся, всё, к чему я пришёл - это запрос пароля токена, на который можно ответить что угодно, а затем запрос пароля (обычного), на который нужно ответить правильно, иначе тикета не получишь.
В heimdal настроить получение тикета по сертификату получилось почти сразу. При вводе команды heimdal-kinit --pk-user=PKCS11:/usr/lib64/librtpkcs11ecp.so user запрашивается пароль от токена и, при введении правильного пароля, тикет выдаётся.
$ heimdal-klist
Credentials cache: FILE:/tmp/krb5cc_0
Principal: user@HOST.LOCAL
Issued Expires Principal
Jun 1 11:46:47 2017 Jun 1 21:46:48 2017
krbtgt/HOST.LOCAL@HOST.LOCAL
Но настроить логин не получается. Не отрабатывается также и «su», на котором я потом решил это всё тестировать. Ниже привёл конфиги:
cat /etc/pam.d/smartcard-auth
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth optional pam_krb5.so use_first_pass no_subsequent_prompt preauth_options=X509_user_identity=PKCS11:/usr/lib64/librtpkcs11ecp.so
auth required pam_env.so
auth [success=ok ignore=2 default=die] pam_pkcs11.so wait_for_card card_only
auth sufficient pam_permit.so
auth required pam_deny.so
account required pam_unix.so broken_shadow
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 500 quiet
account [default=bad success=ok auth_err=ignore user_unknown=ignore ignore=ignore] pam_krb5.so
account required pam_permit.so
password required pam_pkcs11.so
session optional pam_keyinit.so revoke
session required pam_limits.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
session optional pam_krb5.so
cat /etc/pam.d/su
#%PAM-1.0
auth optional pam_krb5.so use_first_pass no_subsequent_prompt preauth_options=X509_user_identity=PKCS11:/usr/lib64/librtpkcs11ecp.so
auth sufficient pam_rootok.so
# Uncomment the following line to implicitly trust users in the «wheel» group.
#auth sufficient pam_wheel.so trust use_uid
# Uncomment the following line to require a user to be in the «wheel» group.
#auth required pam_wheel.so use_uid
auth include system-auth
account sufficient pam_succeed_if.so uid = 0 use_uid quiet
account include system-auth
password include system-auth
session include system-auth
session optional pam_xauth.so
Решил пока остановиться на heimdal, но, если получится настроить на MIT, то будет даже лучше. Для MIT настройки брал в основном отсюда: https://k5wiki.kerberos.org/wiki/Pkinit_configuration. Для heimdal - отсюда: http://samag.ru/archive/article/1667. Думаю, что проблема именно в PAM. Если кто-нибудь пытался настраивать pkinit с логином, отзовитесь пожалуйста.