Я работаю на 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. Флаг -K перенаправляет ваш Kerberos TGT на хост, к которому вы подключаетесь по SSH, что позволяет вам подключаться к SSH к другому хосту оттуда без запроса пароля.

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

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

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

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

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

1 ответ1

0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .