Ich möchte die Verlaufseinstellungen für alle Benutzer der von mir verwalteten Systeme ändern. Ich möchte, dass sie die Informationen vom Verbindungsterminal enthalten, wie vonwho
sysadmin:/ # who
sysadmin pts/0 Mar 26 07:11 (sysadmin.doofus.local)
Ich ändere meinen Verlauf derzeit auf folgende Weise. Ich weiß, dass viele dieser Einstellungen hier schon mehrmals behandelt wurden. Ich habe diesen Code jedoch aus "Rezepte zur Linux-Systemadministration von: Juliet Kemp" vor langer Zeit.
shopt -s histappend
PROMPT_COMMAND='history -n;history -a'
HISTSIZE=100000
HISTFILESIZE=100000
HISTTIMEFORMAT="%m/%d/%y %T "
shopt -s histappend
behebt das Problem, dass Informationen verloren gehen können, wenn Sie mehrere Terminals geöffnet haben.
PROMPT_COMMAND='history -n;history -a'
wird erweitert, um das Anhängen an den Verlauf in Echtzeit über mehrere Terminals hinweg zu ermöglichen.
HISTSIZE=100000
HISTFILESIZE=100000
verlängert die history
Retentionszeit
HISTTIMEFORMAT="%m/%d/%y %T
" stellt jeder Zeile der Geschichte einen Zeitstempel voran
Was Sie normalerweise erhalten mit history
835 ls
836 cd ..
Meine modifizierten aktuellen history
Ergebnisse
5853 03/26/12 07:16:49 ls
5854 03/26/12 07:16:50 ll
Die Rückkehr von history
Ich würde 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 darauf „verpflichtet“, den DNS
Namen zu sehen. Ich möchte ihn nur dort sehen, wenn er von who
oder einem anderen Ort abgerufen wird, ohne dass eine Suche oder Abfrage irgendeiner Art durchgeführt werden muss. Mit einer IP-Adresse wäre ich zufrieden.
002 03/26/12 05:11:30 192.168.0.2 ll
Warum? Ich verwalte mehrere Systeme, bei denen mehrere Benutzer derselben Gruppe eine Benutzer-ID für ihre täglichen Aufgaben verwenden. Dadurch könnte ich ihren tatsächlichen Standort und tatsächlichen Benutzer innerhalb der Organisation mit dem in der Historie Gesagten in Verbindung bringen.
Ich bin mir bewusst, dass das nicht optimal ist und würde es gerne ändern, aber wenn man auf einem Schiff von der Größe eines Kreuzfahrtschiffs ist, versucht man nicht, Haarnadelkurven zu fahren. (Hinweis: Wenn man das tut, versuchen die Passagiere, einen über Bord zu werfen.)
Bis ich sie auf eine bessere Lösung migrieren kann, möchte ich jedenfalls über diese Tracking-Funktion verfügen.
Wenn Sie Empfehlungen dazu haben, was ich derzeit für meine history
Modifikationen verwende, würde ich diese gerne hören.
Danke,
Bearbeiten: 1
Ich möchte keine anderen Programme ausführen oder „im Rahmen des Zumutbaren“ zusätzliche Konfigurationen vornehmen müssen.
Ich möchte zusätzlichen Aufwand verursachen 0
; wenn, dann sollte dieser gering sein.
Ich vertraue meinen Benutzern, ich möchte nur (sollte etwas passieren) sehen, welcher der sagen wir 10 Benutzer, die sich mit demselben Benutzer:Passwort beim System angemeldet haben, es getan hat. Oder es war vielleicht kein Benutzer, sondern jemand, der vergessen hat, cron
auf einem System eine Verbindung als Benutzer herzustellen, um etwas zu tun. Oder eine Anwendung, z. B.: BMC Control-M
die eine Verbindung herstellt ssh
und Aufgaben ausführt. Es geht nicht so sehr darum, „schlechte Benutzer“ zu finden, sondern darum, sie mit minimalem Aufwand aufspüren zu können.
Bearbeitung 2:
Die Systeme laufen unter SLES und RHEL
Antwort1
Gemäß lluas Vorschlag können wir etwas mehr mit der Historie arbeiten. Fügen Sie der systemweiten BASH-RC-Datei eine Zeile hinzu, beispielsweise /etc/bash.bashrc.
export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'
Richten Sie die Protokollierung für „local6“ in Ihrem Systemlogger ein. Vielleicht so etwas:
local6.* /var/log/commands.log
Starten Sie den Systemlogger neu. Richten Sie ggf. eine Protokolldateirotation ein. Melden Sie sich ab und wieder an. Der Verlauf wird nun in einem Format wie diesem in /var/log/commands.log geschrieben:
Datum Uhrzeit Hostname Logger: Benutzername [audit_pid]: Befehl [return_val]
Dies könnte je nach Geschmack noch weiter optimiert werden.
Antwort2
Die folgenden Absätze beschreiben die Idee im Allgemeinen und sind in einigen Aspekten veraltet, aber Sie können dann das Neueste verwenden vonDasSeite. Verwenden wir eine große Datei ~/.bash_history.archive (getrennt von HISTFILE=~/.bash_history). Und dann fügen wir beim Beenden jeder Bash-Sitzung neue Verlaufszeilen hinzu.
Das erste Problem bei diesem Ansatz war: Wie bringt man Bash dazu, dieses Skript bei jedem Beenden aufzurufen? Natürlich kann man die Funktion „exit“ auch als Alias verwenden, wenn man es durch die Eingabe von „exit“ beendet, aber ich verwende dafür die Tastenkombination Strg-D und konnte keine Möglichkeit finden, es einer anderen als der integrierten Exit-Funktion zuzuweisen.
Der erste Versuch war also: Strg-D zu verbieten durch
export IGNOREEOF=10
und definieren Sie die doppelte Strg-X-Kombination, um die Exit-Funktion aufzurufen.
Der richtige Ansatz besteht jedoch darin, „exit tramp“ von Bash zu verwenden. Dies ist eine perfekte Lösung, da es unabhängig von der Art und Weise aufgerufen wird, wie Sie Bash beenden: Strg+D, beenden, Xterm-Fenster schließen.
trap 'archive_history' EXIT
Der nächste Schritt besteht darin, eine Startzeile in unserer Bash-History zu definieren, damit wir nur neue Zeilen speichern und sicherstellen können, dass wir sie an eine Verlaufsdatei anhängen.
export CURBASHSTART=`grep -v "^[ \t]*$" $HISTFILE | wc -l | awk '{print $1}'` CURBASHDATE=`date`
shopt -s cmdhist histappend
Das ist alles, was wir beim Start von Bash brauchen – jetzt wissen wir, ab welcher Verlaufszeile der aktuelle (neue) Verlauf beginnt. Um den Verlauf zu speichern, fügen Sie den nächsten Teil zu Ihrer ~/.bashrc hinzu.
archive_history()
{
HISTORYOLD=${HISTFILE}.archive
CURTIME=`date`
CURTTY=`tty`
if [ x$HISTDUMPPED = x ]; then
echo "#-${HOSTNAME}-- ${CURBASHDATE} - ${CURTIME} ($CURTTY) ----" >> $HISTORYOLD
history $(($HISTCMD-${CURBASHSTART-0})) | sed -e 's/^[ ]*[0-9][0-9]* [ ]*//g' >> $HISTORYOLD
export HISTDUMPPED=1
fi
}
exit ()
{
archive_history
builtin exit
}
Die Datei ~/.inputrc sollte die nächsten Zeilen enthalten, um die Tastenkombination zum Beenden auf Strg-x x neu zu definieren. Beim ersten Versuch kommt es Ihnen vielleicht so vor, als wäre die Tastenkombination schrecklich, aber dann gewöhnt man sich daran – glauben Sie mir.
$if Bash
# to exit through calling exit function which will archive the history
"\C-x\C-x": "exit\n"
# to dump history we have so far
"\C-x\C-w": "archive_history\n"
$endif
Auch wenn Ihre Bash-Sitzung eine Login-Sitzung ist und Sie sie durch Aufruf von ' logout
' beenden, können Sie die nächste Zeile zu Ihrer~/.bash_logout
archive_history
Nachdem alle genannten Aktionen abgeschlossen sind, können Sie Ihre ~/.bash_history.archive
Datei mit Abschnitten wie diesen finden
#-belka-- Sun Oct 12 21:52:13 EDT 2003 - Sun Oct 12 21:53:25 EDT 2003 (/dev/pts/13) ----
exit
aptitude
exit
#-washoe-- Sun Oct 12 18:03:16 EDT 2003 - Sun Oct 12 23:06:48 EDT 2003 (/dev/pts/3) ----
exit
cd progr/letters/resume/
e resume.tex
die im Allgemeinen als normale Verlaufsdatei gelesen werden kann, wenn Sie dies wünschen.