Chociaż pytanie to zostało zadane przez osobę chcącą nagrać własne sesje, alternatywnym przypadkiem użycia może być administrator systemu, który chce śledzić, co robią różni użytkownicy.
Obawiam się, że uruchamianie script
w całym systemie bashrc
może nie być odpowiednie w przypadku, gdy użytkownicy maszyny niechętnie nagrywają sesje.
Użytkownicy, którzy chcą pozostać incognito, mogą pominąć rejestrowanie, prosząc sshd o otwarcie innej powłoki (np. zsh
) Lub uruchomienie, bash --rcfile ___
aby zapobiec /etc/bash.bashrc
załadowaniu.
Alternatywne podejście
W tym przewodniku z 2008 r. ( Zarchiwizowanym ) zastosowano inną metodę wymuszenia script
uruchomienia, gdy użytkownik loguje się przy użyciu ssh, co wymaga od użytkowników zalogowania się przy użyciu klucza publicznego / prywatnego.
Odbywa się to poprzez dodanie skryptu do .ssh/authorized_keys
pliku użytkownika przed kluczem:
command="/usr/local/sbin/log-session" ssh-dss AAAAB3NzaC1kc3MAAAEBAMKr1HxJz.....
log-session
( Archiwum ) skrypt następnie decyduje, czy nie uruchomić /usr/bin/script
się zalogować sesji tego użytkownika.
exec script -a -f -q -c "$SSH_ORIGINAL_COMMAND" $LOGFILE
Aby uniemożliwić użytkownikowi usunięcie dodanego polecenia, administrator będzie musiał przejąć własność authorized_keys
pliku użytkownika .
chown root:root ~user/.ssh/authorized_keys
Niestety oznacza to, że użytkownik nie będzie mógł dodawać żadnych dodatkowych kluczy ani, co ważniejsze, odwołać istniejącego klucza, jeśli zostanie naruszony, co jest dalekie od ideału.
Ostrzeżenia
Domyślną konfiguracją sshd jest to, że pozwala użytkownikom na wykonywanie SFTP podczas logowania ssh. Umożliwia to użytkownikom edycję plików bez rejestrowania zmian. Jeśli administrator nie chce, aby użytkownicy mogli to zrobić, powinien włączyć rejestrowanie SFTP lub wyłączyć usługę. Chociaż nawet wtedy użytkownicy nadal mogą dokonywać niewidocznych zmian w plikach, uruchamiając coś takiego w swoim terminalu:
curl "http://users.own.server/server/new_data" > existing_file
Możliwe może być monitorowanie takich zmian za pomocą systemu plików kopiowania przy zapisie, który rejestruje całą historię plików.
Ale podobna sztuczka pozwoliłaby użytkownikowi na wykonywanie poleceń bez ich logowania:
curl "http://users.own.server/server/secret_commands_824" | sh
Nie znam na to łatwych rozwiązań. Możliwościami mogą być:
- Rejestrowanie wszystkich danych sieciowych (i rozplątywanie ich później).
- Rejestrowanie wszystkich wywołań systemowych.
To może być możliwe w przypadku audytu .
Ale w każdym razie...
Jest mało prawdopodobne, aby rejestrowanie sesji użytkownika zapewniało jakiekolwiek rzeczywiste bezpieczeństwo dla administratorów. Domyślnie użytkownik może manipulować tylko własnymi plikami i nie może zaszkodzić systemowi. Jeśli złośliwemu użytkownikowi udało się eskalować uprawnienia, może wyłączyć rejestrowanie i usunąć dzienniki (chyba że administrator skonfigurował dzienniki do przechowywania na osobnym komputerze, w sposób dołączany tylko jako dodatek).
Administratorzy, którzy automatycznie rejestrują sesje użytkowników, powinni prawdopodobnie poinformować użytkowników, że jest to wykonywane . W niektórych jurysdykcjach ta forma gromadzenia danych może naruszać przepisy dotyczące danych lub prywatności . A przynajmniej uświadomienie ich użytkownikom byłoby z szacunkiem dla użytkowników.
Bardziej prawdopodobne jest, że administrator będzie zainteresowany rejestrowaniem sesji sudo
użytkowników. Można temu zaradzić w innej odpowiedzi, a nawet w innym pytaniu.
exec
na początku linii. powinien zacząć odscript -f
tego samego PID-u powłoki.