Jak zalogować wszystkie polecenia Bash wszystkich użytkowników na serwerze?

21

Nasza mała firma prowadzi Ubuntu Server 11.10, do którego kilka osób ma dostęp do SSH. Czasami używane są również rzeczywiste terminale. Jak możemy lokalnie zapisać wszystkie uruchomione polecenia Bash, wraz z użytkownikiem i znacznikiem czasu?

Możemy założyć, że nikt nie jest nikczemny i aktywnie próbuje uniknąć rejestrowania, ale nadal wolelibyśmy, aby użytkownicy nie mieli bezpośredniego dostępu do zapisu do swoich plików dziennika. Sesje jednoczesne muszą być obsługiwane poprawnie.

Cyna
źródło

Odpowiedzi:

32

W przypadku powłok BASH dokonaj edycji ogólnosystemowego pliku konfiguracyjnego środowiska wykonawczego BASH:

sudo -e /etc/bash.bashrc

Dołącz na końcu tego pliku:

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

Skonfiguruj rejestrowanie dla „local6” z nowym plikiem:

sudo -e /etc/rsyslog.d/bash.conf

A zawartość ...

local6.*    /var/log/commands.log

Uruchom ponownie rsyslog:

sudo service rsyslog restart

Wyloguj. Zaloguj się. Voila!

Ale zapomniałem o rotacji logów:

sudo -e /etc/logrotate.d/rsyslog

Istnieje lista plików dziennika, które można obracać w ten sam sposób ...

/var/log/mail.warn
/var/log/mail.err
[...]
/var/log/message

Dodaj nowy plik dziennika poleceń bash do tej listy:

/var/log/commands.log

Zapisać.


źródło
Zapomniałem o rotacji logów, którą dodałem do odpowiedzi.
1
Ten sposób działa, ale mógłbym wymyślić wokół niego metodę (z csh, być może .bash_logout). Poszedłbym z acct rozwiązanie Sabacon. Były to doskonałe lektury : linuxjournal.com/article/6144 i beginlinux.com/blog/2010/01/…
2
Wierzę, że użytkownik może to łatwo dezaktywować, po prostu resetując, wyłączając PROMPT_COMMANDlub uruchamiając powłokę inną niż bash.
Stefan Lasiewski,
1
@Benubird wygląda na to, że istnieje kilka wstępnie ustawionych poziomów urządzeń, z których 8 to local0-local7: en.wikipedia.org/wiki/Syslog . 0 oznacza awaryjne, 7 oznacza debugowanie, a 6 to po prostu 7, „normalne komunikaty operacyjne”.
munchybunch
1
@yukashima, ponieważ dzienniki mogą stać się dużymi plikami, jeśli nie zostaną usunięte, obracanie oznacza obrócenie plików dziennika i usunięcie starszych, aby zmniejszyć dzienniki ...
Badr Elmers
4

System rozliczania procesów może być pomocny w tym względzie, szczególnie pakiet acct , który udostępnia polecenia lastcomm i ac.

Polecenia ac drukują statystyki dotyczące czasu połączenia użytkowników w godzinach. Jest to czas, przez jaki użytkownik był podłączony do systemu, albo zdalnie przez SSH lub terminal szeregowy, albo w konsoli.

Polecenie lastcomm wyświetla informacje o wcześniej wykonanych poleceniach. Najnowsze wpisy znajdują się na górze listy. Wyświetlana jest również łączna ilość czasu procesora, którą wykorzystał każdy proces.

Stary samouczek, który może być pomocny, znajduje się tutaj:

http://www.linuxjournal.com/article/6144?page=0,1

W tym samouczku można znaleźć inne polecenia księgowe, takie jak ostatni itd.:

http://www.techrepublic.com/article/system-accounting-in-linux/1053377

Sabacon
źródło
lastcomm jest dość bezcelowy jako rejestrator poleceń. Rejestruje tylko uruchomiony plik wykonywalny. Żadne argumenty, przełączniki ani ścieżki nie są rejestrowane.
Phil_1984_
3

