Moduli di autenticazione PAM¶
Prerequisiti e Presupposti¶
- Un PC Rocky Linux, server o VM non critico
- Accesso root
- Alcune conoscenze esistenti su Linux (aiuterebbero molto)
- Un desiderio di imparare sull'autenticazione utente e app su Linux
- La capacità di accettare le conseguenze delle proprie azioni
Introduzione¶
PAM (Pluggable Authentication Modules) è il sistema sotto GNU/Linux che consente a molte applicazioni o servizi di autenticare gli utenti in modo centralizzato. Per dirla in altro modo:
PAM è una suite di librerie che consente all'amministratore di sistema Linux di configurare i metodi di autenticazione degli utenti. Fornisce un modo flessibile e centralizzato per cambiare i metodi di autenticazione per le applicazioni protette, utilizzando file di configurazione invece di modificare il codice dell'applicazione. - Wikipedia
Questo documento non è stato concepito per spiegare esattamente come proteggere la vostra macchina. È più che altro una guida di riferimento per mostrare ciò che PAM può fare, e non ciò che dovrebbe fare.
Generalità¶
L'autenticazione è la fase in cui si verifica che l'utente sia la persona che dichiara di essere. L'esempio più comune è la password, ma esistono altre forme di autenticazione.
L'implementazione di un nuovo metodo di autenticazione non dovrebbe richiedere modifiche al codice sorgente per la configurazione del programma o del servizio. Per questo motivo le applicazioni si affidano a PAM, che fornisce loro le primitive* necessarie per autenticare gli utenti.
Tutte le applicazioni di un sistema possono quindi implementare funzionalità complesse come SSO (Single Sign On), OTP (One Time Password) o Kerberos in modo completamente trasparente. L'amministratore di sistema può scegliere esattamente il criterio di autenticazione da utilizzare per una singola applicazione (ad esempio per rendere più sicuro il servizio SSH) indipendentemente dall'applicazione stessa.
Ogni applicazione o servizio che supporta PAM avrà un file di configurazione corrispondente nella directory /etc/pam.d/
. Ad esempio, il processo login
assegna il nome /etc/pam.d/login
al suo file di configurazione.
* Le primitive sono letteralmente gli elementi più semplici di un programma o di un linguaggio, che permettono di costruirci sopra cose più sofisticate e complesse.
Attenzione
Un'istanza di PAM mal configurata può compromettere la sicurezza dell'intero sistema. Se PAM è vulnerabile, allora l'intero sistema è vulnerabile. Apportare le modifiche con cautela.
Direttive¶
Una direttiva viene utilizzata per impostare un'applicazione da utilizzare con PAM. Le direttive seguiranno questo formato:
mechanism [control] path-to-module [argument]
Una direttiva (una riga completa) è composta da un mechanism(auth
, account
, password
o session
), un success check(include
, optional
, required
, ...), il percorso del modulo ed eventualmente degli arguments (come ad esempio revoke
).
Ogni file di configurazione PAM contiene una serie di direttive. Le direttive di interfaccia del modulo possono essere impilate o sovrapposte. Infatti, l'ordine in cui sono elencati i moduli è molto importante per il processo di autenticazione.
Ad esempio, ecco il file di configurazione /etc/pam.d/sudo
:
#%PAM-1.0
auth include system-auth
account include system-auth
password include system-auth
session include system-auth
Mechanisms¶
auth
- Autenticazione¶
Questo gestisce l'autenticazione del richiedente e stabilisce i diritti dell'account:
-
Di solito si autentica con una password confrontandola con un valore memorizzato in un database o affidandosi a un server di autenticazione,
-
Stabilisce le impostazioni dell'account: uid, gid, gruppi e limiti delle risorse.
account
- Gestione account¶
Verifica che l'account richiesto sia disponibile:
- Si riferisce alla disponibilità dell'account per motivi diversi dall'autenticazione (ad esempio, per restrizioni temporali).
session
- Gestione sessione¶
Riguarda l'impostazione e la chiusura della sessione:
- Esegue le attività associate all'impostazione della sessione (ad esempio, la registrazione),
- Esegue le attività associate alla chiusura della sessione.
password
- Gestione delle password¶
Utilizzato per modificare il token di autenticazione associato a un account (scadenza o modifica):
- Modifica il token di autenticazione ed eventualmente verifica che sia sufficientemente robusto o che non sia già stato utilizzato.
Indicatori di Controllo¶
I meccanismi PAM (auth
, account
, session
e password
) indicano il successo
o il fallimento
. Le flag di controllo (required
, requisite
, sufficient
, optional
) indicano a PAM come gestire questo risultato.
required
¶
È necessario completare con successo tutti i moduli required
.
-
Se il modulo passa: Il resto della catena viene eseguito. La richiesta è consentita a meno che altri moduli non falliscano.
-
Se il modulo fallisce: Il resto della catena viene eseguito. Alla fine la richiesta viene respinta.
Il modulo deve essere verificato con successo affinché l'autenticazione possa continuare. Se la verifica di un modulo contrassegnato come required
fallisce, l'utente non viene avvisato finché non sono stati verificati tutti i moduli associati a quell'interfaccia.
requisite
¶
È necessario completare con successo tutti i moduli
richiesti.
-
Se il modulo passa: Il resto della catena viene eseguito. La richiesta è consentita a meno che altri moduli non falliscano.
-
Se il modulo fallisce: La richiesta viene immediatamente respinta.
Il modulo deve essere verificato con successo perché l'autenticazione possa continuare. Tuttavia, se la verifica di un requisite
-marked fallisce, l'utente è immediatamente informato da un messaggio che indica il fallimento del primo modulo required
o requisite
.
sufficient
¶
Moduli marcati sufficient
può essere utilizzato per far entrare un utente "in anticipo" in determinate condizioni:
-
Se il modulo ha successo: La richiesta di autenticazione è immediatamente consentita se nessuno dei moduli precedenti ha fallito.
-
Se il modulo fallisce: Il modulo viene ignorato. Il resto della catena viene eseguito.
Tuttavia, se un controllo del modulo contrassegnato sufficient
è riuscito, ma i moduli marcati required
o requisite
non hanno superato i loro controlli, il successo del modulo sufficient
viene ignorato e la richiesta fallisce.
optional
¶
Il modulo viene eseguito ma il risultato della richiesta viene ignorato. Se tutti i moduli della catena fossero contrassegnati optional
, tutte le richieste sarebbero sempre accettate.
Conclusione¶
Moduli PAM¶
Ci sono molti moduli per PAM. Ecco i più comuni:
- pam_unix
- pam_ldap
- pam_wheel
- pam_cracklib
- pam_console
- pam_tally
- pam_securetty
- pam_nologina
- pam_limits
- pam_time
- pam_access
pam_unix
¶
Il modulo pam_unix
consente di gestire la politica globale di autenticazione.
In /etc/pam.d/system-auth
puoi aggiungere:
password sufficient pam_unix.so sha512 nullok
Sono possibili argomenti per questo modulo:
nullok
: nel meccanismoauth
consente una password di accesso vuota.sha512
: nel meccanismo della password, definisce l'algoritmo di crittografia.debug
: invia informazioni asyslog
.remember=n
: Utilizzare questa opzione per ricordare le ultimen
password utilizzate (funziona in combinazione con l'opzione/etc/security/opasswd
, che deve essere creato dall'amministratore).
pam_cracklib
¶
Il modulo pam_cracklib
consente di testare le password.
In /etc/pam.d/password-auth
aggiungere:
password sufficient pam_cracklib.so retry=2
Questo modulo utilizza la libreria cracklib
per controllare la forza di una nuova password. Può anche controllare che la nuova password non sia costruita da quella vecchia. Questo influiscesolo sul meccanismo della password.
Per impostazione predefinita, questo modulo controlla i seguenti aspetti e rifiuta se è il caso:
- La nuova password è dal dizionario?
- La nuova password è un palindromo di quella vecchia (ad esempio: azerty <> ytreza)?
- L'utente ha cambiato solo le maiuscole della password (ad esempio: azerty <>AzErTy)?
Possibili argomenti per questo modulo:
retry=n
: imponen
richieste (1` per impostazione predefinita) per la nuova password.difok=n
: impone almenon
caratteri (10
per impostazione predefinita), diversi dalla vecchia password. Se la metà dei caratteri della nuova password è diversa da quella vecchia, la nuova password viene convalidata.minlen=n
: impone una password din+1
caratteri minimi. Non è possibile assegnare un minimo inferiore a 6 caratteri (il modulo è compilato in questo modo).
Altri argomenti applicabili:
dcredit=-n
: impone una password contenente almenon
cifre,ucredit=-n
: impone una password contenente almenon
lettere maiuscole,credit=-n
: impone una password contenente almenon
lettere minuscole,ocredit=-n
: impone una password contenente almenon
caratteri speciali.
pam_tally
¶
Il modulo pam_tally
consente di bloccare un account basato su un numero di tentativi di accesso non riusciti.
Il file di configurazione predefinito per questo modulo potrebbe assomigliare: /etc/pam.d/system-auth
:
auth required /lib/security/pam_tally.so onerr=fail no_magic_root
account required /lib/security/pam_tally.so deny=3 reset no_magic_root
Il meccanismo auth
accetta o nega l'autenticazione e reimposta il contatore.
Il meccanismo account
incrementa il contatore.
Alcuni argomenti del modulo pam_tally includono:
onerr=fail
: incrementa il contatore.deny=n
: una volta superato il numeron
dei tentativi non riusciti, l'account è bloccato.no_magic_root
: può essere usato per negare l'accesso ai servizi di root-level lanciati dai demoni.- ad esempio, non usare questo per
su
.
- ad esempio, non usare questo per
reset
: ripristina il contatore a 0 se l'autenticazione viene convalidata.lock_time=nsec
: l'account è bloccato pern
secondi.
Questo modulo funziona insieme al file predefinito per tentativi non riusciti /var/log/faillog
(che può essere sostituito da un altro file con l'argomento file=xxxx
), e il comando associato faillog
.
Sintassi del comando faillog:
faillog[-m n] |-u login][-r]
Opzioni:
m
: per definire, nella visualizzazione dei comandi, il numero massimo di tentativi non riusciti,u
: per specificare un utente,r
: per sbloccare un utente.
pam_time
¶
Il modulo pam_time
consente di limitare i tempi di accesso ai servizi gestiti da PAM.
Per attivarlo, modificare /etc/pam.d/system-auth
e aggiungere:
account required /lib/security/pam_time.so
La configurazione è fatta nel file /etc/security/time.conf
:
login ; * ; users ;MoTuWeThFr0800-2000
http ; * ; users ;Al0000-2400
La sintassi di una direttiva è la seguente:
services; ttys; users; times
Nelle seguenti definizioni, la lista logica utilizza:
&
: è la logica "and" .<unk>
: è la logica "or".!
: significa negazione, o "tutto eccetto".*
: è il carattere jolly.
Le colonne corrispondono a:
services
: un elenco logico di servizi gestiti da PAM che devono essere gestiti anche da questa regolattys
: un elenco logico di dispositivi correlatiusers
: elenco logico degli utenti gestiti dalla regolatimes
: un elenco logico di fasce orarie autorizzate
Come gestire le fasce orarie:
- Giorni:
Mo
,Tu
,We
,Th
,Fr,
Sa
,Su
,Wk
, (dal lunedì al venerdì),Wd
(Sabato e Domenica), eAl
(Lunedi a Domenica) - La gamma oraria:
HHMM-HHMM
- Una ripetizione annulla l'effetto:
WkMo
= tutti i giorni della settimana (M-F), meno lunedì (ripetuto).
Esempi:
- Bob, può accedere tramite un terminale tutti i giorni tra le 07:00 e le 09:00, tranne il mercoledì:
login; tty*; bob; alth0700-0900
Nessun accesso, da terminale o da remoto, tranne che per root, ogni giorno della settimana tra le 17:30 e le 7:45 del giorno successivo:
login; tty* | pts/*; !root; !wk1730-0745
pam_nologin
¶
Il modulo pam_nologin
disabilita tutti gli account tranne root:
In /etc/pam.d/login
si mette:
auth required pam_nologin.so
Solo root può connettersi se il file /etc/nologin
esiste ed è leggibile.
pam_wheel
¶
Il modulo pam_wheel
consente di limitare l'accesso al comando su
ai membri del gruppo wheel
.
In /etc/pam.d/su
si mette:
auth required pam_wheel.so
L'argomento group=my_group
limita l'uso del comando su
ai membri del gruppo my_group
Nota
Se il gruppo my_group
è vuoto, il comando su
non è più disponibile sul sistema, il che obbliga a usare il comando sudo.
pam_mount
¶
Il modulo pam_mount
consente di montare un volume per una sessione utente.
In /etc/pam.d/system-auth
si mette:
auth optional pam_mount.so
password optional pam_mount.so
session optional pam_mount.so
I punti di montaggio sono configurati nel file /etc/security/pam_mount.conf
:
<volume fstype="nfs" server="srv" path="/home/%(USER)" mountpoint="~" />
<volume user="bob" fstype="smbfs" server="filesrv" path="public" mountpoint="/public" />
Conclusione¶
A questo punto si dovrebbe avere un'idea più precisa di cosa può fare PAM e di come apportare le modifiche necessarie. Tuttavia, dobbiamo ribadire l'importanza di essere molto, molto attenti con qualsiasi modifica apportata ai moduli PAM. Potreste chiudervi fuori dal vostro sistema o, peggio, far entrare tutti gli altri.
Si consiglia vivamente di testare tutte le modifiche in un ambiente che possa essere facilmente riportato a una configurazione precedente. Detto questo, divertitevi!
Author: Antoine Le Morvan
Contributors: Steven Spencer, Ezequiel Bruni, Ganna Zhyrnova