La configurazione di Postgres avviene attraverso alcuni file di configurazione,
modificabili di default solo dall'utente postgres (oltre che, naturalmente, da
root).
Uno di questi è postgresql.conf all'interno del quale vengono definiti alcuni
parametri per il funzionamento del server postmaster; uno dei più importanti è
tcpip_socket = true
che definisce la possibilità di connettersi al server attraverso il socket tcp/ip. Di
default è impostato a vero, ma poi un utente che necessita di questa soluzione
deve essere specificato esplicitamente all'interno del file pg_hba.conf.
Dentro pg_hba.conf risiedono le informazioni necessarie per la gestione ed il
funzionamento del server di postgres.
L'intestazione ne specifica la funzione:
Questo file controlla: a quali host è permesso connettersi, come i client sono
autenticati, quali username possono usare, a quali database possono
accedere.
Infatti, al momento della creazione di un utente tramite l'apposito comando
CREATEUSER da parte sempre di postgres, deve essere anche aggiunta una riga
all'interno di questo file specificando eventualmente anche il metodo di
crittatura delle password (nel nostro caso md5).
Il file è strutturato come un insieme di record, uno per riga. Le righe bianche
sono ignorate, come anche quelle che iniziano con '#'. Ogni record è costituito
da un certo numero di campi separati da uno spazio o da una tabulazione. Ogni
record specifica un tipo di connessione, un range di indirizzi IP (se rilevante per
il tipo di connessione), un nome di database e un metodo di autenticazione
usato per la connessione corrispondente ai parametri precedentemente
indicati. Un record può avere uno dei seguenti sette formati:
codice:
local database user auth-method
host database user IP-address IP-mask auth-method
hostssl database user IP-address IP-mask auth-method
hostnossl database user IP-address IP-mask auth-method
host database user IP-address/IP-masklen auth-method
hostssl database user IP-address/IP-masklen auth-method
hostnossl database user IP-address/IP-masklen auth-method
Il significato dei campi è il seguente:
local
Questo record indica la possibilità di instaurare una connessione utilizzando
l'Unix-domain socket, ovvero dalla stessa macchina su cui è installato il server
di database.
host
Questo record contiene le informazioni per instaurare delle connessioni via
TCP/IP, ammesso che siano abilitate in postgresql.conf.
hostssl
Questo record contiene le informazioni per instaurare delle connessioni via
TCP/IP protette con SSL. Le impostazioni devono corrispondere con quelle del
record host.
hostnossl
Questo record è esattamente l'opposto del precedente.
database
Specifica a quale database questo record corrisponde. Il valore all specifica che
corrisponde a tutti i database. Il valore sameuser indica che il database al
quale consente l'accesso ha lo stesso nome dell'utente indicato in user. Il
valore samegroup specifica che l'utente che richiede la connessione deve
appartenere al gruppo con lo stesso nome del database richiesto. Altrimenti
deve essere inserito il nome di un database. Database multipli possono essere
specificati separandone i nomi con una virgola. In alternativa può essere
indicato un file contenente nomi di database, nel formato @nomefile che deve
essere posizionato all'interno del filesystem nella stessa directory di
pg_hba.conf.
user
Indica a quali utenti questo record corrisponde. Il valore all specifica tutti gli
utenti. Possono altrimenti essere inseriti in questo campo un utente, una lista
di utenti separati da una virgola, un gruppo nel formato +nomegruppo, o un file
nel formato @nomefile contenente una lista di utenti.
IP-address, IP-mask
Questi due campi contengono il valore dell'indirizzo IP e della maschera della
notazione decimale separata da punti standard (gli indirizzi IP possono essere
specificati solo nel formato numerico e non come nome di dominio). Questi
campi vanno applicati ai record host, hostssl, hostnossl.
IP-masklen
Può essere utilizzato in alternativa a IP-mask. È un intero che specifica il
numero di bit di ordine più alto da settare nella maschera. Il numero è
compreso tra 0 e 32 (per IPv4) o 128 (per IPv6). 0 corrisponde a tutti gli
indirizzi, 32 (o 128) corrisponde solo all'esatto host specificato. È applicato ai
record host, hostssl, hostnossl.
authentication-method
Indica il metodo di autenticazione da utilizzare nella connessione attraverso
questo record. Le possibili scelte sono trust (l'utente può connettersi senza
password), reject (la connessione viene rifiutata incondizionatamente, utile per
filtrare alcuni host da un gruppo), md5 (richiede al client che sia inviata un
hash md5 della password per l'autenticazione), crypt (come md5, solo che usa
la funzione crypt() del sistema operativo, cosa richiesta per le versioni
precedenti alla 7.2 dei client), password (la password viene richiesta, ma
spedita in chiaro), krb4 (per l'autenticazione viene usato Kerberos V4,
disponibile solo per le connessioni TCP/IP), krb5 (per l'autenticazione viene
usato Kerberos V5, disponibile solo per le connessioni TCP/IP), ident (ottiene lo
username del sistema operativo del client e verifica che l'utente sia abilitato
alla connessione al database richiesto), pam (l'autenticazione usa il servizio
Pluggable Authentication Modules messo a disposizione dal sistema operativo).