Jak zalogować wszystkie polecenia powłoki UNIX przesłane przez wszystkich użytkowników?


8

Czy istnieje elegancki sposób na rejestrowanie każdego polecenia wysłanego we wszystkich powłokach na komputerze? Jest to w kontekście rzadko używanego serwera Ubuntu, którego jestem jedynym człowiekiem. (Istnieje kilka kont użytkowników używanych przez systemy automatyczne).

Chciałbym, aby było to dyskretne i mało kosztowne, więc chciałbym, aby istniała prosta metoda obejmująca coś takiego script.

Odpowiedzi:


9

Od zarania dziejów (datowanych na czasy, kiedy ludzie musieli płacić prawdziwe pieniądze za cykl komputerowy, którego używali) Unix i jego klony mają wbudowany system o nazwie Process Accounting ( acct). Dzięki temu administratorzy systemu mogli dokładnie wiedzieć co robili ich użytkownicy, a zatem mogli odpowiednio naliczać opłaty.

Urządzenia acctdo dziś istnieją w większości systemów Unix i Linux.

Ta strona: http://www.cyberciti.biz/tips/howto-log-user-activity-using-process-accounting.html zawiera instrukcje dotyczące włączania.


Czy można to również wykorzystać do zarejestrowania, który użytkownik wykonuje sudo i su, a które z poleceń roota później?
— Daniel Beck

Wierzę, że rejestruje każde uruchomienie polecenia, wpisane przez użytkownika, tty itp. Możesz dopasować polecenia w tty do użytkownika, który był zalogowany do tego tty, aby prześledzić, przez których użytkowników suu lub sudo.
— Majenko,

Dziękuję, byłem całkowicie nieświadomy tej funkcji. Szybki odczyt stron podręcznika man sugeruje, że rejestrowanie jest kontynuowane aż do osiągnięcia warunku braku miejsca na dysku - stąd być może potrzeba skryptu logrotate.
— jl6

myślałem, że proces księgowy właśnie zalogował się, który program został uruchomiony, a nie polecenie z wszystkimi argumentami?
— Sirex

2

Oto bardzo fajny i szybki sposób na zalogowanie wszystkich poleceń powłoki :

Krok 1:

Użyj swojego ulubionego edytora tekstu, aby otworzyć / etc / bashrc i dołączyć następujący wiersz na końcu:

export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'

Krok 2:

Ustaw syslogger, aby pułapkę local6 na plik dziennika, dodając tę ​​linię w pliku /etc/syslog.conf:

local6.*                /var/log/cmdlog.log

[Zobacz pełny post na blogu tutaj]


Ostrzegam, że użytkownik będzie mógł wyłączyć to resetowanie zmiennej, a ponieważ jest ona wykonywana „przed wydaniem każdego głównego monitu”, fakt ten nie zostanie zarejestrowany.
— dmckee --- były moderator kociąt

2

Możesz użyć snoopy .

Jest bardzo prosty w instalacji i usuwaniu (nie wymaga modułu jądra ani łatania). Należy pamiętać, że nie jest to właściwe rozwiązanie kontroli i można je łatwo obejść.

Ujawnienie: Jestem obecnym opiekunem snoopy.


Bostjan Skufca dostarczył również dodatkowe instrukcje dotyczące instalacji snoopy w Ubuntu tutaj, a także w dodatkowym komentarzu w tym samym wątku tutaj .
— karel

+1 za snoopy; zapewnia dobry log poleceń i argumentów w /var/log/auth.log
— David Goodwin

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.