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 scriptsystemweite Ausführung bashrcnicht 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.bashrcdas Laden zu verhindern .
Ein alternativer Ansatz
In diesem Handbuch aus dem Jahr 2008 ( archiviert ) wird eine andere Methode verwendet , um scriptdie 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_keysvor 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/scriptdie 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 sudoBenutzern zu protokollieren . Das könnte vielleicht in einer anderen Antwort oder in einer anderen Frage angegangen werden.
execam Anfang der Zeile voran . Es sollte diescript -fPID in derselben Shell starten .