Was ich erreichen möchte, ist, dass ich meine Terminalsitzungen automatisch aufzeichnen kann, wenn ich Yakuake / Konsole verwende.
Es ist einfach zu erreichen, wenn ich zu Beginn meiner Sitzung Folgendes mache:
script -f /home/$USER/bin/shell_logs/$(date +"%d-%b-%y_%H-%M-%S")_shell.log
Aber ich möchte das automatisch ausführen, wenn ich Yakuake starte oder einen neuen Tab öffne.
Die Verwendung von .bashrc funktioniert nicht, da eine Endlosschleife erstellt wird, wenn "script" eine neue Sitzung öffnet, die wiederum .bashrc liest und ein anderes "script" startet und so weiter.
Vermutlich muss ich Yakuake / Konsole also irgendwie skripten, um "script" einmal auszuführen, wenn ein neuer Tab geöffnet wird. Die Frage ist wie?
exec
am Anfang der Zeile voran . Es sollte diescript -f
PID in derselben Shell starten .Antworten:
Wenn jemand seine Terminalsitzungen - einschließlich SSH-Sitzungen (!) - mithilfe des
script
Dienstprogramms automatisch aufzeichnen möchte, gehen Sie wie folgt vor.Fügen Sie die folgende Zeile am Ende
.bashrc
Ihres Basisverzeichnisses hinzu oder auf andere Weise,/etc/bash.bashrc
wenn Sie nur die Sitzungen aller Benutzer aufzeichnen möchten. Wir testen, ob der übergeordnete Prozess von Shell nicht vorhanden ist,script
und führen ihn dann ausscript
.Für Linux:
Wechseln Sie für BSD und macOS
script -f
zuscript -F
:Das ist alles!
Wenn Sie jetzt ein neues Terminal öffnen, sehen Sie:
script
schreibt Ihre Sitzungen in eine Datei in Ihrem Home-Verzeichnis und benennt sie in etwa30-Nov-11_00-11-12_shell.log
so.Mehr anpassung:
script -a /path/to/single_log_file
script -f
(Linux) oderscript -F
(BSD und macOS) ändern.Diese Antwort setzt
script
natürlich voraus, dass Sie installiert haben . Auf Debian-basierten Distributionenscript
ist Teil desbsdutils
Pakets.quelle
edit
Schaltfläche, die direkt darunter angezeigt wird.${RANDOM}
und / oder$$
zum Dateinamen hinzufügen, da das Starten von zwei Shells innerhalb einer Sekunde zu einer Kollision von Dateinamen führt. Persönlichscript.$(date -u +%Y%m%dt%H%M%S).${HOSTNAME:-$(hostname)}.$$.${RANDOM}.log
stelle ich oft sicher, dass die Dateien automatisch nach Datum und Uhrzeit sortiert werden und dass sie innerhalb von TZ konsistent sind. Ich kenne den Host, der sie initiiert hat, ich kenne den Besitzprozess und es gibt keine Namenskollisionen. Ich benutze${USER}
es selten, weil es normalerweise nur für mich ist.Obwohl diese Frage von einer Person gestellt wurde, die ihre eigenen Sitzungen aufzeichnen wollte, kann ein alternativer Anwendungsfall ein Systemadministrator sein, der verfolgen möchte, was verschiedene Benutzer tun.
Ein alternativer Ansatz
In diesem Handbuch aus dem Jahr 2008 ( archiviert ) wird eine andere Methode verwendet , um
script
die Ausführung zu erzwingen , wenn sich ein Benutzer mit ssh anmeldet. Dazu müssen sich Benutzer mit einem öffentlichen / privaten Schlüssel anmelden.Dazu fügen Sie der Benutzerdatei
.ssh/authorized_keys
vor dem Schlüssel ein Skript hinzu :Das
log-session
( archivierte ) Skript entscheidet dann, ob es ausgeführt wird oder nicht, um/usr/bin/script
die Sitzung dieses Benutzers zu protokollieren.Um zu verhindern, dass der Benutzer den hinzugefügten Befehl entfernt, muss der Administrator den Besitz der Benutzerdatei übernehmen
authorized_keys
.Leider bedeutet dies, dass der Benutzer keine zusätzlichen Schlüssel selbst hinzufügen oder, was noch wichtiger ist, den vorhandenen Schlüssel widerrufen kann, wenn er kompromittiert wurde, was alles andere als ideal ist.
Vorbehalte
In der Standardkonfiguration von sshd ist es üblich, dass Benutzer SFTP über ihre ssh-Anmeldung ausführen können. Auf diese Weise können Benutzer Dateien bearbeiten, ohne dass die Änderungen protokolliert werden. Wenn der Administrator nicht möchte, dass Benutzer dies tun können, sollte er entweder die Protokollierung für SFTP aktivieren oder den Dienst deaktivieren. Auch dann können Benutzer noch unsichtbare Änderungen an Dateien vornehmen, indem sie auf ihrem Terminal Folgendes ausführen:
Möglicherweise können solche Änderungen mithilfe eines Copy-on-Write-Dateisystems überwacht werden, das den gesamten Dateiversionsverlauf aufzeichnet.
Ein ähnlicher Trick würde es einem Benutzer ermöglichen, Befehle auszuführen, ohne dass sie protokolliert werden:
Ich kenne keine einfachen Lösungen dafür. Möglichkeiten könnten sein:
So etwas könnte mit auditd möglich sein .
Aber wie auch immer...
quelle
Anstatt:
Ich würde ... benutzen:
Die doppelten Anführungszeichen sind in diesem Fall nicht erforderlich, aber ich neige dazu, sie trotzdem als Standard zu verwenden. Ich empfehle auf jeden Fall, den Schalter "x" sowohl für das grep als auch für das pgrep zu verwenden, um eine seltene, aber problematische Übereinstimmung mit Teilzeichenfolgen zu vermeiden.
quelle