Jak mogę kontrolować użytkowników i uzyskiwać dostęp do SSH na moim serwerze?

28

Miałem kilka problemów bezpieczeństwa z moim serwerem, kilku użytkowników SSH rozpalało pożary, zwane także problemami.

Chciałbym:

  • Śledź logowania i wylogowania użytkowników
  • Śledź aktywność tych SSH, aby wykryć wszelkie złośliwe działania
  • Zapobiegaj usuwaniu dzienników przez użytkowników

Nie jestem zbytnio administratorem systemu i jestem dość niedoświadczony w tej kwestii, więc wszelkie porady byłyby bardzo mile widziane i bardzo pomocne. :)

RadiantHex
źródło

Odpowiedzi:

27

Ponieważ mówimy o serwerach SSH, dam ci rozwiązania z linii poleceń.

  • Śledź logowania i wylogowania użytkowników. To proste, plik /var/log/auth.logpowinien zawierać te informacje.

  • Śledź aktywność tych użytkowników: jeśli są dość niewinni, możesz sprawdzić plik .bash_historyw swoim katalogu domowym. Zobaczysz listę wykonanych poleceń. Problem polega oczywiście na tym, że mogą usunąć lub edytować ten plik.

  • Zapobiegaj usuwaniu dzienników przez użytkowników: użytkownicy nie powinni mieć możliwości dotykania auth.log. Aby powstrzymać ich od zabawy .bash_history, musisz wykonać kilka sztuczek .

  • Co się stanie, jeśli użytkownikowi uda się uzyskać dostęp do konta root? : Masz przerąbane. Jeśli nie popełnią błędu, będą w stanie ukryć wszystkie swoje kroki.

Javier Rivera
źródło
Zauważ, że nie ma sposobu, aby uniemożliwić użytkownikom wpisywanie unset HISTFILEbash, a wtedy ich historia bash nie zostanie zapisana.
Gilles „SO- przestań być zły”
@Gilles, przeczytaj link do sztuczek. Ustawiają HITSFILE jako zmienną tylko do odczytu w .profile.
Javier Rivera,
Myślałem, że możesz rozbroić zmienną tylko do odczytu w nieograniczonym bashu, ale najwyraźniej nie. To trochę poprawia identyfikowalność, ponieważ pojawi się uruchomienie innej powłoki (która nie będzie czytać ~/.bash_historylub ~/.bashrc) $HISTFILE. Ale to samo w sobie może być całkowicie uzasadnione (np. Użytkownik chce po prostu uruchomić zshlub chce ustawić własną opcję na przemian bashrc).
Gilles „SO- przestań być zły”
1
Tak. Możesz ograniczyć go do uderzenia lub innej powłoki. W końcu bezpieczeństwo to tylko wyścig.
Javier Rivera,
Nie jest prawdą, że „jeśli użytkownik zdoła uzyskać dostęp do konta root”, będzie w stanie ukryć wszystkie kroki. Zawsze możesz użyć zewnętrznego serwera do audytu, gdzie wszystkie kroki zostałyby zarejestrowane, w tym ich rootowanie.
Petr
6

[OŚWIADCZENIE] Zdaję sobie sprawę, że jestem spóźniony na imprezę, ale chciałbym wkleić odpowiedź, której udzieliłem na inne pytanie , ponieważ wydaje mi się, że może to dać dobry wgląd czytelnikom, a to pytanie wydaje się być przewodnikiem miejsce na podstawowe informacje ssh.

Był podobny problem, który uderzył mnie po przeczytaniu tego pytania tutaj na AskUbuntu i sprawdzeniu mojego VPS, tylko po to, aby zobaczyć bazillion prób brutalnej siły. Wtedy postanowiłem podjąć działania.

Teraz, zgodnie z pytaniem, z którym się powiązałem, jeśli chcesz zobaczyć nieudane próby zalogowania się na twoim komputerze przez ssh (mogą to być próby użycia siły lub cokolwiek innego), spróbuj wpisać:

grep sshd.\*Failed /var/log/auth.log | less

Jeśli dane wyjściowe składają się z wielu wierszy, czyli wielu prób użycia siły, zwłaszcza jeśli miały one miejsce w krótkich odstępach czasu, możesz wykonać następujące czynności:

Zmień plik konfiguracyjny ssh

Aby to zrobić, otwórz plik znajdujący się w / etc / ssh / sshd_config w swoim ulubionym edytorze, takim jak ten vim /etc/ssh/sshd_config.

1. Spróbuj przenieść ssh z portu 22 : Teraz zlokalizuj wiersz o treści:

