Kerberos-Ticket nach SSH an den aktuellen Host verlieren und beenden

335
Dave

Ich arbeite mit CentOS 7.3.

Wie kann ich verhindern, dass mein Kerberos TGT im nachstehenden Szenario verloren geht?

Ich verstehe die Sicherheitsauswirkungen, die Kerberos-Tickets beim Abmelden nicht zu zerstören, und ich werde mich näher damit befassen. Ich möchte jedoch mit dem einfachsten möglichen Beispiel beginnen, das ich unten präsentiere.

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$ 

UPDATE # 1

Durch Aktualisieren der SSH-Serverkonfiguration wie folgt wird das Problem wie dargestellt behoben:

GSSAPICleanupCredentials no 

Dies ist jedoch unbedingt erforderlich, da dies negative Auswirkungen auf die Sicherheit hat. Es ist gefährlich, nicht abgelaufene Tickets auf einem Computer zu hinterlassen, nachdem Sie daran gearbeitet haben.

Weitere Informationen zu unserem Anwendungsfall
Wir verwenden SSH, um Befehle auf entfernten Hosts auszuführen. Die auf den Remote-Hosts ausgeführten Befehle können wiederum SSH verwenden, um Remote-Befehle auf noch anderen Hosts auszuführen. Dies ist alles skriptgesteuert / automatisiert, so dass wir keine Aufforderung zur Eingabe eines Kennworts zulassen können. Deshalb habe ich ssh -K verwendet . Das -K- Flag leitet Ihr Kerberos TGT an den Host weiter, den Sie als SSHing verwenden möchten. Dadurch können Sie SSH auf einen anderen Host von dort aus starten, ohne dass Sie zur Eingabe eines Kennworts aufgefordert werden.

In unserem speziellen Anwendungsfall kann es vorkommen, dass einer der "entfernten" Hosts, auf denen SSH zum Ausführen eines Befehls verwendet wird, der Host ist, auf dem sich bereits befindet. Ohne die oben gezeigte Konfigurationsänderung wird das Kerberos-Ticket zerstört, nachdem der Befehl "remote" beendet wurde und die SSH-Sitzung beendet ist - auf dem Computer, auf dem wir gerade arbeiten ! Wir haben dann unsere Fähigkeit zu SSH ohne Passwort an alle Hosts verloren.

Nach einer sicheren Lösung für unseren Anwendungsfall suchen
Um die Sicherheitsauswirkungen zu vermeiden, dass Kerberos-Tickets beim Abmelden bedingungslos nicht zerstört werden, möchte ich näher darauf eingehen.

Gibt es eine Möglichkeit, eine der folgenden Möglichkeiten auszuführen?

  1. Leiten Sie Ihr Kerberos TGT nur weiter, wenn es sich noch nicht auf dem Rechner befindet, auf dem Sie sich gerade befinden
  2. Zerstören Sie Ihre Kerberos-Tickets nur, wenn Sie Ihre letzte Shell-Sitzung beenden

Gibt es andere Möglichkeiten, die ich nicht in Betracht ziehe?

0

1 Antwort auf die Frage

0
Dave

Am Ende habe ich folgendes in mein .bash_profile eingefügt:

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