Назад | Перейти на главную страницу

Может ли ssh сгенерировать билет Kerberos? (FreeBSD)

TL; DR

Я хочу иметь возможность передавать ssh с хоста FreeBSD на хост FreeBSD, используя свой билет Kerberos, сгенерированный при первом входе в систему.

Вопрос

Окружающая среда

FreeBSD 10.3 с работающим openldap-sasl-client, kerberos 5 (не heimdal), sssd, ssh и присоединен к Active Directory (2008 R2). Мне пришлось скомпилировать sssd из исходного местоположения / usr / ports, потому что по умолчанию sssd-ad не включен, что мне нужно. Я не использую winbind, поэтому ссылка 1 мне не поможет. (Очевидно, во FreeBSD нет команды authconfig.) Я могу выполнить kinit просто хорошо:

[bgstack15@localhost /]$ kinit
bgstack15@EXAMPLE.COM's Password:
[bgstack15@localhost /]$ klist
Credentials cache: FILE:/tmp/krb5cc_5532829429
        Principal: bgstack15@EXAMPLE.COM

  Issued                Expires               Principal
Aug 18 16:01:16 2016  Aug 19 02:01:16 2016  krbtgt/EXAMPLE.COM@EXAMPLE.COM

После этого я могу ssh -K secondhost и это приводит меня прямо туда.

Проблема в том, что я хочу иметь возможность сгенерировать билет Kerberos при входе в систему или, по крайней мере, чтобы мне вообще не нужно было вводить свой пароль. Я использовал GSSAPI auth, чтобы попасть на localhost, поэтому я получил билет Kerberos. Могу я передать это, возможно?

Что я уже пробовал

Вот мой /etc/pam.d/sshd

auth            sufficient      pam_opie.so             no_warn no_fake_prompts
auth            requisite       pam_opieaccess.so       no_warn allow_local
auth            sufficient      pam_unix.so             no_warn
auth            sufficient      pam_krb5.so             no_warn use_first_pass forwardable ccache=krb5cc_%u
auth            required        pam_unix.so             no_warn try_first_pass

account         required        pam_nologin.so
account         required        pam_login_access.so
account         sufficient      /usr/local/lib/pam_sss.so       ignore_unknown_user
account         required        pam_unix.so

session         optional /usr/local/lib/pam_sss.so
session         required        /usr/local/lib/pam_mkhomedir.so mode=0700
session         required        pam_permit.so

password        sufficient      /usr/local/lib/pam_sss.so       use_authtok
password        sufficient      pam_krb5.so             use_authtok forwardable
password        required        pam_unix.so             no_warn try_first_pass

Я тоже пробовал
auth sufficient pam_krb5.so no_warn try_first_pass forwardable ccache=krb5cc_%u

Есть возможность просто запустить kinit в .profile, но я стараюсь не вводить пароль.

Можно ли использовать pam_exec.so? я могу сделать echo PASSWORD | kinit --password-file=STDIN который работает, так можно ли это как-то назвать?

Ссылки

  1. Похож на этого парня, но на FreeBSD 10.3 Инициализировать билет Kerberos при входе по ssh с помощью PAM
  2. мужчина pam_krb5.so https://www.freebsd.org/cgi/man.cgi?query=pam_krb5&sektion=8
  3. Аналогично, но не обходит проблему отсутствия пароля Получите билет Kerberos с SSH
  4. http://web.archive.org/web/20150315074946/http://howtovmlinux.com/articles/infrastructure-management/red-hat-idm/automate-kinit-kerberos-ticket-during-ssh-login.html

Редактировать:

Учитывая, что вход с паролем вам не помог (в комментариях), возможно, вам придется подправить свой /etc/krb5.conf настройки тоже. Вам нужно заставить это работать с интерактивным входом, прежде чем переходить к устранению неполадок входа GSSAPI.

[libdefaults]
        default_realm = EXAMPLE.COM

# The following krb5.conf variables are only for MIT Kerberos.
        krb4_config = /etc/krb.conf
        krb4_realms = /etc/krb.realms
        kdc_timesync = 1
        ccache_type = 4
        forwardable = true
        proxiable = true

