Gibt es eine Möglichkeit festzustellen, welche anderen Benutzer zu diesem Benutzer gewechselt haben?

290
Robin Winslow

Wir haben ein System, in dem wir unterschiedliche Systemkonten verwenden, um verschiedene Umgebungen zu steuern. Mein Standardfluss sieht folgendermaßen aus:

$ ssh server.example.com robin@server$ sudo su - env1-controller env1-controller@server$ deploy 

Es gibt jedoch möglicherweise mehrere Personen, die dasselbe tun und zum env1-controllerBenutzer wechseln . Es besteht die Möglichkeit, dass wir uns gegenseitig auf die Zehen treten, indem wir gleichzeitig versuchen, die Umgebung zu verändern.

Gibt es eine Möglichkeit zu überprüfen, ob jemand den env1-controllerBenutzer gerade verwendet ?

4
Wenn jeder "sudo" verwendet, könnten Sie in Betracht ziehen, etwas entlang der Zeile "ps -ax |" zu verwenden grep sudo`, um zu sehen, wer momentan `sudo` oder` env1-controller` verwendet, und wenn Sie `who` ausführen, können Sie sich ein Bild davon machen, wer es tatsächlich ausführt. Seth vor 7 Jahren 2
Danke @Seth, `ps -ax | grep "sudo su - env1-controller" funktioniert einwandfrei, um die PID zu erhalten. Könnten Sie kurz beschreiben, wie ich mithilfe von "who" den Benutzer überprüfen kann, der es ausführt? Robin Winslow vor 7 Jahren 0

1 Antwort auf die Frage

2
Seth

Wenn jeder Sudo verwendet, könnten Sie in Betracht ziehen, etwas zu verwenden, um ps -ax | grep sudozu sehen, wer gerade verwendet, sudooder env1-controllerwenn whoSie laufen, könnten Sie eine Vorstellung davon bekommen, wer das Programm tatsächlich ausführt.

Als Beispiel auf meiner Maschine von meiner Maschine ps -ax | grep sudomöchte die Ausgabe von :

24324 pts/0 S 0:00 sudo su <user> 

Der erste Eintrag ist die PID, der zweite der TTY, das dritte Mal und der letzte Befehl. Wenn Sie verwenden, erhalten whoSie eine Liste der aktuell angemeldeten Benutzer und den verwendeten TTY. Es könnte so aussehen:

<user> pts/0 Nov 23 10:24 (<IP>) <user> pts/2 Nov 23 10:25 (<IP>) 

Durch diese Kombination wissen Sie also, dass die sudoVerbindung zu dem beliebigen Benutzer besteht pts/0. Dies wäre die manuelle Überprüfung.

Meine Vermutung wäre, dass es möglich ist, diese Informationen zu kombinieren, aber meine bash-Fähigkeiten sind nicht gut genug, um nur die Antwort darauf zu posten.

Die endgültige Lösung des ursprünglichen Autors der Frage war / ist:

Am Ende habe ich mit grep die exakten TTY-Nummern extrahiert ps -aux | grep -v grep | grep "sudo su - whoami" | grep -E -o 'pts/[0-9]+' | grep -E -o '[0-9]+'und dann herausgefunden ls -l /dev/pts/$, wer den TTY besaß.

Was das macht, ist:

  • Verwenden Sie ps -auxdiese Option, um eine Liste aller laufenden Prozesse einschließlich einiger zusätzlicher Informationen abzurufen.
  • grepalle Zeilen, die nicht enthalten grep, um das grep von der Ausgabe auszuschließen.
  • grepdie Zeile für alle Prozesse, die enthalten sudo.
  • grepder Text pts/<number>aus diesen Zeilen.
  • grep nur die Nummer
  • Verwenden Sie lsdiese Option, um zu überprüfen, wer der Besitzer dieses TTY ist.

Mit diesen Informationen können Sie versuchen, dies zu tun (wenn Sie wen verwenden wollten):

who | grep $(ps -ax | grep -v grep | grep "sudo su - whoami" | grep -E -o 'pts/[0-9]+') 

Es würde jedoch nur funktionieren, solange es ein einzelnes Ergebnis gibt, da die Ausgabe von mehrzeilig $()wäre. Wie Sie sehen, überspringe ich das uvon, psda die hinzugefügten Informationen nicht benötigt werden, damit das grundlegende Skript funktioniert.

Am Ende habe ich tatsächlich mit grep die exakten TTY-Nummern "ps -aux |" extrahiert grep -v grep | grep "sudo su -` whoami` "| grep -E -o 'pts / [0-9] +' | grep -E -o '[0-9] +' `und dann mit 'ls -l / dev / pts / $ ` den Besitzer des TTY ermitteln. Robin Winslow vor 7 Jahren 1
Danke, dass Sie es hinzugefügt haben. Ich habe eine Erklärung für Ihre Lösung in die Antwort aufgenommen, wenn Sie nichts dagegen haben. Seth vor 7 Jahren 0
Ah ja, gutes Zeug. Der Grund dafür, dass ich den Inhalt von `/ dev / pts /` inspiziere, anstatt auf die Ausgabe von `who` zu schauen, ist, dass der angefügte TTY manchmal nicht direkt eine Login-Sitzung ist - manchmal ist es ein` tmux` oder `screen` Session. In diesem Fall finden Sie den TTY nicht in der Ausgabe von "who", aber in "/ dev / pts" befindet sich noch eine Datei des Benutzers, der die Sitzung besitzt. Robin Winslow vor 7 Jahren 1