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

0

Estou usando o CentOS 7.3.

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

Eu entendo as implicações de segurança de não destruir tickets do Kerberos no logout, e eu vou estar aprofundando isso. Mas quero começar com o exemplo mais simples possível, que apresento abaixo.

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

UPDATE # 1

A atualização da configuração do servidor SSH da seguinte forma resolve o problema conforme apresentado:

GSSAPICleanupCredentials no

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

Mais detalhes sobre nosso caso de uso
Estamos usando o SSH para executar comandos em hosts remotos. Os comandos executados nos hosts remotos podem, por sua vez, usar o SSH para executar comandos remotos em outros hosts. Tudo isso é roteirizado / automatizado, por isso não podemos permitir a solicitação de uma senha. É por isso que usei ssh -K . O sinalizador -K encaminha o seu Kerberos TGT para o host para o qual você está usando o SSHing, permitindo que você conecte o SSH a outro host a partir dele sem ser solicitada uma senha.

Em nosso caso de uso específico, às vezes acontece que um dos hosts "remotos" em que estamos usando o SSH para executar um comando é o host em que já estamos. Sem a alteração de configuração mostrada acima, depois que o comando "remoto" termina de executar e a sessão SSH sai, o tíquete Kerberos é destruído - na máquina em que estamos atualmente ! Em seguida, perdemos nossa capacidade de usar o SSH de maneira sem senha para todos os hosts.

Procurando por uma solução segura para nosso caso de uso
Para evitar as implicações de segurança de incondicionalmente não destruindo tickets do Kerberos no logout, eu gostaria de ir mais fundo.

Existe uma maneira de fazer o seguinte?

  1. Encaminhe seu Kerberos TGT somente se ele ainda não estiver na máquina que você está usando o SSH para
  2. Destrua seus tíquetes Kerberos somente ao sair de sua última sessão de shell

Existem outras possibilidades que não estou considerando?

    
por Dave 04.08.2018 / 00:20

1 resposta

0

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
    
por 08.08.2018 / 20:06