Wymuś uwierzytelnianie klucza publicznego SSH dla określonych użytkowników

10

Czy można zmusić określonych użytkowników do zalogowania się przy użyciu klucza publicznego, a jednocześnie pozwolić innym użytkownikom zalogować się przy użyciu hasła? Ponieważ uwierzytelnianie za pomocą klucza publicznego (z użyciem hasła) jest silniejsze niż uwierzytelnianie tylko za pomocą hasła, chcielibyśmy wymagać od sudoers logowania się za pomocą klucza publicznego. Jednak wygodniej jest zmusić do tego zwykłych użytkowników. W sshd_confignie widzę żadnej konfiguracji związanej z zasadami.

Crend King
źródło

Odpowiedzi:

11

Masz kilka opcji. W tej odpowiedzi założę, że masz sudoerszdefiniowaną grupę.

Spójrz na sshd_configstronę podręcznika i poszukaj Matchdyrektywy. Pozwala to określić bloki konfiguracji, które dotyczą tylko podzbioru połączeń ssh. Możesz zrobić coś takiego:

Match Group sudoers
PasswordAuthentication no
ChallengeResponseAuthentication no

Teoretycznie można osiągnąć coś podobnego z konfiguracją PAM, która po prostu zawiedzie próby uwierzytelnienia przez osoby w sudoersgrupie. Będzie to prawdopodobnie wiązać z pam_succeed_if moduł ... można dodać coś takiego do authconfig dla sshd:

auth        requisite     pam_succeed_if.so user notingroup sudoers quiet

Oznacza to, że tylko osoby spoza sudoersgrupy mogą uwierzytelniać się przez PAM. Pamiętaj, że jest to niesprawdzone. Możesz także użyć modułu pam_listfile , aby zrobić coś podobnego.

Larsks
źródło
1
Dzięki! Muszę też zauważyć, że dyrektywa Match została wprowadzona w OpenSSH 5.0. W przypadku konserwatywnych dystrybucji, takich jak CentOS, może nie być dostępny natywnie.
Crend King
To łamie OpenSSH 7.7p1 - Musiałem usunąć dyrektywę ChallengeResponseAuthentication, aby ją uruchomić ponownie.
rbsec
3

Inna możliwa odpowiedź, ponieważ @larsks, odpowiedź nie zadziałała dla mojej wersji, ssh_dponieważ moja wersja wydaje się korzystać z znalezionej tutaj dokumentacji , która stwierdza:

W wierszach po dopasowanym słowie kluczowym można zastosować tylko podzbiór słów kluczowych. Dostępne są słowa kluczowe. . .

Że lista słów kluczowych nie obejmuje: ChallengeResponseAuthentication.

Naprawdę fajnym sposobem, jaki znalazłem, było użycie, AuthenticationMethodsktóre w twoim przypadku działałoby tak:

Match Group sudoers
AuthenticationMethods 'publickey'

AuthenticationMethods pobiera listę wartości oddzielonych przecinkami, które reprezentują szereg metod, które użytkownik musi przejść przed uzyskaniem dostępu do serwera.

AuthenticationMethods 'publickey,password' zmusi użytkownika do podania klucza publicznego, a następnie hasła.

Czytaj więcej man sshd_config.

Rasowo
źródło