Zezwól rootowi na logowanie przez ssh tylko z uwierzytelnianiem opartym na kluczach

49

Mam wątpliwości co do niektórych konfiguracji serwera ssh /etc/ssh/sshd_config. Chcę następne zachowanie:

  1. Uwierzytelnianie za pomocą klucza publicznego jest jedynym sposobem uwierzytelnienia jako root (bez uwierzytelniania hasłem lub w inny sposób)
  2. Zwykli użytkownicy mogą korzystać zarówno z uwierzytelniania za pomocą hasła, jak i klucza publicznego

Jeśli ustawię, PasswordAuthentication nomój pierwszy punkt jest spełniony, ale nie drugi. Istnieje sposób, aby ustawić PasswordAuthentication notylko dla roota?

mavillan
źródło

Odpowiedzi:

78

Możesz to zrobić za pomocą PermitRootLogindyrektywy. Z strony sshd_configpodręcznika:

Określa, czy root może się zalogować przy użyciu ssh (1). Argumentem musi być „tak”, „bez hasła”, „tylko wymuszone polecenia” lub „nie”. Domyślna wartość to „tak”.

Jeśli ta opcja jest ustawiona na „bez hasła”, uwierzytelnianie za pomocą hasła jest wyłączone dla użytkownika root.

Następujące czynności spełnią Twoje oczekiwania:

PasswordAuthentication yes
PermitRootLogin without-password
Jordan
źródło
1
Próbowałem tego na Debianie i zweryfikowałem service ssh restartna serwerze, a następnie na kliencie próbowałem połączyć się bez mojego klucza ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no root@hosti rzeczywiście nie mogłem zalogować się hasłem, ale mogłem użyć klucza dla użytkownika root.
Bastian
Tak, ale jeśli po prostu to zrobisz, możesz zalogować się za pomocą hasła: ssh -o PreferredAuthentications=password root@hostniezbyt bezpieczne
imho
2
W 2019 r. Jest to „PermitRootLogin zabron-hasło”, stare bez hasła to przestarzały alias.
vbraun
10

Możesz użyć Matchbloków, aby skonfigurować niektóre opcje dla uwierzytelnienia użytkownika lub grupy lub adresu IP lub nazwy hosta źródła połączenia.

PasswordAuthentication yes
PermitRootLogin yes

Match User root
PasswordAuthentication no
Gilles „SO- przestań być zły”
źródło
3
Udało mi się to zablokować przed moim serwerem ssh.
Richard Metzler
Jest to najlepsza metoda, jeśli nigdy nie chcesz, aby monit o hasło pojawiał się dla użytkownika root.
Leo
To mnie również zablokowało. Myślę, że może być w niewłaściwej kolejności ...
Gary
3

Mam jeszcze bardziej restrykcyjne podejście do przyznawania uprawnień roota na moim serwerze, co może być interesujące dla takich paranoicznych jak ja. Uważaj na to, co robisz iw jakiej kolejności, w przeciwnym razie możesz skończyć z systemem, w którym nie można uzyskać dostępu do konta root.

  • Utwórz konkretną grupę sugroup, której członkowie będą mogli zostać rootami i zezwalać na uwierzytelnianie klucza tylko dla tej grupy, umieszczając następujące wiersze na końcu sshd_confid:

Match Group sugroup

PasswordAuthentication no

  • Umieść polecenie auth required pam_wheel.so group=sugroupw /etc/pam.d/su. Być może już tam jest, a ty musisz to anulować. Odmawia to dostępu rootowi wszystkim użytkownikom niebędącym członkami sugroup
  • Wybierz silne hasło roota :)
  • Sprawdź, czy działa nowa metoda uwierzytelniania i tylko jeśli:
  • Odmów bezpośredniego logowania do roota przez ssh przy użyciu PermitRootLogin noin /etc/ssh/sshd_config.

Przy użyciu tej konfiguracji konieczne jest użycie uwierzytelnienia klucza i hasła, aby zostać rootem. Skonfigurowałem mój serwer w ten sposób, ponieważ wolę nie mieć bezpośredniego dostępu do roota przez ssh, niezależnie od metody uwierzytelnienia.

xwst
źródło