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.