Hak logowania SSH?

15

Czy istnieje sposób na uruchomienie skryptu / polecenia za każdym razem, gdy użytkownik łączy się za pomocą ssh? Czy można go skonfigurować globalnie (tj. Uruchamiać skrypt po zalogowaniu się dowolnego użytkownika)?

Natknąłem się na to pytanie na stronie Identica, ale nie ma jeszcze odpowiedzi i chciałbym ją poznać.

phunehehe
źródło

Odpowiedzi:

11

Dla wszystkich użytkowników lub konkretnego użytkownika? Dla jednego użytkownika ustaw go w swoim .bashrcpliku; dla wszystkich użytkowników sprawdź pam_exec .

Jeśli użytkownicy przychodzą sshd, będziesz chciał dodać następujący wiersz /etc/pam.d/sshd; inne pliki w zależności od ich źródła:

session optional pam_exec.so seteuid  /path/to/my/hook.sh

Do celów testowych moduł jest dołączony jako optional, abyś mógł nadal się zalogować, jeśli się nie powiedzie. Po upewnieniu się, że działa, możesz zmienić optionalna required. W takim przypadku logowanie nie będzie możliwe, chyba że wykonanie skryptu przechwytującego zakończyło się pomyślnie.

Uwaga: Jak zawsze po zmianie konfiguracji logowania, pozostaw kopię zapasową otwartą w tle i przetestuj logowanie z nowego terminala.

Glen Solsberry
źródło
Dzięki, to wygląda obiecująco. Czy możesz rozwinąć nieco więcej? Nie znam tego.
phunehehe
Przypuszczam, że powinienem dodać session include pam_exec.so seteuid /path/to/scriptdo pliku /etc/pam.d/system-remote-login. Czy to jest poprawne?
phunehehe
Albo system-remote-loginalbo sshd, w zależności od tego, w jaki sposób wchodzi użytkownik.
Glen Solsberry
Niesamowite! Byłoby wspaniale, gdybyś edytował odpowiedź w celu włączenia informacji (wiesz, dla innych, którzy ją szukają).
phunehehe
Uwaga dla osób googlowania, można również umieścić ten wiersz auth optional pam_exec.so /path/to/my/hook.shw /etc/pam.d/common-authmieć PAM informować o wszelkich zdarzeniach, które wystąpiły uwierzytelniania. Ten program może także wysyłać Ci powiadomienia push: github.com/benjojo/PushAlotAuth
Nick Sweeting
6

istnieje inny sposób, który wpływa tylko na użytkowników korzystających z ssh, a nie lokalnych (co może być lepsze w sytuacjach awaryjnych)

zobacz fragmenty ze strony podręcznika ssh poniżej.

w takim przypadku użytkownicy zwykle mogą samodzielnie modyfikować pliki (trochę jak .bashrc)

 ~/.ssh/rc
         Commands in this file are executed by ssh when the user logs in, just before the user's shell (or command) is started.  See the sshd(8) manual page for more information.

i jest to globalne i nie może być modyfikowane przez zwykłego użytkownika

 /etc/sshrc
         Commands in this file are executed by ssh when the user logs in, just before the user's shell (or command) is started.  See the sshd(8) manual page for more information.
Marcel G.
źródło
2
Ale / etc / sshrc zostanie wykonany tylko wtedy, gdy użytkownik nie ma własnego ~ / .ssh / rc, więc ten użytkownik może ominąć
isevcik
2
@isevcik, to jest tylko wtedy, gdy PermitUserRC jest ustawiony na „tak” w /etc/ssh/sshd_config( man sshd_configszczegóły)
jeremysprofile