Estoy ejecutando CentOS 7.3.
¿Cómo puedo evitar perder mi Kerberos TGT en el siguiente escenario?
Entiendo las implicaciones de seguridad de no destruir los tickets de Kerberos al cerrar sesión y profundizaré en esto. Pero quiero empezar con el ejemplo más sencillo posible, que presento a continuación.
[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]$
ACTUALIZACIÓN #1
Actualizar la configuración del servidor SSH de la siguiente manera resuelve el problema tal como se presenta:
GSSAPICleanupCredentials no
Sin embargo, hacer esto incondicionalmente no es deseable porque tiene implicaciones negativas para la seguridad. Dejar boletos vigentes en una máquina después de haber terminado de trabajar en ella es peligroso.
Más detalles sobre nuestro caso de uso
Estamos usando SSH para ejecutar comandos en hosts remotos. Los comandos ejecutados en los hosts remotos pueden, a su vez, usar SSH para ejecutar comandos remotos en otros hosts. Todo esto está programado/automatizado, por lo que no podemos permitir que se solicite una contraseña. Por eso uséssh -K. El-kflag reenvía su Kerberos TGT al host al que está realizando SSH, lo que le permite realizar SSH a otro host desde allí sin que se le solicite una contraseña.
En nuestro caso de uso particular, a veces sucede que uno de los hosts "remotos" en los que usamos SSH para ejecutar un comando es el host en el que ya estamos. Sin el cambio de configuración que se muestra arriba, después de que el comando "remoto" termina de ejecutarse y se cierra la sesión SSH, el ticket de Kerberos se destruye.en la máquina en la que estamos actualmente! Luego perdimos nuestra capacidad de utilizar SSH sin contraseña para todos los hosts.
Buscando una solución segura para nuestro caso de uso
Para evitar las implicaciones de seguridad de incondicionalmentenodestruir tickets de Kerberos al cerrar sesión, me gustaría profundizar más.
¿Hay alguna manera de hacer alguna de las siguientes cosas?
- Reenvía tu Kerberos TGT solo si aún no reside en la máquina a la que estás enviando SSH
- Destruye tus tickets Kerberos sólo al salir de tuúltimosesión de shell
¿Hay otras posibilidades que no estoy considerando?
Respuesta1
Terminé poniendo lo siguiente en mi .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