Perdendo o tíquete Kerberos após SSH para o host atual e saída

Perdendo o tíquete Kerberos após SSH para o host atual e saída

Estou executando o CentOS 7.3.

Como posso evitar a perda do meu Kerberos TGT no cenário abaixo?

Entendo as implicações de segurança de não destruir os tickets Kerberos ao sair e irei me aprofundar nisso. Mas quero começar com o exemplo mais simples possível, que apresento a seguir.

[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]$

ATUALIZAÇÃO #1

Atualizar a configuração do servidor SSH da seguinte maneira resolve o problema apresentado:

GSSAPICleanupCredentials no

No entanto, fazer isso incondicionalmente é indesejável porque tem implicações negativas na segurança. Deixar tickets não vencidos residentes em uma máquina depois de você ter trabalhado nela é perigoso.

Mais detalhes sobre nosso caso de uso
Estamos usando SSH para executar comandos em hosts remotos. Os comandos executados nos hosts remotos podem, por sua vez, usar SSH para executar comandos remotos em outros hosts. Tudo isso é programado/automatizado, portanto, não podemos permitir que ocorra uma solicitação de senha. É por isso que useissh-K. O-Kflag encaminha seu Kerberos TGT para o host para o qual você está fazendo SSH, permitindo assim que você faça SSH para outro host a partir daí sem ser solicitada uma senha.

Em nosso caso de uso específico, às vezes acontece que um dos hosts “remotos” em que estamos usando SSH para executar um comando é o host em que já estamos. Sem a alteração de configuração mostrada acima, após o comando "remoto" terminar a execução e a sessão SSH terminar, o ticket Kerberos será destruído -na máquina em que estamos atualmente! Perdemos então nossa capacidade de SSH sem senha para todos os hosts.

Procurando uma solução segura para nosso caso de uso
Para evitar as implicações de segurança danãodestruindo tickets do Kerberos ao sair, gostaria de me aprofundar mais.

Existe uma maneira de fazer o seguinte?

  1. Encaminhe seu Kerberos TGT somente se ele ainda não residir na máquina para a qual você está fazendo SSH
  2. Destrua seus tickets Kerberos somente ao sair do seudurarsessão de shell

Existem outras possibilidades que não estou considerando?

Responder1

Acabei colocando o seguinte no meu .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

informação relacionada