Live-Ansicht von Linux-Shell-Befehlen, die von einem anderen Benutzer ausgeführt wurden?

27

Ist es dem Root-Benutzer unter Linux möglich, eine Echtzeit- (oder nahezu Echtzeit-) Ansicht der Shell-Befehle zu erhalten, die von einem anderen Benutzer ausgeführt werden, der über ein Terminal oder SSH angemeldet ist? Natürlich sind sie in .bash_history gespeichert, aber das wird nur gespeichert, wenn sich der Benutzer abmeldet und kann auch deaktiviert werden.

Bearbeiten: idealerweise etwas, das leicht ein- und ausgeschaltet werden kann.

EMP
quelle
ttyrpldhört sich gut an. empfohlen in dieser Frage. serverfault.com/questions/40011/…
hayalci

Antworten:

16

Als Root können Sie die Shell durch ein einfaches Wrapper-Skript ersetzen, das die Befehle protokolliert, bevor sie an die echte Shell übergeben werden. Dies würde nur funktionieren, bevor sie sich anmelden.

Tim Howland
quelle
20
Wir haben dies getan, um ein gehacktes Konto bei einem früheren Arbeitgeber zu überwachen. Erstellt "/ bin / bash" (beachte das Leerzeichen), das ein Wrapper um den Script-Befehl war. Arbeitete wie ein Zauber :)
Commander Keen
Sehr schlau! +1
EMP
9

Verwenden Sie sniffy, wenn Sie in die Sitzung des Benutzers einbrechen möchten oder screen -xwenn Sie mitarbeiten möchten .

Beachten Sie jedoch, dass das Ausspionieren Ihrer Benutzer abhängig von Ihrer lokalen Gesetzgebung möglicherweise gesetzlichen Bestimmungen unterliegt oder sogar völlig illegal ist.

David Schmitt
quelle
7

Das Ändern der Shell ist sehr trivial, um das Problem zu umgehen. Das Patchen der Shell selbst ist besser, aber Sie müssen alle Shells patchen. Unser Lieblingscracker nutzt dies, als Bonus kümmert er sich nicht darum, bash_history zu deaktivieren.

ssh host /bin/sh -i  

Snoopy ist ein Wrapper für Exec-Funktionen und protokolliert alle externen Binärdateien , die ausgeführt werden (keine Shell-Builtins).

@David Schmitts Vorschlag sniffy nutzt eine bessere Methode, es klopft auf das Pseudoterminal.

ttysnoop verwendet dieselbe Methode, ist jedoch nicht gewartet. (Ich hatte wahrscheinlich Probleme damit, ssh-Verbindungen zu protokollieren, kann mich nicht erinnern)

Sie können versuchen, ssh zu patchen , um eine Sitzung zu protokollieren, aber dieser Patch ist alt .

Pseudopod und Rootsh können zur Protokollierung legitimer Sudos verwendet werden. Und shwatcr ist eine andere Sache, um Logins zu überwachen.

hayalci
quelle
Was genau ssh host /bin/sh -isoll das tun?
Mike Pennington
+1 für snoopy, nicht perfekt, aber wir haben das getan, wofür wir es brauchten.
Skinp
4

Wenn Sie kooperativ sind, können Sie GNU-Bildschirm zwischen zwei Benutzern verwenden. Bitten Sie einen, die Bildschirmsitzung einzurichten, und den anderen, beizutreten screen -x.

Wenn Sie möchten, dass root andere Benutzer ohne deren Wissen "ausspioniert", ist die beste und effizienteste Lösung möglicherweise die Keylogger-Software / Hardware.

Tim
quelle
4

Sysdig ist ein leistungsstarkes Tool für die Erkundung auf Systemebene - genau das möchten Sie;)

Beispiel:

sysdig -i spy_users

Kategorie: Sicherheit

spy_users Zeigt die interaktiven Benutzeraktivitäten an

Listet jeden Befehl auf, den Benutzer interaktiv starten (z. B. aus der Bash) und jedes Verzeichnis, das Benutzer aufrufen

Andrzej Chabierski
quelle
2