Оригинальный ответ следует.


Проблема в том, что я хочу иметь возможность сгенерировать билет Kerberos при входе в систему или, по крайней мере, мне вообще не нужно вводить свой пароль. Я использовал GSSAPI auth, чтобы попасть на localhost, поэтому я получил билет Kerberos. Могу я передать это, возможно?

Я подозреваю, что это твоя проблема. Когда вы аутентифицируетесь sshd с GSSAPI (или любой другой формой аутентификации на основе ключей) вы обойдете auth полностью укладываются. Это не позволяет модулям PAM запрашивать у вас любую форму интерактивных учетных данных, но также предотвращает запуск любых «удобных функций», которые ваш модуль реализовал в этом стеке. Быстрый тест - войти в систему с вашим паролем и запустить klist, который, как я очень подозреваю, покажет вам результат, которого вы ожидали.

В pam_krb5 реализация, с которой у меня больше всего опыта, размещена на eyrie.org (Расс Олбери), поэтому я собираюсь использовать его для сравнения с документацией, на которую вы ссылаетесь. Вы можете найти страницу руководства, которую я цитирую Вот.

Оба модуля реализуют pam_setcred() в auth стек:

  • FreeBSD:

    Компонент аутентификации Kerberos 5 предоставляет функции для проверки личности пользователя (pam_sm_authenticate ()) и установки учетных данных пользователя (pam_sm_setcred ()).

  • eyrie.org:

    Предоставляет реализации pam_authenticate () и pam_setcred (). Первый берет имя пользователя из сеанса PAM, запрашивает пароль пользователя (если не настроен на использование уже введенного пароля), а затем выполняет первоначальную аутентификацию Kerberos, сохраняя полученные учетные данные (в случае успеха) во временном кэше билетов. Последний, в зависимости от флагов, с которыми он вызывается, либо берет содержимое временного кеша билетов и записывает его в постоянный кеш билетов, принадлежащий пользователю, либо использует временный кеш билетов для обновления существующего кеша билетов пользователя.

Ни один из модулей не реализует pam_setcred() в account стек:

  • FreeBSD:

    Компонент управления учетными записями Kerberos 5 предоставляет функцию для управления учетными записями pam_sm_acct_mgmt (). Функция проверяет, разрешено ли аутентифицированному участнику войти в локальную учетную запись пользователя, вызывая krb5_kuserok () (который проверяет файл пользователя .k5login).

  • eyrie.org:

    Предоставляет реализацию pam_acct_mgmt (). Все, что он делает, это выполняет ту же проверку авторизации, что и реализация pam_authenticate (), описанная выше.

Модуль Russ Allbery реализует pam_setcred() в session стек. Модуль FreeBSD делает ничего при вызове session стек.

  • FreeBSD:

    Компонент управления сеансами Kerberos 5 предоставляет функции для инициирования (pam_sm_open_session ()) и завершения (pam_sm_close_session ()) сеансов. Поскольку управление сеансом не определено в Kerberos 5, обе эти функции просто возвращают успех. Они предоставляются только из-за соглашений об именах для модулей PAM.

  • eyrie.org:

    Предоставляет реализации pam_open_session (), что эквивалентно вызову pam_setcred () с флагом PAM_ESTABLISH_CRED, и pam_close_session (), который уничтожает кеш билетов, созданный pam_setcred ().


Короче говоря, вам нужен модуль PAM, который будет обеспечивать желаемую функциональность в account или session стеки. Похоже, ваш текущий не сможет удовлетворить эту потребность при аутентификации через GSSAPI.

Кажется, что ваш ssh-клиент (PuTTY) не делегирует учетные данные. Никакие уловки pam не помогут обойти это, не заставив вас повторно ввести свой пароль, что скорее нарушит суть дела.

Кажется, я не могу сделать делегат putty 0.67, даже если выбран вариант. Строка accept, о которой вы говорите, выглядит как логирование аутентификации из sshd, а не делегирование. По умолчанию sshd не регистрирует делегирование. Глядя на журнал пакетов SSH, putty 0.67, похоже, даже не пытается.