Mam mały serwer SSH i chciałbym napisać skrypt uruchamiający się za każdym razem, gdy ktoś loguje się za pośrednictwem SSH.
Jak mam to zrobić?
Chciałbym, aby skrypt był uruchamiany za każdym razem, gdy KAŻDY się loguje, i muszę mieć dostęp do co najmniej nazwy użytkownika, który się zalogował, oraz adresu IP osoby, z której się zalogowałem.
Myślałem o użyciu /etc/bash.bashrc
, ale czy to dobre rozwiązanie? Na przykład, czy istnieje sposób, aby użytkownik mógł wyłączyć jego użycie, a tym samym wyłączyć mój skrypt? Jeśli tak, jakie są moje inne opcje?
Dzięki.
Odpowiedzi:
Mechanizm, który należy zastosować, zależy od twoich celów.
Jeśli chcesz zapewnić użytkownikom coś wygodnego lub przyjaznego , to
/etc/profile
jest wystarczająco rozsądne, jeśli wszyscy użytkownicy używają tej samej powłoki. Jeśli chcesz, aby polecenia były wykonywane tylko podczas logowania przezssh
, umieść je w/etc/ssh/sshrc
. (Jeśli nie masz nic przeciwko użytkownikom nadpisującym polecenia własnym~/.ssh/rc
plikiem).Jeśli chcesz zmusić użytkownika do uruchomienia jednego programu i tylko jednego programu ,
ForceCommand
dobrym rozwiązaniem jest opcja opisana przez DigitalRoss. (Osobiście ograniczyłem użytkownika do obowiązkowego systemu kontroli dostępu , takiego jak AppArmor , SELinux , TOMOYO lub SMACK , aby upewnić się, że program nie może pozwolić użytkownikowi na ucieczkę. Pracowałem nad AppArmor od dziesięciu lat, więc to jest narzędzie, które wybrałbym jako pierwsze, ale pozostałe są świetnymi narzędziami napisanymi przez doskonałych programistów.)Jeśli chcesz, aby jeden program był wykonywany i nie przeszkadzał użytkownikowi w jakikolwiek sposób , najlepszym rozwiązaniem jest użycie
pam_exec(8)
modułu, którego nie można ominąć, działa niezależnie od powłoki i zapewnia łatwą możliwość uruchamiania jako użytkownik lub jako użytkownik konto programu wykonującego autoryzację. Strona man podaje następujący przykład:To może być przedłużony do uruchomienia na
auth
,account
,password
, isession
działania; prawdopodobniesession
byłby najlepszy do wykonania po zalogowaniu. Po prostu dodaj wiersz:do
/etc/pam.d/sshd
pliku kontrolnego.źródło
pam_exec
moduł jest dokładnie tym, czego szukam. Dzięki!Nowe wersje OpenSSH mają funkcję serwera o nazwie ForceCommand, która daje kontrolę nad skryptem zamiast operacji (scp, ssh, ...) zamierzonej przez użytkownika. Skrypt jest przekazywany z oryginalną komendą, więc prawdopodobnie możesz do niego dołączyć po zrobieniu wszystkiego, co musisz zrobić.
Z sshd_config (5):
Użyłem tego raz, aby zastąpić scp i zapewnić bezpieczne przesyłanie klejnotów, nie dając każdemu użytkownikowi upoważnionego do przesyłania klejnotów interaktywnego dostępu, którego nie potrzebowali ani nie chcieli.
źródło
Jednym ze sposobów byłoby użycie syslog-ng jako demona syslog i skonfigurowanie go do uruchamiania tła skryptu za każdym razem, gdy określony wpis dziennika (taki jak pomyślne logowanie ssh) jest zgodny.
źródło
Spójrz na to:
Nie wierzę, że istnieje sposób na wyłączenie tego działania. Czy ktoś może to zweryfikować?
źródło
/etc/profile
lub~/.profile
) zależy od powłoki użytkownika, tylko trochę mniej niżbashrc
. Jeśli twoi użytkownicy używają bash lub podobnego, to jest w porządku.