Il plugin di autenticazione PAM
A partire dalla versione 5.2.10 (solo nel tarball dei sorgenti in 5.2.10), MariaDB include il plugin di autenticazione PAM. PAM è l'acronimo di Pluggable Authentication Modules e si tratta di un framework di autenticazione per Linux, FreeBSD, Solaris e altri sistemi operativi.
Nota: Windows non usa PAM, perciò il plugin non funzionerà su tale sistema. Tuttavia, un client Windows può connettersi a un server MariaDB — che gira su Linux o Solaris, per esempio — che utilizza PAM.
Casi d'uso
PAM rende possibile l'implementazione di diversi scenari di autenticazione, di diversa complessità. Per esempio:
- Autenticazione usando le password di
/etc/shadow
(questo è ciò che solitamente PAM fa per i normali login da shell, per pop3, imap e per molti altri servizi); - Autentitazione tramite LDAP;
- Autenticazione tramite le passphrase di SSH;
- Autenticazione tramite una password che funziona una sola volta (anche con un SMS di conferma!);
- Combinare diversi moduli di autenticazione, dove il login ha successo se uno o se tutti passano il controllo;
- Scadenza delle passsword;
- Mappare i nomi utente;
- Limitare l'accesso per ora, data, giorno della settimana, etc.
- Log dei tentativi di accesso;
- E così via, questo elenco non è esaustivo.
Installazione
Il plugin non viene caricato per default; è possibile installarlo così:
MariaDB [test]> INSTALL PLUGIN pam SONAME 'auth_pam.so';
oppure aggiungendo --plugin-load=auth_pam.so
alla riga di comando del server, o alla sezione [mysqld]
nel file my.cnf.
Similmente a tutti gli altri Plugin di Autenticazione, per creare un utente MariaDB che si autentichi con PAM, si usi il comando:
CREATE USER nome_utente@nome_hostIDENTIFIED VIA pam
oppure, ad esempio:
GRANT SELECT ON db.* TO serg IDENTIFIED VIA pam
Opzionalmente, è possibile specificare un nome di servizio PAM service name, ad esempio:
CREATE USER test_pam IDENTIFIED VIA pam USING 'mariadb_mtr';
Questa riga (copiata testualmente dalla test suite) crea un utente che dovrà autenticarsi via PAM, utilizzando il servizio mariadb_mtr.
Se il nome del servizio non è specificato, verrà usato "mysql" come servizio di default per PAM.
Configurazione di PAM
Il plugin PAM dice a MariaDB di delegare l'autenticazione al sottosistema PAM.
Come venga eseguita esattamente l'autenticazione, dipende dalla configurazione di PAM. Solitamente, tale configurazione si trova in /etc/pam.d/
o in /etc/pam.conf
. La sintassi di questi file di configurazione è spiegata nei manuali del sistema operativo, per esempio in man pam.d
. Ecco un esempio minimo, che utilizziamo per la nostra test suite:
auth required pam_mariadb_mtr.so pam_test account required pam_mariadb_mtr.so
Queste righe devono essere inserite in /etc/pam.d/mariadb_mtr
— il nome del file deve corrispondere a quello del servizio PAM. Questo semplice file di configurazione dice al sottosistema PAM che per l'autenticazione (auth) è richiesto (required) che il modulo pam_mariadb_mtr.so
(il nostro modulo di prova) restituisca un ok. Perchè un account sia valido, è richiesto che il modulo pam_mariadb_mtr.so
restituisca un ok. Altri esempi sono reperibili nella directory /etc/pam.d/
.
Nota: se si configura PAM perché utilizzi pam_unix.so
e si nota che MariaDB ha bisogno di essere eseguita come root per accedere a /etc/shadow
— si provi ad aggiornare PAM. Le nuove versioni non richiedono che pam_unix.so
sia eseguito come root.
Plugin di dialogo
L'autenticazione PAM utilizza il plugin client dialog per comunicare con l'utente. Questo permette a MariaDB di supportare configurazioni PAM arbitrarie con password regolari o valide una sola volta, risposte multiple, domande multiple, o qualsiasi altra cosa. Non c'è bisogno di installare o abilitare alcunchè - il plugin dialog viene caricato dalla libreria client in modo completamente automatico e trasparente all'applicazione.
Mapping dei nomi utenti
Sebbene i moduli PAM di solito non lo facciamo, PAM può modificare il nome utente durante il processo di autenticazione. Per esempio, secondo le specifiche PAM, è possibile iniziare l'autenticazion come John ed essere autenticato come Jim.
Il plugin di autenticazione PAM di MariaDB supporta pienamente questa possibilità - il nome utente originale è restituito dalla funzione SQL USER()
, mentre l'utente autenticato (eventualmente modificato) è restituito dalla funzione CURRENT_USER()
, ed è quest'ultima a determinare quali privilegi siano disponibili per la sesisone.