Sie könnten den Bash-BOFH-Patch ausprobieren. Suchen Sie nach dem Patch.

Squillman
quelle
1

Ich habe eine Methode geschrieben, um alle 'bash'-Befehle / eingebauten Befehle in eine Textdatei oder einen' syslog'-Server zu schreiben, ohne einen Patch oder ein spezielles ausführbares Tool zu verwenden.

Die Bereitstellung ist sehr einfach, da es sich um ein einfaches Shellscript handelt, das bei der Initialisierung der 'Bash' einmal aufgerufen werden muss.

Die Methode finden Sie hier: http://blog.pointsoftware.ch/index.php/howto-bash-audit-command-logger

François Scheurer
quelle
Willkommen bei Server Fault! Wir bevorzugen wirklich, dass Antworten Inhalte haben, keine Verweise auf Inhalte. Dies stellt sicher, dass die Antwort auch dann verfügbar bleibt, wenn die Verbindung unterbrochen wird. Während dies theoretisch die Frage beantworten mag, wäre es vorzuziehen , die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen.
user9517 unterstützt GoFundMonica
Willkommen bei Server Fault! Bitte lesen Sie unsere FAQ insbesondere Mai ich Werbung für Produkte oder Websites , die ich hier mit dem Unternehmen assoziiert bin? .
user9517 unterstützt GoFundMonica
1
function spy() { 
   ptsnum=`ps awfux | grep pt[s]\/"$1" | awk '/bas[h]/{print $2}'` ; 
   /usr/bin/strace -s 1000 -t -f -p $ptsnum 2>&1 3>&1 \
        | grep -Poi 'write\(...\"[[:print:]]{1,2}\"[.][.][.][,]..\)' ; 
}

[436] klikevil@epiphany ~ $ w<br>
 09:36:43 up 12:06,  6 users,  load average: 0.46, 0.29, 0.20<br>
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT<br>
klikevil pts/0    75.125.126.8     23:05    2:19m 10:33   0.18s cmd                                      <br>
klikevil pts/1    75.125.126.8     00:18    6:50m  0.06s  0.04s sshd: klikevil [priv]<br>
klikevil tty7     :0               09:02   17:07m  2:02   0.32s x-session-manager<br>
klikevil pts/2    :0.0             09:03    3:30   0.08s  0.08s bash<br>
klikevil pts/3    :0.0             09:03    0.00s  0.76s  0.00s w<br>
klikevil pts/4    :0.0             09:06    3:13   0.46s  0.00s /bin/sh /usr/bin/thunder<br>
[437] klikevil@epiphany ~ $ spy 2<br>
write(2, "e"..., 1)<br>
write(2, "c"..., 1)<br>
write(2, "h"..., 1)<br>
write(2, "o"..., 1)<br>
write(2, " "..., 1)<br>
write(2, "s"..., 1)<br>
write(2, "u"..., 1)<br>
write(2, "p"..., 1)<br>
write(2, " "..., 1)<br>
write(2, "d"..., 1)<br>
write(2, "o"..., 1)<br>
write(2, "g"..., 1)<br>
write(2, "\n"..., 1)<br>
^C<br>

Scheint ziemlich gut zu funktionieren, wenn es Ihnen nichts ausmacht, ein paar Zeilenumbrüche zu sortieren.

Jessica Parker
quelle
1

Snoopy ist für die Protokollierung von Lightweight-Befehlen vorgesehen.

Wenn Sie eine Live-Ansicht der auf Ihrem System ausgeführten Befehle wünschen, ist dies möglicherweise der Fall. Warnung: snoopy ist keine ordnungsgemäße Prüflösung und kann leicht umgangen werden.

Wenn Sie jedoch alle im Terminal eingegebenen Zeichen sehen möchten, müssen Sie ein anderes Tool verwenden.

Offenlegung: Ich bin aktueller Snoopy Betreuer.

Bostjan Skufca
quelle
-3

Versuche diesen Export HISTTIMEFORMAT = "% T" führe danach ein paar Befehle und "history" aus ...

masber
quelle