Обновить билет Kerberos вместо запроса пароля pam
Использование централизованной аутентификации для FreeIPA работает отлично. Чтобы использовать единый вход Kerberos при использовании ssh, scp и т. д. с Jumphosts, пользователи должны сначала инициировать свои билеты Kerberos с помощью kinit. Я добавил это в bashrc для пользователей, чтобы им запрашивался пароль, поскольку ни один из клиентов не привязан к области IPA.
Однако срок действия билетов истекает через 24 часа. Таким образом, если пользователь попытается подключиться к SSH или scp с истекшим сроком действия билета, SSO не удастся, и ему будет предложено ввести пароль. Пользователи забывают о kinit, и поэтому мне интересно, могу ли я что-нибудь сделать, чтобы заставить систему попытаться обновить билет Kerberos, прежде чем вернуться к аутентификации по паролю на основе PAM. Таким образом, когда срок действия билета пользователя истечет, ему будет предложено ввести пароль только один раз в 24 часа. Отказ от необходимости вручную выполнять произвольные действия.kinit
каждые 24 часа.
Обратите внимание, что у пользователей может быть открыто несколько сеансов на одном Jumphost либо через несколько сеансов ssh, либо через менеджеры сеансов, такие как screen и byobu. Я знаю, что билеты Kerberos будут отдельными для каждого хоста, к которому они подключаются со своих компьютеров, не поддерживающих IPA.
В связи с вышеизложенным я не думаю, что это решение для записи действительности билетов Kerberos, поскольку 1) пользователь может бездействовать и 2) пользователю с несколькими открытыми сеансами может быть несколько раз предложено ввести один и тот же билет, что приводит к замешательство и разочарование пользователей.
1 ответ
Используйте cronjob для Jumpbox.
В тот момент, когда пользователи бегут, когда срок действия их билета уже истек, ничего нельзя сделать – билет с истекшим сроком действия больше нельзя продлить; обновление необходимо сделать раньше.
Хотя теоретически libkrb5 может заранее расширять действительный TGT всякий раз, когда пользователь запускает , на практике это не имело бы особого смысла; нет ничего, что могло бы гарантировать, что пользователь действительно запуститсяssh
в нужный момент. Таким образом, автоматическое упреждающее продление имеет смысл только по расписанию, т. е. cron или аналогичному.
(Текущие версии libkrb5 могут автоматически получать новые билеты из клиентской таблицы ключей, если пользователь ее создал; но я полагаю, что было бы нежелательно хранить то, что по сути является их паролем, в Jumpbox.)
Обратите внимание, что у пользователей может быть открыто несколько сеансов на одном Jumphost либо через несколько сеансов ssh, либо через менеджеры сеансов, такие как screen и byobu.
Это будет иметь значение только в том случае, если jumphost автоматически приобретет билеты Kerberos для пользователя через PAM (например, если вы использовали pam_krb5). Но необходимость выполнения руководства строго подразумевает, что у пользователя есть только один кеш билетов «по умолчанию» на Jumphost, независимо от количества его сеансов — поскольку, если у них нет билетов, то почти гарантированно, что для них ничего не установило $KRB5CCNAME. — так что вы, скорее всего, можете использовать задание cron для обновления.
Итак, если TGT был приобретен сRenewable
флаг, пользователь может просто иметь@hourly
задание cron (или systemd .timer, если ваш дистрибутив это поддерживает), которое обновляет их TGT, используяkinit -R
. Демон krenew (который также должен запускаться на уровне пользователя) также может выполнять ту же задачу.
Хотя, даже если у пользователей есть несколько кэшей билетов, задание cron, которое обновляет их все, на самом деле не такая уж сложная задача: это всего лишь Bash.for
цикл, который работаетkinit -R -c $cache
для каждого найденного кэша.
Обратите внимание, что продление билета обычно ограничено 7 или 14 днями (я не уверен, каковы настройки FreeIPA по умолчанию, но я считаю, что базовый MIT Krb5 KDC имеет жесткий лимит в 14 дней).
(Кроме того, при продлении из кэша будут удалены другие билеты, не относящиеся к TGT, но это не важно — они не нужны для уже активных сеансов и будут получены повторно при необходимости.)
Другой вариант: использовать Jumphosts в качестве туннельных серверов, а не в качестве серверов интерактивной оболочки. То есть попросите пользователя сделатьkinit
в своей системе, затем «напрямую» инициировать SSH к цели, используя jumphost в качестве хоста необработанного TCP-туннеля (используяProxyJump
). Они будут аутентифицироваться в обеих системах, используя свои локальные билеты; их местная система будет заниматься продлением.
Я знаю, что билеты Kerberos будут отдельными для каждого хоста, к которому они подключаются со своих компьютеров, не поддерживающих IPA.
Это не проблема, каждую копию TGT можно продлить независимо.