Ich möchte alle Befehle in Unix/Linux von jedem Benutzer erfasst erfassen. Es gibt einige Alternativen wie die Verwendung von Script-Befehl oder Acct-Dienstprogramm. Aber das Problem mit ihnen ist, dass sie alles vom Terminal in eine Datei stumm oder nur die Zusammenfassung der Befehle bereitstellen. Ich suche nach einem Dienstprogramm, wo es mir alle Befehle geben wird, die von jedem Benutzer mit den Argumenten für die Befehle eingegeben werden. Ist es möglich? Gibt es Alternativen, wie zum Beispiel einen Haken bei Systemaufrufen zu machen?Wie erfasst man alle Befehle, die von einem Benutzer in Unix/Linux eingegeben wurden?
Antwort
Es scheint einen ziemlich guten Artikel über Shell-Auditing bei http://administratosphere.wordpress.com/2011/05/20/logging-every-shell-command/ zu geben.
Dies berücksichtigt Dinge wie die Zuverlässigkeit von Benutzerverlaufsdateien (und bietet Informationen zur Verbesserung dieser), diskutiert aber auch explizite Prüffunktionen, die in Shells integriert sind. Es kann sein, dass in jeder Umgebung, die Sie verwenden, die Shells mit aktivierten Auditing-Funktionen nicht kompiliert werden. Wenn Sie jedoch die Quelle und Konfiguration für Ihre Builds zur Verfügung haben (wie Sie es zumindest für jede Linux-Distribution tun würden), Es ist zu schwierig, die Überwachungsfunktion zu aktivieren, während der Rest der Konfiguration so bleibt wie in der Standardverteilung.
Was dieser Ansatz noch offen lassen würde, sind die Befehle, die durch andere Befehle ausgeführt werden - oder Betriebssystemfunktionen, die in einem Programm aufgerufen werden. Also, zum Beispiel wenn Sie Perl haben, oder jede andere Programmiersprache Dolmetscher auf der Maschine, während Sie möglicherweise die Ausführung von Perl überprüfen kann, kann man nicht sagen, was der Benutzer den Perl-Interpreter gesagt hatte zu tun. Auf der anderen Seite bin ich selbst bei der Shell-Überwachung nicht sicher, ob die Perl-Ausführung gesehen werden würde, wenn sie beispielsweise ausgeführt würde. innerhalb eines Editors (wie vi) als Filter, um alles zu verarbeiten, was im Editor geschrieben wurde. So
, während Shell Revision Sie bieten eine Schicht aus Wirtschaftsprüfung, ist der Gewinn nicht so toll, es sei denn Ihre Umgebung wirklich gegen andere Wege der Ausführung angezogen wird als die Schale.
sollten Sie prüfen, ob die Benutzer tatsächlich benötigen Zugriff Shell geprüft werden - und wenn nicht, sie mit etwas begrenzten, mit Prüffunktionen. Ein kleines textbasiertes Menüsystem, vielleicht?
Schnappen /home/victim/.bash_history
oder /home/victim/.config/fish/fish_history
Diese lassen Sie alle bash und Fisch-Shell-Befehle mit args sehen, die vom Benutzer eingegeben ws.
Der Frage Schöpfer wollte explizit NICHT die Geschichte zu verwenden. –
Der einfachste Weg, dies zu lösen, ist, wenn Sie root und in der Lage sind, die Systemdateien zu ändern, indem Sie leiten Sie die Konsole selbst auf diese Weise:
Wenn Sie zum Beispiel /bin/sh
als Standardkonsole, um es zu /bin/hs
bewegen und eine Datei wie diese unter /bin/sh
erstellen:
#!/bin/hs
ORIGSHELL=/bin/hs
LOGFILE=/var/log/whatyoulike
OPTIONS="[email protected]"
USER=`whoami`
WEBUSER=web
WILD=NO
WARN=NO
if [ "$USER" = "$WEBUSER" ]
then
#Ok then - are we doing something wild?
for ARG in [email protected]
do
case "$ARG" in
*\/lynx)
WILD=YES
;;
*\/wget)
WILD=YES
WARN=YES
;;
*\/curl)
WILD=YES
WARN=YES
;;
*\/links)
WILD=YES
WARN=YES
;;
*\/fetch)
WILD=YES
WARN=YES
;;
esac
done
#Are we wild?
if [ "$WILD" = "YES" ]
then
HOST=`hostname`
IPADDR=`resolveip -s $HOST`
NETSTAT=`/usr/bin/nighthawk -ape --numeric-hosts --numeric-ports --tcp | grep 'ESTABLISHED web'`
# Log it.
echo "`date` [$USER] $IPADDR "[email protected]"" >> $LOGFILE
echo "$NETSTAT" >> $LOGFILE
fi
#Are we REALLY wild?
if [ "$WARN" = "YES" ]
then
# Mail it!
mail -s 'HACKATTACK' [email protected] < $LOGFILE &
fi
fi
# Now, do it.
exec $OPERATION "[email protected]"
#we never come here...
exit 0
Dies ist nur ein Beispiel, wie es verwendet werden kann transparent, alles zu verfolgen. Sie können tun, was Sie die Eingabe überprüfen möchten. Das Skript oben wird verwendet, auch den Urheber der aktuell Shell zu finden, so dass Sie auf sie reagieren können. Natürlich sind die obigen Fallüberprüfungen nicht diejenigen, die wir wirklich verwenden;) - aber eine gute Probe.
Hoffnung, es hilft, Jimmy
Das sieht sehr gefährlich aus, da es die Systemshell ersetzt. –
greifen die bash-Quelle. Fügen Sie einen Logger um den Exec-Aufruf hinzu. Kompiliere es. Führen Sie dies nach dem Anmelden als ersten Befehl aus.
Alles andere will wirklich root macht.
Ich weiß, das ist alt, aber ich denke, der Skriptbefehl könnte sein, wonach er suchte?
> script my_output_file
Script started, file is my_output_file
http://www-users.cs.umn.edu/~gini/1901-07s/files/script.html
Es wird ermöglicht, Audit, tty Aufnahme, Hacks und kostenlose Tools, zu tun, was Sie wollen, aber je nach Umfang der Umgebung, die Sie versuchen zu kontrollieren, können Sie besser dran indem Sie sowohl Audit als auch Produkte verwenden, die sich auf die Bewältigung der Herausforderung konzentrieren, die Sie angehen möchten. Einige sehr populären verwendet, auf ein paar Finanzdienstleistungskunden sind [Observe-IT, Centrify und PowerBroker
Hope this
hilft Sie Snoopy Logger können
Was es ist: Eine einfache Bibliothek, fügt selbst zwischen Prozess und execv/e() syscalls mittels LD-Preloading. Es protokolliert alle ausgeführten Befehle in syslog.
Was es nicht ist: Sicherheit/Auditing-Lösung - es kann leicht umgangen werden. Es protokolliert nicht integrierte Shell-Befehle (wie sie intern sind und wenn sie aufgerufen wird, erzeugt die Shell keinen neuen Prozess - Echo vs/bin/echo zum Beispiel).
Offenlegung: aktuelle snoopy Maintainer hier.
Für sporadische Aufzeichnung verwende ich normalerweise
ssh localhost | tee -a aufgenommen-session.log
Das funktioniert ganz gut.
- 1. CF-Abfragen mit Formularvariablen, die von einem Benutzer eingegeben wurden
- 2. Alle Befehle, die in einer Bash-Shell eingegeben wurden, mit einem Python-Skript umhüllen
- 3. Wie erfasst man alle Regex-Gruppen in einem Regex?
- 4. Wie erfasst man untergeordnete Links, die mit jquery geklickt wurden?
- 5. Wie erfasst man die Ausgabe von printf?
- 6. Wie kann man auf Gruppen zugreifen, die von rekursiven Perl-Regexes erfasst wurden?
- 7. Validierung von Daten, die mit Tkinter eingegeben wurden
- 8. Wie man Verkehr in Python erfasst
- 9. Wie bekomme ich alle Twitter-Updates, die jemals von einem Benutzer gemacht wurden?
- 10. Wie Sie HTML-Tags schließen, die vom Benutzer eingegeben wurden. dh Schließen des Tags automatisch
- 11. Möglichkeit, alle Dateien zu sehen, die jemals von einem Benutzer in Visual SourceSafe eingecheckt wurden?
- 12. Wie formatiere ich Warnungen, die mit logging.captureWarnings erfasst wurden?
- 13. Wie kann man feststellen, welcher Benutzer bestimmten Datenzugriff eingegeben hat?
- 14. Zugriff auf VBA für das Speichern von Daten, die in eingegeben wurden Von
- 15. Wie löscht man Werte, die mit Selenium WebDriver in JS eingegeben wurden?
- 16. Daten eingegeben von Benutzer und App-Update
- 17. Wie listet ich alle Knoten auf, die von einem Benutzer erstellt wurden, der in einem Argument mithilfe von Ansichten in Drupal angegeben wurde?
- 18. Gleichheit bei Gleitkommazahlen, eingegeben von Benutzer
- 19. Wie kann man CSS-Stylesheets anzeigen, die von einer Google Chrome-Erweiterung mithilfe von Dev-Tools eingegeben wurden?
- 20. Wie erfasst man das Mausklick-Ereignis in VS2008 von ENVDTE?
- 21. Filtern von Zeichen eingegeben in einem UITextField
- 22. Wie wird Google Fit-Aktivität identifiziert? Wird diese manuell eingegeben oder vom Sensor erfasst?
- 23. Wie die Anzahl der Zeichen in einem Textbereich eingegeben begrenzen
- 24. Wie gebe ich Variablen, die von einem Block erfasst wurden, an den Aufrufer in Objective-C zurück
- 25. Wie kann ich auf Informationen zugreifen, die in einem HTML-Formular in der .php-Datei eingegeben wurden?
- 26. scons - wie man etwas ausführt/nachdem/alle Ziele wurden gebaut
- 27. jQuery - überprüfen, ob alle Pflichtfelder in einem Abschnitt beantwortet wurden
- 28. Wie erhält man einen Feed mit Kommentaren, die während einer YouTube-Liveübertragung über das Feld "Chat" eingegeben wurden?
- 29. Filterreservierungen, die vom angemeldeten Benutzer erstellt wurden
- 30. Wie man Fingerbewegungsrichtung im androiden Telefon erfasst?
Ist Shell-Geschichte eine praktikable Option? – wei2912
Ich möchte nicht die Geschichte von Bash oder einer anderen Shell verwendet werden. – vinayag
Ausgezeichnete Antwort auf: http://serverfault.com/questions/470755/log-all-commands-run-by-admins-on-production-servers – IvanD