Jak korzystać z serwera ssh z PAM, ale nie zezwalaj na autoryzację hasła?

13

Wiele samouczków mówi, aby skonfigurować serwer ssh w następujący sposób:

ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no 

ale przy tej konfiguracji nie można używać PAM, ponieważ planuję używać uwierzytelniania 2-czynnikowego z Google Authenticator (hasło jednorazowe OTP), potrzebuję PAM.

Jak skonfigurować świeżego debiana jessie ssh deamon, jeśli chcę zapobiec logowaniu przy użyciu normalnego hasła, ale nadal pozwalać na korzystanie z PAM.

może dokładnym pytaniem jest, jak skonfigurować pam, aby nie zezwalać na hasła?

Szczegółowe informacje na temat uwierzytelniania PAM

Wyłączenie uwierzytelniania za pomocą hasła PAM jest raczej nieintuicyjne. Jest potrzebny w prawie wszystkich dystrybucjach GNU / Linux (z godnym uwagi wyjątkiem Slackware), wraz z FreeBSD. Jeśli nie jesteś ostrożny, możesz ustawić opcję PasswordAuthentication na „no” i nadal logować się za pomocą hasła za pomocą uwierzytelniania PAM. Okazuje się, że musisz ustawić „ChallengeResponseAuthentication” na „no”, aby naprawdę wyłączyć uwierzytelnianie PAM. Strony podręcznika FreeBSD mają to do powiedzenia, co może pomóc nieco wyjaśnić sytuację:

Zauważ, że jeśli ChallengeResponseAuthentication ma wartość „tak”, a zasady uwierzytelniania PAM dla sshd obejmują pam_unix (8), uwierzytelnianie za pomocą hasła będzie możliwe poprzez mechanizm wyzwanie-odpowiedź niezależnie od wartości PasswordAuthentication.

http://www.unixlore.net/articles/five-minutes-to-more-secure-ssh.html

c33s
źródło

Odpowiedzi:

23

może dokładnym pytaniem jest, jak skonfigurować pam, aby nie zezwalać na hasła?

Poprawny. Natknąłeś się już na fakt, że ustawienie UsePAM noto ogólnie zła rada. Nie tylko zapobiega jakiejkolwiek formie uwierzytelniania opartego na PAM, ale także wyłącza accounti sessionmoduły. Kontrola dostępu i konfiguracja sesji to dobre rzeczy.

Najpierw stwórzmy listę wymagań:

  • OTP przez pam_google_authenticator.so. Wymaga to UsePAM yesi ChallengeResponseAuthentication yes. W końcu prosisz ich o poświadczenie!
  • Żadna inna forma uwierzytelnienia hasła za pośrednictwem PAM. Oznacza to wyłączenie dowolnego authmodułu, który może pozwolić na przesłanie hasła przez dane keyboard-interactivelogowania. (które musimy pozostawić włączone dla OTP)
  • Uwierzytelnianie na podstawie klucza. Musimy wymagać publickeyuwierzytelnienia, a może gssapi-with-micjeśli masz skonfigurowane Kerberos.

Zwykle uwierzytelnianie za pomocą klucza całkowicie pomija uwierzytelnianie oparte na PAM. Zatrzymałoby to nas w naszych śladach ze starszymi wersjami openssh, ale Debian 8 (jessie) obsługuje AuthenticationMethodsdyrektywę. To pozwala nam wymagać wielu metod uwierzytelniania, ale działa tylko z klientami implementującymi SSHv2.


Konfiguracja sshd

Poniżej znajdują się wiersze, które sugeruję /etc/ssh/sshd_config. Upewnij się, że masz sposób na uzyskanie dostępu do tego systemu sshdna wypadek, gdybyś coś zepsuł!

# Require local root only
PermitRootLogin no

# Needed for OTP logins
ChallengeResponseAuthentication yes
UsePAM yes

# Not needed for OTP logins
PasswordAuthentication no

# Change to to "yes" if you need Kerberos. If you're unsure, this is a very safe "no".
GSSAPIAuthentication no


# Require an OTP be provided with key based logins
AuthenticationMethods publickey,keyboard-interactive

# Use this instead for Kerberos+pubkey, both with OTP
#
#AuthenticationMethods gssapi-with-mic,keyboard-interactive publickey,keyboard-interactive

Nie zapomnij załadować ponownie sshdpo wprowadzeniu tych zmian.

Konfiguracja PAM

Nadal musimy skonfigurować PAM. Zakładając czystą instalację Debiana 8 (na twoje pytanie):

  • Komentarz @include common-authod /etc/pam.d/sshd.
  • Przejrzyj /etc/pam.d/sshdi potwierdź, że nie ma żadnych linii rozpoczynających się od auth. Nie powinno być, jeśli jest to czysta instalacja, ale najlepiej być bezpiecznym.
  • Dodaj authwpis dla pam_google_authenticator.so.

Pamiętaj, że lokalne hasła nadal działają.

Nie wprowadziliśmy żadnych zmian, które wpłynęłyby na loginy za pośrednictwem lokalnej konsoli lub uniemożliwiały użytkownikom korzystanie z haseł w celu zwiększenia ich uprawnień za pośrednictwem sudo.To nie wchodziło w zakres pytania. Jeśli zdecydujesz się pójść dalej, pamiętaj, że root powinien mieć zawsze możliwość lokalnego logowania za pomocą hasła. W przeciwnym razie ryzykujesz zablokowaniem się poza systemem.

Andrew B.
źródło
jeszcze go nie testowałem, ale wygląda logicznie i przy 5 pozytywnych opiniach myślę, że mogę to zaakceptować.
c33s,
Sam się przetestowałem. jeśli chcesz całkowicie wyłączyć hasło, musisz także ustawić ChallengeResponseAuthentication no. zobacz blog.tankywoo.com/linux/2013/09/14/…
anonimowy
@ anonimowy Zobacz pytanie OP i pierwszy punkt. Wyłączenie ChallengeResponseAuthenticationpowoduje uszkodzenie interaktywnej metody uwierzytelniania za pomocą klawiatury, która jest wymagana w przypadku modułów uwierzytelniania PAM obsługujących OTP. (pożądane przez OP) Wyłączenie CRA jest bezpieczne tylko wtedy, gdy naprawdę masz zero modułów PAM na authstosie, które muszą wystrzelić. Jeśli PasswordAuthenticationi GSSAPIAuthenticationsą wyłączone, hasło nie zostanie zaakceptowane, chyba że PAM ma włączony moduł autoryzacji, który o to poprosi.
Andrew B
(powiedziano, że to wciąż świetny link)
Andrew B,
1

aby odrzucić żądanie hasła

skomentuj ten wiersz

#auth       substack     password-auth

w /etc/pam.d/sshd

i pamiętaj, aby nie mieć nullok na końcu tego wiersza, chyba że będzie można uwierzytelnić się przez ssh bez użycia OTP

auth required pam_google_authenticator.so
JOduMonT
źródło