Ich möchte die Verlaufseinstellungen für alle Benutzer auf den von mir verwalteten Systemen ändern. Ich möchte, dass es die Informationen vom Verbindungsterminal wie von enthältwho
sysadmin:/ # who
sysadmin pts/0 Mar 26 07:11 (sysadmin.doofus.local)
Derzeit ändere ich meinen Verlauf folgendermaßen. Ich weiß, dass viele dieser Einstellungen hier mehrmals behandelt wurden. Ich habe diesen Code jedoch vor langer Zeit aus " Linux System Administration Recipes by: Juliet Kemp " abgerufen.
shopt -s histappend
PROMPT_COMMAND='history -n;history -a'
HISTSIZE=100000
HISTFILESIZE=100000
HISTTIMEFORMAT="%m/%d/%y %T "
shopt -s histappend
Behebt das Problem, wenn mehrere Terminals geöffnet sind. Informationen können verloren gehen.
PROMPT_COMMAND='history -n;history -a'
wird erweitert, um das Anhängen des Verlaufs in Echtzeit über mehrere Terminals hinweg zu ermöglichen.
HISTSIZE=100000
HISTFILESIZE=100000
verlängert die history
Retentionsmenge
HISTTIMEFORMAT="%m/%d/%y %T
"stellt jeder Zeile der Geschichte einen Zeitstempel voran
Was Sie normalerweise bekommen history
835 ls
836 cd ..
Meine geänderten aktuellen history
Ergebnisse
5853 03/26/12 07:16:49 ls
5854 03/26/12 07:16:50 ll
Die Rückkehr von history
würde ich gerne sehen
5853 03/26/12 07:16:49 sysadmin.doofus.local ls
5854 03/26/12 07:16:50 sysadmin.doofus.local ll
001 03/26/12 05:11:29 demo_user.doofus.local cd
002 03/26/12 05:11:30 demo_user.doofus.local ll
Ich bin nicht "verheiratet", den DNS
Namen zu sehen . Ich würde es nur dort haben wollen, wenn es von who
einem anderen Ort abgerufen wird, ohne dass eine Suche oder Abfrage jeglicher Art durchgeführt werden muss. Ich würde mich über die IP-Adresse freuen.
002 03/26/12 05:11:30 192.168.0.2 ll
Warum? Ich verwalte mehrere Systeme, auf denen eine Benutzer-ID, die mehrere Benutzer derselben Gruppe gemeinsam nutzen, ihre täglichen Aufgaben erledigt. Dies würde es mir ermöglichen, ihren tatsächlichen Standort und den tatsächlichen Benutzer innerhalb der Organisation mit dem zu korrelieren, was sie in der Geschichte getan haben.
Ich bin mir bewusst, dass dies nicht optimal ist und möchte es ändern, aber wenn Sie auf einem Schiff von der Größe eines Kreuzfahrtschiffes sind, versuchen Sie nicht, Haarnadelkurven zu drehen. (Hinweis: Wenn Sie dies tun, versuchen die Passagiere, Sie über Bord zu werfen.)
Bis ich sie auf eine bessere Lösung migrieren kann, möchte ich diese Tracking-Funktion haben.
Wenn Sie Empfehlungen dazu haben, was ich derzeit für meine history
Änderungen verwende, würde ich es gerne hören.
Vielen Dank,
Bearbeiten: 1
Ich möchte keine anderen Programme ausführen oder zusätzliche "im Rahmen der Vernunft" konfigurieren müssen.
Ich möchte 0
Overhead hinzufügen , wenn ich hinzufügen muss, muss es klein sein.
Ich vertraue meinen Benutzern, ich möchte nur (sollte etwas passieren) sehen, welcher der 10 Benutzer, die sich mit demselben Benutzer am System angemeldet haben: Passwort hat es getan. Oder es könnte kein Benutzer gewesen sein, es könnte ein Vergessen cron
auf einem System gewesen sein, das als Benutzer eine Verbindung herstellt, um etwas zu tun. Oder eine Anwendung Bsp.: Die BMC Control-M
eine Verbindung herstellt ssh
und Aufgaben ausführt. Es geht weniger darum, "schlechte Benutzer" zu finden, als vielmehr darum, sie mit minimalem Aufwand aufzuspüren.
Bearbeiten 2:
Auf den Systemen werden SLES und RHEL ausgeführt
/proc
/dev
und Benutzerverzeichnisse aus/home
. Dies erhöht den Overhead. Währendhistory
bereits aufgezeichnet wird und ihre Verbindungsinformationen dem System bekannt sind, das IP usw. verbindet. Diese Informationen können, falls sie nicht bereits "statisch" verfügbar sind, auf diese Weise festgelegt oder in einer Variablen oder Datei gespeichert und in diehistory
Datensätze und den Leistungstreffer eingegeben werden wäre sehr klein oder 0.auditd
. Ich bin nicht sicher, ob die Protokolle Ihnen genügend Informationen geben. Die Schwierigkeit dessen, was Sie wollen, ist genau, warum gemeinsam genutzte Konten so verurteilt werden.auditd
Es ist sehr ähnlichinotify
, wie Sie sagen müssen, was auf Änderungen überwacht werden soll. Einzelne Dateien, Verzeichnisse usw. Ich möchte nicht zu dieser Konfigurationsebene wechseln. In der Tat (ich tue), aber im Grunde ist es nicht so wichtig. Ich musspuppet
mit dem Zeug umgehen.auditd
kommt mit der zusätzlichen Last und Zeit zum Einrichten. Wenn ein Konto etwas ändert, möchte ich trotzdem in den Verlauf zurückblicken und sehen, wer oder was sich anmeldet und versucht.PROMPT_COMMAND=
nur normale Befehle vor der nächsten Eingabeaufforderung ausgeführt werden, konnten Sie keine Funktion schreiben, die sed / awk aufruft und in der letzten Zeile der Verlaufsdatei arbeitet, um die Informationen hinzuzufügen. Rufen Sie dann diese Funktion aufPROMPT_COMMAND=
, um die Daten anzuhängen. Es wäre hackisch, sollte aber den Job machen.Antworten:
Nach dem Vorschlag von llua können wir ein bisschen mehr mit der Geschichte arbeiten. Fügen Sie der systemweiten BASH RC-Datei eine Zeile hinzu, z. B. /etc/bash.bashrc.
Richten Sie die Protokollierung für "local6" in Ihrem Systemlogger ein. Vielleicht so etwas:
Starten Sie den Systemlogger neu. Richten Sie möglicherweise die Rotation der Protokolldatei ein. Ausloggen; Anmeldung; Der Verlauf wird jetzt in einem Format wie dem folgenden in /var/log/commands.log geschrieben:
Datum Uhrzeit Hostname Logger: Benutzername [audit_pid]: Befehl [return_val]
Dies könnte weiter nach Geschmack optimiert werden.
quelle
Die folgenden Absätze beschreiben die Idee im Allgemeinen und sind in einigen Aspekten veraltet. Sie können sie jedoch auf dieser Seite verwenden. Verwenden wir eine große Datei ~ / .bash_history.archive (getrennt von HISTFILE = ~ / .bash_history). Beim Beenden jeder Bash-Sitzung können neue Verlaufszeilen daran angehängt werden.
Das erste Problem bei diesem Ansatz war: Wie kann man Bash erstellen, um dieses Skript bei jedem Exit aufzurufen? Sicher, wenn Sie es beenden, indem Sie 'exit' eingeben, können Sie die Funktion 'exit' als Alias verwenden, aber ich verwende dafür die Tastenkombination Strg-D, und ich konnte keinen Weg finden, wie ich es etwas neu zuweisen kann, aber keine eingebaute Exit-Funktion.
Der erste Versuch war also: Strg-D durch zu verbieten
export IGNOREEOF=10
und definieren Sie die doppelte Strg-X-Kombination, um die Exit-Funktion aufzurufen.
Der richtige Ansatz ist jedoch die Verwendung von exit tramp of bash. Dies ist eine perfekte Lösung, da es unabhängig von der Art und Weise, wie Sie bash beenden, aufgerufen wird: Strg-D, exit, xterm window schließen.
trap 'archive_history' EXIT
Der folgende Schritt besteht darin, eine Startzeile in unserer bash_history zu definieren, damit wir nur neue Zeilen speichern und sicherstellen können, dass wir an eine Verlaufsdatei anhängen.
Das ist alles, was wir zu Beginn der Bash brauchen - jetzt wissen wir, ab welcher Verlaufslinie die aktuelle (frische) Geschichte beginnt. Um den Verlauf zu speichern, fügen Sie das nächste Stück zu Ihrem ~ / .bashrc hinzu.
Die Datei ~ / .inputrc sollte die nächsten Zeilen enthalten, um die Exit-Verknüpfung zu Strg-x x neu zu definieren. Beim ersten Versuch haben Sie vielleicht das Gefühl, dass es eine schreckliche Abkürzung ist, aber dann gewöhnen Sie sich daran - glauben Sie mir.
Auch wenn Ihre Bash-Sitzung eine Anmeldesitzung ist und Sie mit '
logout
' beenden , können Sie die nächste Zeile zu Ihrer hinzufügen~/.bash_logout
Nachdem alle genannten Aktionen ausgeführt wurden, finden Sie Ihre
~/.bash_history.archive
Datei mit Abschnitten wie diesenDiese kann im Allgemeinen wie gewohnt als Verlaufsdatei gelesen werden, wenn Sie dies wünschen.
quelle