Puncte:4

Autentificarea cu cheie publică SSH cu Google Authenticator solicită încă parola

drapel de

Încerc să activez 2FA cu ssh folosind libpam-google-authenticator. Nu toți utilizatorii au nevoie de autentificare activat. Toată lumea folosește chei publice ssh și nimeni nu are o parolă. Rulez Debian buster și am încercat și libpam-google-authenticator de la bullseye.

Problema mea este că indiferent ce am pus în configurația PAM, utilizatorii fără autentificatorul activat nu sunt niciodată autentificați direct, ci întotdeauna li se solicită o parolă.

Am instalat libpam-google-authenticator și am configurat /etc/ssh/sshd_config cu:

PasswordAuthentication nr
ChallengeResponseAuthentication da
AuthenticationMethods cheie publică, tastatură interactivă
PasswordAuthentication nr
PermitEmptyPasswords nr

Nu am reușit să elaborez configurația corectă PAM, astfel încât utilizatorii fără un fișier .google_authenticator să fie în continuare conectați. În funcție de ceea ce folosesc, utilizatorilor fie li se solicită o parolă (nu au una), fie nu permis să intre deloc.

În /etc/pam.d/sshd am încercat (așa Încercarea de a obține SSH cu cheie publică (fără parolă) + Google Authenticator care funcționează pe Ubuntu 14.04.1):

#@include common-auth
auth required pam_google_authenticator.so depanați nullok

În acest caz, utilizatorii fără o configurare de autentificare sunt respinși cu următoarea depanare;

05 august 15:11:18 <gazdă> sshd(pam_google_authenticator)[746624]: depanare: începerea google_authenticator pentru „<utilizator>”
05 august 15:11:18 <gazdă> sshd(pam_google_authenticator)[746624]: depanare: sfârșitul google_authenticator pentru „<utilizator>” Rezultat: valoarea returnată trebuie ignorată de expedierea PAM
05 august 15:11:18 <gazdă> sshd[746620]: eroare: PAM: Permisiune refuzată pentru <utilizator> de la <IP>

Este pam_permit este necesar pentru a configura cazul de rezervă?

Am incercat si diverse combinatii de autentificarea necesară și auth suficient inainte si dupa @include common-auth dar toate au ca rezultat solicitarea unei parole utilizatorilor fără autentificator și, uneori, utilizatorilor CU autentificator li se cere și o parolă.

Are cineva o rețetă pentru a face acest lucru?

drapel in
Ok, cred că în sfârșit înțeleg mai bine problema ta. Am citit ceva și acum am o întrebare. Toți utilizatorii care au nevoie de pubkey+totp se află într-un anumit grup sau ar putea fi într-un grup? Sau poate invers.Toți utilizatorii care sunt pubkey sunt doar într-un grup? Puteți seta diferite directive `AuthenticationMethod` într-o secțiune `match` din sshd_config.
Hamish Moffatt avatar
drapel de
Aș putea face asta să funcționeze. Pentru a complica lucrurile, totuși, odată ce funcționez, vreau să încerc să fac cerința TOTP să depindă de unde mă conectez folosind `pam_access` - dacă mă conectez de la un IP VPN, vreau să ocol TOTP. Deși se pare că aș putea verifica IP-ul folosind `match` mai degrabă decât `pam_access`, așa că poate că ar funcționa până la urmă.
Puncte:2
drapel de

Iată configurația mea de lucru. Unii utilizatori au autentificatorul activat, alții nu și sunt permise numai autentificarea SSH cu chei publice, niciodată parole.

În /etc/ssh/sshd_config,

Folosește PAM da
PasswordAuthentication nr
ChallengeResponseAuthentication da
AuthenticationMethods cheie publică, tastatură interactivă
PermitEmptyPasswords nr

În /etc/pam.d/sshd,

# Autentificare standard Un*x.
#@include common-auth

# Necesită autentificator, dacă nu este configurat, atunci permiteți
auth required pam_google_authenticator.so depanați nullok
auth required pam_permit.so

@include comon-auth trebuie să fie dezactivat deoarece include pam_unix, pe care nu vreau să-l folosesc. Atunci ai nevoie pam_permit pentru a face autentificarea de succes pentru utilizatorii fără autentificator (pentru care pam_google_authenticator returnează ignoră mai degrabă decât trece).

Acest lucru încă nu permite utilizatorului să se autentifice cu o cheie ssh; jurnalele sshd

sshd[1244501]: fatal: eroare internă: autentificarea PAM a reușit când ar fi trebuit să eșueze

Acest lucru se discută la Google Authenticator PAM pe SSH blochează autentificarea root fără 2FA .

După ce acest lucru funcționează ca mai sus, cred că este de fapt mai frumos să impuneți 2FA pentru anumite grupuri care folosesc configurația SSH așa cum a sugerat @zoredache. Acest lucru vă permite cu ușurință să puneți pe lista albă anumite IP-uri, deoarece nu necesită și 2FA. În acest caz, sshd_config spune, de exemplu

