Jak (i ​​dlaczego) wyłączyć logowanie root przez SSH w systemie Linux?

Opublikowany: 2022-09-29
Laptop z systemem Linux wyświetlający monit o bash
fatmawati achmad zaenuri/Shutterstock.com

Logowanie się jako użytkownik root Linuksa jest złą praktyką. Logowanie jako root przez połączenie SSH jest jeszcze gorsze. Powiemy Ci dlaczego i pokażemy, jak temu zapobiec.

Miecz obosieczny

Potrzebujesz kogoś z uprawnieniami do posiadania i administrowania tymi częściami systemu operacyjnego, które są zbyt ważne lub zbyt wrażliwe, aby zwykli użytkownicy mogli się nimi zająć. Tu właśnie pojawia się root. root jest wszechmocnym superużytkownikiem systemów operacyjnych Unix i Linux.

Konto użytkownika root, podobnie jak wszystkie konta, jest chronione hasłem. Bez hasła użytkownika root nikt inny nie może uzyskać dostępu do tego konta. Oznacza to, że przywileje i uprawnienia roota nie mogą być używane przez nikogo innego. Z drugiej strony jedyną obroną między złośliwym użytkownikiem a uprawnieniami roota jest to hasło. Hasła można oczywiście odgadnąć, wydedukować, znaleźć gdzieś zapisane lub wymuszać brutalnie.

Jeśli złośliwy atakujący odkryje hasło roota, może się zalogować i zrobić wszystko, co tylko zechce, z całym systemem. Dzięki podwyższonym przywilejom roota nie ma ograniczeń co do tego, co mogą zrobić. Byłoby tak, jakby użytkownik root odszedł z terminala bez wylogowania, umożliwiając oportunistyczny dostęp do swojego konta.

Dlaczego nie powinieneś logować się do systemu Linux jako root
POWIĄZANE Dlaczego nie powinieneś logować się do systemu Linux jako root

Z powodu tych zagrożeń wiele nowoczesnych dystrybucji Linuksa nie pozwala rootowi na lokalne logowanie do komputera, nieważne przez SSH. Użytkownik root istnieje, ale nie ma ustawionego hasła. A przecież ktoś musi umieć administrować systemem. Rozwiązaniem tej zagadki jest polecenie sudo .

sudo umożliwia wyznaczonym użytkownikom tymczasowe korzystanie z uprawnień na poziomie roota z poziomu ich własnego konta użytkownika. Aby korzystać z sudo , musisz się uwierzytelnić, co robisz, wprowadzając własne hasło. Daje to tymczasowy dostęp do możliwości roota.

Twoje uprawnienia roota umierają, gdy zamkniesz okno terminala, w którym były używane. Jeśli zostawisz okno terminala otwarte, ulegną one przekroczeniu limitu czasu, automatycznie przywracając status zwykłego użytkownika. Zapewnia to inny rodzaj ochrony. Chroni cię przed samym sobą.

Jeśli zwykle logujesz się jako root zamiast na zwykłe konto, wszelkie błędy, które popełnisz w wierszu poleceń, mogą być katastrofalne. Konieczność używania sudo do wykonywania czynności administracyjnych oznacza większe prawdopodobieństwo koncentracji i ostrożności podczas pisania.

Zezwolenie na logowanie root przez SSH zwiększa ryzyko, ponieważ atakujący nie muszą być lokalni; mogą próbować zdalnie wymusić system.

POWIĄZANE: Jak sprawdzić użycie poleceń sudo w systemie Linux

Użytkownik root i dostęp SSH

Bardziej prawdopodobne jest, że natkniesz się na ten problem, gdy zarządzasz systemami innych osób. Ktoś mógł zdecydować o ustawieniu hasła roota, aby mógł się zalogować. Inne ustawienia muszą zostać zmienione, aby umożliwić rootowi logowanie przez SSH.

To nie stanie się przypadkiem. Ale mogą to zrobić ludzie, którzy nie rozumieją związanego z tym ryzyka. Jeśli przejmiesz administrację komputera w tym stanie, będziesz musiał poinformować właścicieli, dlaczego to zły pomysł, a następnie przywrócić system do bezpiecznej pracy. Jeśli było to coś skonfigurowanego przez poprzedniego administratora systemu, właściciele mogą o tym nie wiedzieć.

Oto użytkownik na komputerze z Fedorą, który nawiązuje połączenie SSH z komputerem Ubuntu jako użytkownik root komputera Ubuntu.

 ssh [email protected] 

