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.

jl6
źródło

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.

Majenko
źródło
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]

podnieść fałszywy alarm
źródło
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
źródło
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