Czy ktoś ma skrypt bash, który wyśle wiadomość e-mail lub powiadomi kogoś w przypadku udanego logowania na serwerze ssh? Chcę otrzymać powiadomienie, jeśli ktoś zaloguje się do mojej skrzynki osobistej.
Używam Ubuntu 12.04 z systemem Xfce
Ostrzeżenie: zgodnie z komentarzami nie działa to, jeśli użytkownik utworzy plik o nazwie
~/.ssh/rc
. *
Zmodyfikuj lub utwórz /etc/ssh/sshrc
za pomocą następującej zawartości:
ip=`echo $SSH_CONNECTION | cut -d " " -f 1`
logger -t ssh-wrapper $USER login from $ip
echo "User $USER just logged in from $ip" | sendemail -q -u "SSH Login" -f "Originator <[email protected]>" -t "Your Name <[email protected]>" -s smtp.server.com &
To skutecznie powiadomi Cię e-mailem za każdym razem, gdy ktoś zaloguje się za pośrednictwem SSH, a login zostanie zalogowany w syslog.
Uwaga: Do działania powiadomienia e-mail potrzebujesz sendemail
pakietu ( sudo apt-get install sendemail
).
Uwaga: działa z przekierowaniem portów, ale z opcją -N nie.
ssh -N
Tylko przekierowanie portów.~/.ssh/rc
więc jest to całkiem bezużyteczne ze względów bezpieczeństwa. Odpowiedź @adosaiguas dotyczącapam_exec
jest poprawna.~/.ssh/rc
plików. Korzystanie z ogólnosystemowej metody opartej napam
jest po prostu bardziej niezawodne i bezpieczniejsze, ponieważ tylkoroot
można się z tym pograć. Tak więc odpowiedź brzmi:sshrd
metody działają dobrze dla systemów z jednym użytkownikiem, alepam
metoda działa niezawodnie dla wszystkich systemów.Ponieważ
sshrc
metoda nie działa, jeśli użytkownik ma własny~/.ssh/rc
plik, wyjaśnię, jak to zrobić za pomocąpam_exec
@adosaiguas. Dobrą rzeczą jest to, że można to łatwo dostosować do typów logowania innych niżssh
(np. Lokalne loginy lub nawet wszystkie loginy) poprzez podłączenie do innego pliku/etc/pam.d/
.Najpierw musisz mieć możliwość wysyłania poczty z wiersza poleceń. Istnieją inne pytania na ten temat. Na serwerze pocztowym jest prawdopodobnie najłatwiejszy do zainstalowania
mailx
(i tak już prawdopodobnie jest już zainstalowany).Następnie potrzebujesz pliku skryptu wykonywalnego
login-notify.sh
(umieszczam go/etc/ssh/
na przykład) o następującej treści. Możesz zmienić zmienne, aby zmienić temat i treść powiadomienia e-mail. Nie zapomnij wykonać,chmod +x login-notify.sh
aby był wykonywalny.Gdy to zrobisz, możesz dodać następujący wiersz
/etc/pam.d/sshd
:Do celów testowych moduł jest dołączony jako
optional
, abyś mógł nadal się logować, jeśli wykonanie się nie powiedzie. Po upewnieniu się, że działa, możesz zmienićoptional
narequired
. W takim przypadku logowanie nie będzie możliwe, chyba że wykonanie skryptu przechwytującego zakończyło się powodzeniem (jeśli tego właśnie chcesz).Dla tych z Was, którzy potrzebują wyjaśnienia, czym jest PAM i jak działa, oto bardzo dobre .
źródło
/etc/ssh/login-notify.sh failed: exit code 13
zaraz po zalogowaniu :(UsePAM
ustawiłeśyes
opcję w swoim sshd_config.unconfined_u:object_r:bin_t:s0
. Potem jachmod +x /bin/login-notify.sh
i to działa.Używamy Monit monitorować procesy na naszych linuxowych. Monitor może również powiadamiać e-mailem o udanych logowaniach przez ssh. Nasza konfiguracja monitora wygląda następująco
Uwaga: konfigurację serwera pocztowego, format wiadomości e-mail itp. Należy ustawić w
monitrc
plikuAktualizacja: Napisałem bardziej szczegółowy post na ten temat
źródło
Wprowadź następujące dane
/etc/profile
:Jak działa skrypt
/etc/profile
jest wykonywany przy każdym logowaniu (dla użytkowników powłoki bash). Instrukcja if zwróci wartość true tylko wtedy, gdy użytkownik zaloguje się przez ssh, co z kolei spowoduje uruchomienie bloku kodu z wcięciem.Następnie budujemy tekst wiadomości:
$(date)
zostanie zastąpiony przez wynikdate
polecenia${USER}
zostanie zastąpiony nazwą użytkownika$(hostname -f)
zostanie zastąpiony pełną nazwą hosta, do którego logowany jest systemDruga
TEXT
linia dodaje się do pierwszej, podając adres IP systemu, z którego loguje się ten użytkownik. Na koniec wygenerowany tekst jest wysyłany w wiadomości e-mail na Twój adres.Podsumowanie Linux domyślnie rejestruje każde logowanie do systemu, czy to przez ssh, czy nie, w plikach dziennika systemu, ale czasami - szczególnie w przypadku systemu, do którego dostęp jest rzadko uzyskiwany za pośrednictwem ssh - przydatne może być szybkie i nieprzyzwoite powiadomienie.
źródło
W tym drugim pytaniu prawdopodobnie masz to, czego szukasz. Zasadniczo możesz dodać wywołanie do polecenia mail w skrypcie, który jest uruchamiany, gdy użytkownik loguje się za pośrednictwem ssh: /etc/pam.d/sshd
źródło
Wziąłem kilka doskonałych odpowiedzi z tego wątku i stworzyłem coś, co można mniej więcej skopiować i wkleić. Używa Mailgun do wysyłania wiadomości e-mail, dzięki czemu oszczędzasz wszelkich problemów z konfiguracją STMP. Potrzebujesz tylko klucza API Mailgun i domeny wysyłającej.
Po zalogowaniu SSH skrypt wyśle szczegóły logowania (użytkownik, nazwa hosta, adres IP i wszystkie bieżące zmienne środowiskowe) na adres e-mail. Łatwo jest dodać inne parametry, które chcesz wysłać, dostosowując
message
zmienną.źródło
Adaptacja mailguna odpowiedzi @Fritz
Po opublikowaniu zauważyłem, że @pacharanero pisze również o mailgunie, ale nie rozumiem, co robią z kopaniem, więc opublikuję również moje rozwiązanie.
Jeśli korzystasz z maszyny wirtualnej, która nie ma SMTP, być może będziesz musiał użyć czegoś takiego jak mailgun, sendgrid lub tym podobne. To działało dla mnie w Google Cloud.
Jednym z zagrożeń związanych z tym podejściem jest to, że osoba atakująca może uzyskać poświadczenia wychodzące wiadomości e-mail, jeśli może
sudo su
i znajdzie skrypt, lub jeśli skrypt zostanie wysłany jako czytelny. Mailgun ma białą listę adresów IP, którą powinieneś skonfigurować, ale to oczywiście nie jest idealne w tym konkretnym przypadku użycia.Ten skrypt powinien działać z pocztą po przejściu
mydomain.com
na rzeczywistą domenę. Możesz zapisać skrypt w/root/login-alert.sh
bardziej niejasnej lokalizacji.Następnie możesz postępować zgodnie z odpowiedzią @Fritz, aby zmienić,
/etc/pam.d/sshd
aby uwzględnić:Zauważam, że działa to bez uprawnień odczytu dla przybywających użytkowników (
chmod 700 /root/login-alert.sh
), więc przybywający użytkownicy nie muszą mieć dostępu do odczytu skryptu.źródło
Skrypt ten
/etc/ssh/sshrc
wysyła wiadomość e-mail i dodaje dziennik do rejestratora systemu. Wprowadzono różnicę (więc możesz ją wyłączyć, jeśli chcesz) między osobistą podsiecią a siecią (wymagasudo apt-get install mailutils
).źródło
Używam programu swatchdog z pakietu swatch do monitorowania wszelkich wierszy zawierających wyrażenie „ fail ” (bez rozróżniania wielkości liter) w /var/log/auth.log . Skonfigurowałem go tak, aby działał jako prosta usługa systemowa.
Utwórz plik konfiguracyjny /etc/swatch/swatch-auth-log.conf z rootem właściciela, uprawnieniem 644 -
„/ Nie / i” jest wyrażeniem regularnym, z „ja”, co wskazuje, że nie uwzględnia wielkości liter. (Mój sendmail to skrypt wysyłający wszystko na ustalony adres za pośrednictwem skrzynki pocztowej , więc adres tak naprawdę nie ma znaczenia).
Utwórz plik usługi systemd /etc/systemd/system/swatch-auth-log.service z rootem właściciela, uprawnieniem 644 -
Następnie włącz, uruchom i wyświetl status usługi -
Przykład udanego raportu o stanie -
Usługa zostanie automatycznie uruchomiona podczas rozruchu i będzie monitorowana przez systemd .
Dyskusja
Pierwotnie użyłem rozwiązania pam podobnego do powyższego, ale w /etc/pam.d/common-auth nie sshd . To było złapanie ssh, sudo i loginów. Ale potem po aktualizacji wszystkie moje hasła przestały działać, nawet po zmianie haseł w trybie ratunkowym. W końcu zmieniłem /etc/pam.d/common-auth z powrotem na oryginalny i hasła znów działały. Oto opis na płycie Stack Exchange UNIX i Linux
Uznałem, że bezpieczniej będzie nie dotykać trudnych do zrozumienia ustawień bezpieczeństwa. I tak wszystko jest w plikach dziennika.
źródło
Właśnie zmodyfikowałem odpowiedź @ SirCharlo
Działa to na serwerach 14.04, 16.04 i Centos 6.5.x, które skonfigurowałem, jestem prawie pewien, że musisz upewnić się, że mta jest skonfigurowany, ale kiedy to zrobisz, działa to uroczo. Kolejny krok powiadomienia Twilio
źródło