Потеря билета Kerberos после SSH для текущего хоста и выхода

289
Dave

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

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

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

user@host.example.com$ klist klist: Credentials cache keyring 'persistent:25536700022:krb_ccache_h3j7qk7' not found  user@host.example.com$ kinit Password for user@example.com:  user@host.example.com$ klist Ticket cache: KEYRING:persistent:25536700022:krb_ccache_h3j7qk7 Default principal: user@example.com  Valid starting Expires Service principal 08/03/2018 17:06:45 08/04/2018 17:06:41 krbtgt/example.com@example.com  user@host.example.com$ ssh -K host Last login: Fri Aug 3 17:06:21 2018 from 10.250.57.186  user@host.example.com$ klist Ticket cache: KEYRING:persistent:25536700022:krb_ccache_h3j7qk7 Default principal: user@example.com  Valid starting Expires Service principal 08/03/2018 17:06:54 08/04/2018 17:06:41 krbtgt/example.com@example.com  user@host.example.com$ exit logout Connection to host closed.  user@host.example.com$ klist klist: Credentials cache keyring 'persistent:25536700022:krb_ccache_h3j7qk7' not found  user@host.example.com$ 

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

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

GSSAPICleanupCredentials no 

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

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

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

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

Есть ли способ сделать одно из следующих?

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

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

0

1 ответ на вопрос

0
Dave

В итоге я добавил в свой .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 

Похожие вопросы