Możesz użyć snoopy .

Snoopy logger może dobrze pasować do twojego celu. Nie ma być nieuniknionym rozwiązaniem do rejestrowania, ale raczej pomocnym narzędziem dla rzetelnych administratorów, którzy wolą śledzić własne działania.

Ujawnienie: Jestem opiekunem snoopy.

Bostjan Skufca
źródło
Podaj instrukcje dotyczące instalowania i używania go w odpowiedzi.
muru
1
Szczegółowe instrukcje instalacji są dostępne na stronie snoopy github, która jest obecnie głównym zasobem snoopy: github.com/a2o/snoopy . Ponownie udzielam instrukcji instalacji w innych miejscach, ponieważ podstawowa lokalizacja jest utrzymywana zgodnie z projektem, a inne nie. Właśnie zaktualizowano plik Readme BTW, aby był bardziej uporządkowany.
Bostjan Skufca
1
Może tak. Ale bez podsumowania kroków potrzebnych do użycia tego, jest to odpowiedź tylko do linku i prawdopodobnie zostanie usunięta.
mur
1
Cóż, wskazałem alternatywne i realne rozwiązanie. Jeśli nie o to chodzi w tej witrynie, to należy ją usunąć wraz z moim kontem.
Bostjan Skufca
2
@BostjanSkufca nie trzeba się obrażać. To tylko wymiana stosów, aby mieć przynajmniej rozsądnie samodzielne odpowiedzi. Jeśli tak bardzo sprzeciwisz się dodawaniu kroków, to jest twoje życzenie. Moje zdanie głosowe pozostaje. Ktoś prawdopodobnie to zagłosuje.
muru
3

Znajdziesz tutaj skrypt do rejestrowania wszystkich poleceń bash / wbudowanych w pliku tekstowym lub serwerze syslog bez użycia łaty lub specjalnego narzędzia wykonywalnego.

Bardzo łatwe do wdrożenia, ponieważ jest to prosty skrypt powłoki, który należy wywołać raz podczas inicjalizacji bash .

Jest bezpłatny i mam nadzieję, że odpowiada Twoim potrzebom.

Francois Scheurer
źródło
1
To dobra odpowiedź, ale lepiej jest dołączyć kroki i skrypt w treści odpowiedzi, niż link do bloga. Czy możesz edytować swoją odpowiedź, aby to uwzględnić?
Tom Brossman,
2
Strona jest teraz niedostępna
Gaia,
0

Aby zająć się wieloma sesjami, nie nadpisując pliku historii, będziesz musiał umieścić „shopt -s histappend” w pliku startowym Bash. Zobacz także to pytanie dotyczące tego samego problemu.

pdp
źródło
0

spróbuj tego (powyższe rozwiązania nie będą działać w 100% z bash 4.3):

export HISTTIMEFORMAT="%Y-%m-%d %T "
export PROMPT_COMMAND='trap "" 1 2 15; history -a >(tee -a ~/.bash_history | while read line; do if [[ $line =~ ^#[0-9]*$ ]]; then continue; fi; logger -p user.info -t "bash[$$]" "($USER) $line"; done); trap 1 2 15;'

robi to logowanie ORAZ zapobiega rejestrowaniu znaczników czasu, które są używane dla pliku historii bash. pułapka jest potrzebna, ponieważ bash wyśle ​​sygnały do ​​„subjob” po wielokrotnym naciśnięciu strg + c (testowane z bash 4.3). wymusi to wylogowanie bieżącego użytkownika (np. zalogowanego za pomocą sudo)

Hans-Joachim Kliemeck
źródło
0

Możesz także spróbować zainstalować acct. Acct prowadzi szczegółową ścieżkę audytu tego, co dzieje się w systemach Linux.

sudo apt-get install acct
edwinksl
źródło