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
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$
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?
Gibt es andere Möglichkeiten, die ich nicht in Betracht ziehe?
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