Este método de autenticação opera de forma semelhante ao método
password, exceto por usar o
RADIUS (Remote
Authentication Dial-In User Service) como método
de verificação da senha.
O RADIUS é usado apenas para validar os
pares “nome de usuário/senha”.
Portanto, o usuário já deverá existir no banco de dados antes que
o RADIUS possa ser usado para autenticação.
Ao usar a autenticação pelo RADIUS,
é enviada uma mensagem de solicitação de acesso ao servidor
RADIUS configurado.
Esta solicitação é do tipo
autenticar apenas
(Authenticate Only),
incluindo parâmetros para nome de usuário,
senha (encriptada), e o
identificador NAS
(NAS Identifier).
A solicitação é encriptada usando uma palavra-passe
compartilhada com o servidor.
O servidor RADIUS responde a esta
solicitação com acesso aceito
(Access Accept), ou
acesso rejeitado
(Access Reject).
Não há suporte para contas RADIUS.
Podem ser especificados diversos servidores RADIUS e, neste caso, estes serão tentados sequencialmente. Se for recebida uma resposta negativa de um servidor, a autenticação irá falhar. Se não for recebida nenhuma resposta, será tentado o próximo servidor da lista. Para especificar vários servidores, os nomes dos servidores devem ser separados por vírgulas, e a lista colocada entre aspas. Se forem especificados vários servidores, as outras opções do RADIUS também poderão ser fornecidas como listas separadas por vírgulas, para fornecer valores individuais para cada servidor. Elas também podem ser especificadas como um único valor; neste caso, este valor será aplicado a todos os servidores.
As seguintes opções de configuração têm suporte no RADIUS:
radiusserversOs nomes DNS ou endereços IP dos servidores RADIUS aos quais se conectar. Este parâmetro é requerido.
radiussecretsAs palavras-passe compartilhadas usadas ao se comunicar com segurança com os servidores RADIUS. Devem ter o mesmo valor nos servidores PostgreSQL e RADIUS. Recomenda-se que seja uma cadeia de caracteres com pelo menos 16 caracteres. Este parâmetro é requerido.
O vetor de encriptação usado só será criptograficamente forte se o PostgreSQL foi construído com suporte para OpenSSL. Nos outros casos, a transmissão para o servidor RADIUS deve ser considerada apenas ofuscada, não segura, e medidas externas de segurança devem ser aplicadas, se necessário.
radiusports
Os números de porta para se conectar aos servidores
RADIUS.
Se não for especificada nenhuma porta, será usada a porta padrão
do RADIUS (1812).
radiusidentifiers
As cadeias de caracteres a serem usadas como
Identificador NAS nas solicitações do
RADIUS.
Este parâmetro pode ser usado, por exemplo, para identificar
a qual agrupamento de bancos de dados (instância) o usuário
está tentando se conectar, o que pode ser útil para
correspondência de política no servidor
RADIUS.
Se não for especificado nenhum identificador, será usado
o valor padrão postgresql.
Se for necessário ter uma vírgula ou espaço em branco em um valor de parâmetro do RADIUS, isto pode ser feito colocando aspas em torno do valor, mas é entediante, porque agora são necessárias duas camadas de aspas. Um exemplo de colocação de espaço em branco em uma cadeia de caracteres de palavra-passe do RADIUS é:
host ... radius radiusservers="server1,server2" \
radiussecrets="""secret one"",""secret two"""
Exemplo 20.3. Exemplo do tradutor
Autenticação RADIUS
Neste exemplo é instalado o freeRADIUS na mesma máquina do servidor PostgreSQL sob o sistema operacional Debian 12.
Instalação do freeRADIUS:
$ sudo apt-get install freeradius freeradius-utils
Adição do cliente POSTGRESQL ao servidor
freeRADIUS:
$ sudo nano /etc/freeradius/3.0/clients.conf
client POSTGRESQL {
ipaddr = 192.168.0.0/16
secret = palavrapasse
}
Adição do usuário raduser ao servidor
freeRADIUS:
$ sudo nano /etc/freeradius/3.0/users raduser Cleartext-Password := "raduserpwd"
Testar o acesso ao usuário raduser no servidor
RADIUS:
$ sudo systemctl restart freeradius
$ radtest raduser raduserpwd 192.168.3.5 1812 palavrapasse
Sent Access-Request Id 163 from 0.0.0.0:51678 ↵
to 192.168.3.5:1812 ↵
length 77
User-Name = "raduser"
User-Password = "raduserpwd"
NAS-IP-Address = 127.0.1.1
NAS-Port = 1812
Message-Authenticator = 0x00
Cleartext-Password = "raduserpwd"
Received Access-Accept Id 163 from 192.168.3.5:1812 ↵
to 192.168.3.5:51678 ↵
length 20
Adição da entrada para o usuário raduser
no arquivo pg_hba.conf:
$ sudo nano /etc/postgresql/18/main/pg_hba.conf
# TYPE DATABASE USER ADDRESS METHOD
host raduser raduser 192.168.0.0/16 radius \
radiusservers=192.168.3.5 \
radiussecrets=palavrapasse
Adição do usuário raduser no servidor
PostgreSQL:
$ sudo su - postgres $ psql psql (18.4 (Debian 18.4-1.pgdg12+1)) Digite "help" para obter ajuda. postgres=# CREATE USER raduser; CREATE ROLE postgres=# CREATE DATABASE raduser WITH OWNER raduser; CREATE DATABASE postgres=# exit $ systemctl restart postgresql
Acesso ao servidor PostgreSQL pelo
psql com o usuário raduser:
$ psql -h 192.168.3.5 -U raduser
Senha para o usuário raduser:
psql (18.4 (Debian 18.4-1.pgdg12+1))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, ↵
compression: desativado, ALPN: postgresql)
Digite "help" para obter ajuda.
raduser=>
A senha do usuario fica armazenada no servidor freeRADIUS, e não no PostgreSQL, que tem apenas a palavra-passe para acessar o servidor freeRADIUS.