Użytkownik root łączący się ze zdalnym komputerem za pomocą SSH

Komputer Ubuntu umożliwia użytkownikowi root zalogowanie się przez SSH. Na komputerze Ubuntu widzimy, że trwa połączenie na żywo od użytkownika root.

 kto 

Używanie polecenia who do wyświetlania zalogowanych użytkowników

Nie możemy zobaczyć, kto korzysta z tej sesji. Nie wiemy, czy osoba po drugiej stronie połączenia SSH jest użytkownikiem root, czy kimś, komu udało się uzyskać hasło roota.

Wyłączanie dostępu SSH dla roota

Aby wyłączyć dostęp SSH dla użytkownika root, musimy wprowadzić zmiany w pliku konfiguracyjnym SSH. Znajduje się w „/etc/ssh/sshd_config”. Będziemy musieli użyć sudo , aby napisać w nim zmiany.

 sudo gedit /etc/ssh/sshd_config 

Edycja pliku sshd-config

Przewiń plik lub wyszukaj ciąg „PermitRootLogin”.

Ustaw to na „nie” lub skomentuj wiersz, umieszczając hash „ # ” jako pierwszy znak w wierszu. Zapisz zmiany.

Musimy zrestartować demona SSH, aby nasze zmiany zaczęły obowiązywać.

 sudo systemctl restart ssh 

Ponowne uruchamianie demona sshd

Jeśli chcesz również uniemożliwić lokalne logowanie, wyłącz hasło roota. Przyjmujemy podejście pasa i nawiasów klamrowych i używamy obu opcji -l (blokada) i -d (usuń hasło).

 sudo passwd root -ld 

Blokowanie konta root i usuwanie hasła root

Spowoduje to zablokowanie konta i usunięcie hasła do konta. Nawet jeśli użytkownik root fizycznie siedzi przy Twoim komputerze, nie będzie mógł się zalogować.

Bezpieczniejszy sposób na umożliwienie dostępu do roota przez SSH

Czasami napotkasz opór kierownictwa przed usunięciem dostępu roota przez SSH. Jeśli naprawdę nie będą słuchać, możesz znaleźć się w sytuacji, w której będziesz musiał ją przywrócić. Jeśli tak jest, powinieneś być w stanie wejść na kompromis w sposób, który zmniejsza ryzyko i nadal zezwala na zdalne logowanie z użytkownika root.

Jak tworzyć i instalować klucze SSH z powłoki systemu Linux?
POWIĄZANE Jak tworzyć i instalować klucze SSH z powłoki systemu Linux

Używanie kluczy SSH do nawiązywania połączenia przez SSH jest znacznie bezpieczniejsze niż używanie haseł. Ponieważ żadne hasła nie są zaangażowane, nie można ich wymusić brutalnie, odgadnąć ani w inny sposób wykryć.

Przed zablokowaniem lokalnego konta root skonfiguruj klucze SSH na komputerze zdalnym, aby użytkownik root mógł połączyć się z komputerem lokalnym. Następnie usuń swoje hasło i zablokuj ich konto lokalne.

Będziemy też musieli jeszcze raz edytować plik „sshd_config”.

 sudo gedit /etc/ssh/sshd_config 

Edycja pliku sshd-config

Zmień wiersz „PermitRootLogin”, aby używał opcji „zabroń-hasło”.

Zapisz zmiany i uruchom ponownie demona SSH.

 sudo systemctl restart ssh 

Ponowne uruchamianie demona sshd

Teraz, nawet jeśli ktoś przywróci hasło użytkownika root, nie będzie mógł zalogować się przez SSH przy użyciu hasła.

Kiedy zdalny użytkownik root nawiązuje połączenie SSH z komputerem lokalnym, klucze są wymieniane i sprawdzane. Jeśli przejdą uwierzytelnianie, użytkownik root jest połączony z komputerem lokalnym bez konieczności podawania hasła.

 ssh [email protected] 

Użytkownik root łączący się ze zdalnym komputerem za pomocą SSH bez hasła

Brak wejścia

Najlepszym rozwiązaniem jest odmowa połączeń zdalnych od użytkownika root. Zezwolenie rootowi na łączenie się za pomocą kluczy SSH jest drugim najlepszym rozwiązaniem, ale wciąż o wiele lepsze niż używanie haseł.

POWIĄZANE: Jak kontrolować dostęp sudo w systemie Linux