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.
Ich befürchte, dass eine script
systemweite Ausführung bashrc
nicht für den Fall geeignet ist, dass Benutzer der Maschine es ablehnen, Aufzeichnungen ihrer Sitzungen anzufertigen.
Benutzer, die inkognito bleiben möchten, können die Protokollierung umgehen, indem sie sshd auffordern, eine andere Shell zu öffnen (z. B. zsh
), oder ausführen bash --rcfile ___
, um /etc/bash.bashrc
das Laden zu verhindern .
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 :
command="/usr/local/sbin/log-session" ssh-dss AAAAB3NzaC1kc3MAAAEBAMKr1HxJz.....
Das log-session
( archivierte ) Skript entscheidet dann, ob es ausgeführt wird oder nicht, um /usr/bin/script
die Sitzung dieses Benutzers zu protokollieren.
exec script -a -f -q -c "$SSH_ORIGINAL_COMMAND" $LOGFILE
Um zu verhindern, dass der Benutzer den hinzugefügten Befehl entfernt, muss der Administrator den Besitz der Benutzerdatei übernehmen authorized_keys
.
chown root:root ~user/.ssh/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:
curl "http://users.own.server/server/new_data" > existing_file
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:
curl "http://users.own.server/server/secret_commands_824" | sh
Ich kenne keine einfachen Lösungen dafür. Möglichkeiten könnten sein:
- Alle Netzwerkdaten protokollieren (und später entwirren).
- Protokollierung aller Systemaufrufe.
So etwas könnte mit auditd möglich sein .
Aber wie auch immer...
Es ist unwahrscheinlich, dass die Protokollierung von Benutzersitzungen Administratoren echte Sicherheit bietet. Standardmäßig kann ein Benutzer nur seine eigenen Dateien manipulieren und das System nicht beschädigen. Wenn ein böswilliger Benutzer es geschafft hat, die Berechtigungen zu erweitern, kann er die Protokollierung deaktivieren und die Protokolle löschen (es sei denn, der Administrator hat Protokolle so konfiguriert, dass sie nur anhängbar auf einem separaten Computer gespeichert werden).
Administratoren, die Benutzersitzungen automatisch protokollieren, sollten die Benutzer wahrscheinlich darüber informieren . In einigen Gerichtsbarkeiten verstößt diese Form der Datenerfassung möglicherweise gegen Datenschutzgesetze . Zumindest wäre es den Nutzern gegenüber respektvoll, sie darauf aufmerksam zu machen.
Es ist wahrscheinlicher, dass ein Administrator daran interessiert ist, die Sitzungen von sudo
Benutzern zu protokollieren . Das könnte vielleicht in einer anderen Antwort oder in einer anderen Frage angegangen werden.
exec
am Anfang der Zeile voran . Es sollte diescript -f
PID in derselben Shell starten .