# What ports, IPs and protocols we listen for
Port 22

i skomentuj Port 22 i skorzystaj z dowolnej osoby, którą chcesz. Przykład:

# What ports, IPs and protocols we listen for
# Port 22
Port 28934

Pamiętaj, że porty poniżej 1024 wymagają specjalnych uprawnień (root). Nie wiem, jak to może w to przeszkadzać, ale mówię tylko.

2. Wyłącz rootowanie logowania przez ssh : Ponieważ nazwa użytkownika root jest przewidywalna i zapewnia pełny dostęp do twojego systemu, zapewnienie nieograniczonego dostępu do tego konta przez SSH jest nierozsądne. Znajdź odczyt linii PermitRootLogin i ustaw go na no .

PermitRootLogin no

3. Wyłącz uwierzytelnianie hasłem : Wygeneruj klucze SSH i użyj ich, aby zalogować się do systemu. Bez włączonego hasła osoby atakujące będą musiały zgadnąć (lub ukraść) klucz prywatny SSH, aby uzyskać dostęp do serwera. Coś, co jest bardzo, bardzo trudne. Przejdź do wiersza z hasłem Uwierzytelnianie hasła i ustaw go na no

PasswordAuthentication no

!OSTRZEŻENIE! Zanim to zrobisz, zapoznaj się z tym przewodnikiem tutaj, jak skonfigurować uwierzytelnianie certyfikatu.

UWAGA: Po wprowadzeniu zmian użyj sudo /etc/init.d/ssh restart. Aby połączyć się z innym portem poprzez ssh: ssh [email protected] -p <port_number>.

Skonfiguruj zaporę ogniową

Zapoznaj się z tym przewodnikiem, w jaki sposób skonfigurować niezwykle wydajną i wydajną zaporę, która jest zintegrowana z systemem Linux, IPTables .

Skonfiguruj skrypty, które pomogą Ci w bezpieczeństwie

Jednym, którego używam osobiście i szybko przychodzi mi na myśl, jest Fail2Ban . Fail2ban będzie monitorować pliki dziennika pod kątem nieudanych prób logowania. Gdy adres IP przekroczy maksymalną liczbę prób uwierzytelnienia, zostanie zablokowany na poziomie sieci i zdarzenie zostanie zalogowane /var/log/fail2ban.log. Aby zainstalować:sudo apt-get install fail2ban

Sprawdź historię poleceń przez ssh

Istnieje polecenie linux o nazwie history, które pozwala zobaczyć, które polecenia zostały wprowadzone do tego momentu. Spróbuj wpisać historyterminal, aby zobaczyć wszystkie polecenia do tego momentu. To może pomóc, jeśli jesteś rootem .

Aby wyszukać określone polecenie, spróbuj:history | grep command-name

Aby wyświetlić listę wszystkich poleceń po ssh :fc -l ssh

Możesz także edytować polecenia za pomocą vi (nie wypróbowałem tego vima, ale zakładam, że również działa):fc -e vi

Możesz także usunąć historię :history -c

UWAGA: Jeśli nie jesteś fanem tego polecenia, historyw twoim katalogu domowym ( cd ~) jest także plik o nazwie .bash_history (jeśli używasz bash), w którym możesz catzobaczyć wszystko, co zostało wpisane w powłoce bash.

NlightNFotis
źródło
bardzo ładna odpowiedź. Powinieneś także spojrzeć na przewodnik wskazany przez @radu w askubuntu.com/a/3906/59250
Cerber
3
  1. Javier już odpowiedział na to: /var/log/auth.log
  2. Znalazłem ciekawy artykuł na ten temat tutaj .
  3. Jeśli użytkownicy nie mają dostępu do katalogu głównego, pliki dziennika powinny być bezpieczne. Możesz spróbować zbudować niestandardowe reguły w pliku sudoers, aby ograniczyć dostęp i sposób uzyskiwania dostępu przez użytkowników. Możesz także zwiększyć poziom dziennika dla demona sshd.
Radu Cotescu
źródło
3

Oprócz samego logowania nie ma bezpiecznego sposobu na śledzenie / rejestrowanie działań użytkowników po zalogowaniu, zakładając, że mają oni podstawową wiedzę na temat Linuksa, będą mogli wyłączyć rejestrowanie powłoki lub po prostu uruchamiać polecenia z innych powłok (np. Python).

Zamiast tego powinieneś zachować ostrożność w zapewnianiu dostępu ssh, czy naprawdę tego potrzebują? Udzielanie dostępu do ssh nie jest zbyt powszechne, chyba że korzystasz z powłoki biznesowej.

João Pinto
źródło