Folosește PAM da
PasswordAuthentication nr
ChallengeResponseAuthentication da
#AuthenticationMethods orice # implicit
PermitEmptyPasswords nr

Match Group Adm Adresa *,!172.16.1.0/24
    AuthenticationMethods cheie publică, tastatură interactivă

și /etc/pam.d/ssh spune

 Autentificare standard Un*x.
#@include common-auth

# Necesită autentificator; SSH nu ar trebui să permită niciun utilizator care nu îl are
auth suficient pam_google_authenticator.so depanați nullok
auth requisite pam_deny.so
NeverEndingQueue avatar
drapel cn
Mulțumesc, niciun ghid pe care l-am găsit nu a menționat despre: setarea `pam_permit` pentru a face 2FA opțional pentru utilizatori.
Puncte:0
drapel in

Nu cred că aveți nevoie sau doriți să comentați @include common-auth. Sau cel puțin nu am făcut-o și părea să funcționeze corect. Dar încă mai mult am testat asta.

Are cineva o rețetă pentru a face acest lucru?

Nu am timp să-l traduc într-un script shell pentru tine, dar acesta este un fragment dintr-un manual de joc ansible care pare să funcționeze pentru mine.Bănuiesc că ar trebui să poți urmări ceea ce face asta chiar dacă nu folosești ansible.

- gazde: linux_systems
  sarcini:

  - nume: Adăugați grupul „totp”
    grup:
      nume: totp
      stare: prezent
      sistem: da

  - nume: Creați director pentru totp secrete
    fişier:
      stare: director
      cale: /var/lib/google-authenticator
      proprietar: "0"
      grup: "0"
      modul: "0700"

  - nume: instalează libpam-google-authenticator
    apt:
      update_cache: da
      cache_valid_time: „{{ apt_cache_valid_time | implicit(7200) }}'
      stare: prezent
      Nume:
      - libpam-google-authenticator

  - nume: creați secret pentru „utilizator-exemplu”
    argumente:
      creează: /var/lib/google-authenticator/example-user
    coajă: |
      TOTP_USER=exemplu-utilizator; \
      google-authenticator \
        --force --liniștit \
        --emergency-codes=10 \
        --bazat pe timp \
        --qr-mode=niciunul \
        --allow-reuse \
        --window-size=3 \
        --rate-limit=4 --rate-time=30 \
        --secret=/var/lib/google-authenticator/${TOTP_USER}

  - nume: update pam
    lineinfile:
      insertafter: „^@include common-password”
      cale: /etc/pam.d/login
      rând: „auth required pam_google_authenticator.so nullok user=root secret=/var/lib/google-authenticator/${USER}”

  - nume: update pam
    lineinfile:
      insertafter: „^@include common-password”
      calea: /etc/pam.d/sshd
      rând: „auth required pam_google_authenticator.so nullok user=root secret=/var/lib/google-authenticator/${USER}”

  - nume: update sshd ChallengeResponseAuthentication
    notifică: Reporniți sshd
    lineinfile:
      calea: /etc/ssh/sshd_config
      regexp: '^ChallengeResponseAuthentication .*'
      rând: „ChallengeResponseAuthentication da”

  manipulatori:

  - nume: Reporniți sshd
    serviciu:
      nume: sshd
      stare: repornit
Hamish Moffatt avatar
drapel de
Mulțumiri. Asta arată ca ceea ce am, cu excepția faptului că ați adăugat modulul mai târziu în fișier - efectiv la sfârșit. Aveți și AuthenticationMethods din sshd_config schimbate pentru a adăuga keyboard-interactive? Nu primesc niciodată solicitări pentru codul de verificare fără el. Dar cu el și cu modulul de autentificare la sfârșit, mi se cere o parolă. Autentificarea dvs. comună este nemodificată?
drapel in
Din câte îmi amintesc, acele modificări sunt tot ce aveam nevoie de la o instalare Debian Buster complet stocă.
Hamish Moffatt avatar
drapel de
Nu primesc nicio încercare de verificare TOTP fără a modifica AuthenticationMethods în sshd_config. Altă documentație pe care am văzut-o, de exemplu https://blog.geoghegan.me/linux/setting-up-google-auth-2fa-on-debian, include și acest pas.
drapel in
Ai dreptate că documentele spun asta pentru ssh. Cele mai multe dintre testele mele pentru acest lucru au fost testarea autentificărilor locale. Acum nu sunt sigur dacă am testat vreodată SSH. SSH-ul meu este practic bazat doar pe chei și nu am fost îngrijorat de ssh pentru contul meu de testare, deoarece nu a primit nicio cheie.
Hamish Moffatt avatar
drapel de
OK multumesc pentru raspunsuri.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.