Потеря билета Kerberos после SSH-подключения к текущему хосту и выхода

Потеря билета Kerberos после SSH-подключения к текущему хосту и выхода

Я работаю на CentOS 7.3.

Как я могу предотвратить потерю своего Kerberos TGT в приведенном ниже сценарии?

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

[email protected]$ klist
klist: Credentials cache keyring 'persistent:25536700022:krb_ccache_h3j7qk7' not found

[email protected]$ kinit
Password for [email protected]:

[email protected]$ klist
Ticket cache: KEYRING:persistent:25536700022:krb_ccache_h3j7qk7
Default principal: [email protected]

Valid starting       Expires              Service principal
08/03/2018 17:06:45  08/04/2018 17:06:41  krbtgt/[email protected]

[email protected]$ ssh -K host
Last login: Fri Aug  3 17:06:21 2018 from 10.250.57.186

[email protected]$ klist
Ticket cache: KEYRING:persistent:25536700022:krb_ccache_h3j7qk7
Default principal: [email protected]

Valid starting       Expires              Service principal
08/03/2018 17:06:54  08/04/2018 17:06:41  krbtgt/[email protected]

[email protected]$ exit
logout
Connection to host closed.

[email protected]$ klist
klist: Credentials cache keyring 'persistent:25536700022:krb_ccache_h3j7qk7' not found

[email protected]$

ОБНОВЛЕНИЕ №1

Обновление конфигурации сервера SSH следующим образом решает представленную проблему:

GSSAPICleanupCredentials no

Однако делать это безоговорочно нежелательно, поскольку это имеет негативные последствия для безопасности. Оставлять неистекшие билеты на машине после того, как вы закончили работу с ней, опасно.

Более подробная информация о нашем варианте использования
Мы используем SSH для выполнения команд на удаленных хостах. Команды, выполняемые на удаленных хостах, могут, в свою очередь, использовать SSH для выполнения удаленных команд на других хостах. Все это заскриптовано/автоматизировано, поэтому мы не можем допустить появления запроса на ввод пароля. Вот почему я использовалсш -К.флаг перенаправляет ваш Kerberos TGT на хост, к которому вы подключаетесь по SSH, тем самым позволяя вам подключаться по SSH к другому хосту оттуда без запроса пароля.

В нашем конкретном случае использования иногда случается так, что один из «удалённых» хостов, на которых мы используем SSH для выполнения команды, — это хост, на котором мы уже находимся. Без изменения конфигурации, показанного выше, после завершения выполнения «удалённой» команды и выхода из сеанса SSH билет Kerberos уничтожается —на машине, на которой мы сейчас находимся! Затем мы потеряли возможность подключаться по SSH без пароля ко всем хостам.

Поиск безопасного решения для нашего варианта использования
Чтобы избежать последствий для безопасности безоговорочнонетуничтожение билетов Kerberos при выходе из системы, я хотел бы копнуть глубже.

Есть ли возможность сделать что-либо из следующего?

  1. Пересылайте свой Kerberos TGT только в том случае, если он еще не находится на машине, к которой вы подключаетесь по SSH.
  2. Уничтожайте билеты Kerberos только при выходе из системы.последнийсеанс оболочки

Есть ли другие возможности, которые я не рассматриваю?

решение1

В итоге я поместил в свой .bash_profile следующее:

cleanup()
{
   SHELL_COUNT=$(ps -elf | grep bash | grep $(whoami) | grep -v grep | wc -l)

   if [[ "$SHELL_COUNT" -eq 2 ]]; then
      kdestroy -q
   fi
}

trap '
   cleanup
' 0

Связанный контент