Password scaduta e accesso basato su chiave SSH con UsePAM sì


12

C'è una macchina SLES 11. Gli utenti accedono tramite SSH e pubkey (misto, alcuni utenti usano la password, altri usano la chiave ssh)

Sshd_config ha:

UsePAM yes
PasswordAuthentication yes
PubkeyAuthentication yes

Il problema: se la password scade per un utente che utilizza l'accesso pubkey, verrà richiesto all'utente di modificare la password.

La domanda: come possiamo impostare PAM o sshd config per consentire agli utenti di accedere se hanno una chiave SSH valida e sono scadute la password? - Senza spuntare "cambia password".

AGGIORNAMENTO N. 1: la soluzione non può essere: "UsePAM no"

SERVER:~ # cat /etc/pam.d/sshd 
#%PAM-1.0
auth        requisite   pam_nologin.so
auth        include     common-auth
account     requisite   pam_nologin.so
account     include     common-account
password    include     common-password
session     required    pam_loginuid.so
session     include     common-session
SERVER:~ # 

AGGIORNAMENTO # 2: La soluzione non può essere: impostare la password dell'utente in modo che non scada mai

UPDATE # 3:

SERVER:/etc/pam.d # cat common-account
#%PAM-1.0
...
account required    pam_unix2.so    
account required    pam_tally.so
SERVER:/etc/pam.d # 

Potresti riuscire a farlo rimuovendolo pam_unix.sodalla sessionsezione di /etc/pam.d/sshd(e sostituendolo con pam_lastlog.sose non c'è. Non sono sicuro che pam_unix.so/sessionsia quello che lo sta facendo o no, ma sembra il posto giusto.
Patrick,

1
imposta l'account utente affinché non scada mai :)
Raza

@Raza: Grazie :) ottima idea, ma non può essere una soluzione :(
thequestionthequestion

prova ForcedPasswdChange Noquesto è per SSH1
Raza

1
Mi sono reso conto che ForcedPasswdChange Nonon funzionerà dopo la scadenza. stai cercando una soluzione che permetta all'utente scaduto di accedere
Raza

Risposte:


10

L'ordine delle operazioni che causa la richiesta della password scaduta è il seguente:

  • SSH esegue la accountfase PAM , che verifica che l'account esista e sia valido. Lo accountstage rileva che la password è scaduta e informa SSH.
  • SSH esegue l'autenticazione basata su chiave. Non ha bisogno di PAM per questo, quindi non gestisce il authpalco. Quindi imposta la sessione di accesso SSH ed esegue lo sessionstage PAM .
  • Successivamente, SSH ricorda che PAM ha comunicato che la password era scaduta, stampa un messaggio di avviso e chiede a PAM di far cambiare la password all'utente. SSH quindi si disconnette.

Tutto ciò sta facendo SSH e non vedo alcuna opzione SSH per configurare questo comportamento. Quindi, a meno che non si desideri creare una versione personalizzata di SSH e / o PAM, l'unica opzione che vedo è quella di impedire a PAM di segnalare la password scaduta a SSH. Se lo fai, disabiliterà completamente i controlli delle password scadute su SSH , anche se l'utente accede tramite SSH con una password. Altri metodi di accesso (non SSH) verificheranno comunque la scadenza della password.

Il tuo pam.d/sshdfile corrente ha una account include common-accountvoce. Presumo che ci sia un common-accountfile che contiene un riferimento a pam_unix.so. Questa è la linea che controlla la password scaduta.

Probabilmente non vuoi toccare il common-accountfile stesso, poiché è usato per altri metodi di accesso. Invece, vuoi rimuovere il includedal tuo pam.d/sshdfile. Se ci sono altre funzioni in common-accountoltre pam_unix.so, probabilmente avrete bisogno di metterli direttamente in pam.d/sshd.

Infine, ricorda che questa è una modifica alla sicurezza del tuo sistema e non dovresti semplicemente fidarti ciecamente di darti un buon consiglio. Leggi come funziona PAM se non hai familiarità con esso. Alcuni luoghi di partenza potrebbero essere man 7 PAM, man 5 pam.confe man 8 pam_unix.


Bella spiegazione dell'ordine delle operazioni, grazie.
M_dk,

3

È stata aggiunta un'opzione a pam_unix.so (intorno al febbraio 2016) chiamata no_pass_expiry ( modifica del codice sorgente qui o pagina man qui ). Fondamentalmente dice a pam_unix di ignorare una password scaduta se qualcosa di diverso da pam_unix è stato usato per auth, ad esempio se sshd ha eseguito l'autent.

Di conseguenza, se si dispone di una versione di pam_unix.so che contiene tale opzione, si dovrebbe essere in grado di configurare PAM per:

  1. Avvisa ancora ma non è necessario modificare una password scaduta se è stata utilizzata una chiave SSH per l'autenticazione tramite ssh
  2. Richiede una modifica della password di una password scaduta se un login / password tramite pam_unix.so è stato utilizzato per l'autenticazione tramite ssh
  3. Non influisce su alcuna altra sequenza di autenticazione (ad es. Tramite il servizio di accesso).

Ad esempio, ho configurato un server RHEL 7 per fare quanto sopra semplicemente aggiornando /etc/pam.d/sshd e aggiungendo pam_unix.so no_pass_expiry a entrambi i tipi di account e password, ad es.

account    required    pam_nologin.so
account    sufficient  pam_unix.so no_pass_expiry
account    include     password-auth
password   sufficient  pam_unix.so no_pass_expiry
password   include     password-auth

1
Ho appena provato questo e funziona. Puoi verificare se il tuo PAM supporta questa opzione o meno cercando "no_pass_expiry" presente o meno all'interno della pagina man "man 8 pam_unix".
Tomofumi,

La modifica del codice dal 2016 non è ancora presente in Ubuntu 18.04 ... :(
ColinM,

0
  • Potrebbe non essere necessario modificare PAM o sshd_config per motivi di conformità.
  • È possibile che si stia utilizzando PasswordAuthentication no in sshd_config
  • Potresti avere password casuali.
  • Potresti anche aver implementato la conformità CIS.
  • I tuoi utenti ricevono comunque la richiesta

Quindi root può modificare la data di modifica della password:

for user in `grep ":x:[0-9]\{4\}" /etc/passwd|cut -d: -f1`; do chage -d today $user; done
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.