Leggete quella frase come un'affermazione su un oggetto condiviso e un puntatore a funzione, non su una password. Le stesse parole possono venire da un OpenVPN plugin, da uno stack PAM caricato per un solo servizio o dall'interno del demone RADIUS, e sono tre indagini diverse. Scegliete prima il processo.

Le verifiche seguenti presuppongono che il messaggio sia emerso tramite un'integrazione Linux-PAM in un accesso VPN. Se è arrivato dalla configurazione del server RADIUS stesso, bisogna partire dalle prove di quel demone.

Nominate il processo prima di nominare il pacchetto

Tre componenti sono chiamati modulo e nessuno è intercambiabile. Un plugin di autenticazione OpenVPN viene caricato dal demone VPN e implementa l'interfaccia di callback di quel demone. Un modulo PAM è un oggetto condiviso che libpam carica per un servizio con nome, e che implementa punti di ingresso come pam_sm_authenticate. Un modulo FreeRADIUS è una parte della configurazione di quel demone. Un messaggio con le stesse parole può venire da uno qualsiasi dei tre, quindi la prima domanda è quale riga di log lo ha prodotto.

Correlate la marca temporale di un tentativo fallito tra il log VPN e il log di autenticazione di sistema, poi leggete le righe precedenti al riepilogo. Il messaggio specifico del caricatore di solito è già lì.

Leggete l'errore di caricamento, poi il punto di ingresso

PAM segnala un modulo sconosciuto quando non riesce a caricare l'oggetto condiviso selezionato, o quando l'oggetto caricato non fornisce la funzione che quella voce dello stack richiede. Sono riparazioni diverse: la prima è un problema di percorso, impacchettamento o ABI, la seconda è un punto di ingresso che non corrisponde. Una riga auth ha bisogno di pam_sm_authenticate mentre una riga account ha bisogno di pam_sm_acct_mgmt, e una libreria che ne implementa solo una fallirà sull'altra, come illustra il codice del dispatcher. Trovare il file sul disco non dimostra nessuna delle due cose.

Prendere una libreria con un nome simile da un'altra distribuzione o architettura della CPU non è una riparazione, e può lasciare un processo a caricare un modulo mai testato contro la sua libpam. Controllate il pacchetto che possiede il percorso previsto e l'architettura reale del file prima di cambiare qualsiasi cosa.

Mantenete le garanzie che lo stack offriva

Il modo più rapido per zittire questo errore è anche il peggiore: segnare come opzionale un modulo obbligatorio, eliminare la fase account, o inserire un permesso incondizionato. Ognuno di questi trasforma un controllo fallito in un controllo assente, e l'accesso riesce allora per motivi che nessuno aveva previsto. Anche le reimpostazioni delle password e i cambi di segreto condiviso non forniscono la funzione mancante, perché il guasto avviene prima che una credenziale raggiunga un backend.

Uno stack con più moduli può aver eseguito un altro backend prima della voce fallita, quindi l'errore non dimostra che non sia stata inviata alcuna richiesta RADIUS.

Verificate l'accesso, non il modulo

Una volta corretta la discrepanza, provate il percorso di ammissione reale. Un account valido deve passare, le credenziali non valide devono continuare a fallire e un account vietato deve continuare a essere rifiutato. Confermate anche che qualsiasi requisito di certificato o fattore aggiuntivo sia ancora applicato, perché uno stack riparato che salta una fase sembra un successo dal lato del client.

Che un modulo si carichi in modo pulito è un progresso, non un test concluso.

Annotate quale nome di servizio, quali file di politica e quali punti di ingresso erano coinvolti, insieme all'unico tentativo usato come prova. È quel verbale che rende l'occorrenza successiva una ricerca e non un esercizio di archeologia.

Articoli correlati