MariaDB + LDAP

Fonte: TecPorto
Saltar para a navegação Saltar para a pesquisa

Introdução

O suporte de LDAP para autenticação dos utilizadores de MariaDB (e MySQL) é sempre feito via PAM. O MariaDB (e o MySQL) não se liga directamente a um servidor de LDAP. Esse processo é sempre feito através do sistema PAM (Pluggable Authentication Modules), existente em praticamente todos os sistemas baseados em Linux e Unix.

Os passos aqui descritos presumem a configuração correcta, funcional e testada do sistema em questão como cliente do serviço LDAP com a base de dados que se pretende usar para autenticação.

Activação

A activação do suporte de LDAP depende de alguns passos que incluem a criação de um ficheiro de configuração específico para o PAM e a activação do suporte PAM no serviço.

Para carregar o plugin de autenticação via PAM, há dois métodos alternativos para o fazer:

  • Método 1: editar o ficheiro de configuração do MariaDB e, na zona [mysqld] acrescenta-se a linha abaixo:
 plugin_load_add = auth_pam
  • Método 2: registar o carregamento do plugin directamente a partir a CLI do MariaDB, emitindo o seguinte comando:
 INSTALL SONAME 'auth_pam.so';

Usando-se este método, pode-se confirmar o sucesso com o comando:

 SHOW PLUGINS;

O ficheiro a criar para o PAM deverá ser /etc/pam.d/mysqld e o seu conteúdo será:

 auth    required pam_ldap.so audit
 account required pam_ldap.so audit

Após estes passos criados, é possível adicionar ao MariaDB utilizadores autenticáveis via PAM com o comando abaixo (presuma-se que minion é nome do utilizador a adicionar):

 CREATE USER 'minion'@'localhost' IDENTIFIED WITH pam;

De notar que este método pode ser usado também para que, substituindo pam_ldap por pam_unix, se consiga autenticação de utilizadores do sistema (os presentes em /etc/passwd) em vez dos presentes no serviço LDAP.

Problemas comuns

Problemas com o PHP (nomeadamente phpMyAdmin)

O PHP pode dar problemas de autenticação com o pacote padrão do Ubuntu. Para resolver esse problema há duas alternativas:

Alternativa 1: autenticação clear text do MySQL/MariaDB

Esta é a forma mais fácil e potencialmente menos segura de resolver o problema. Não será crítico se os acessos ao MySQL/MariaDB forem todos localhost mas, caso não seja, recomenda-se que se tome algumas medidas de segurança adicionais como, por exemplo, só utilizar este método em redes internas cuja segurança física possa ser garantida para evitar ataques físicos de eavesdropping ou man-in-the-middle, ou usar túneis para reencaminhar o tráfego da porta 3306 (através de SSH ou de uma VPN, por exemplo).

Para aplicar este método, deve-se editar o ficheiro de configuração do servidor MariaDB ou MySQL (tipicamente /etc/mysql/mysqld.cnf ou /etc/mysql/mariadb.conf.d/50-server.cnf) e, na secção [mysqld] acrescentar a seguinte linha:

 pam_use_cleartext_plugin = ON

Alternativa 2: Recompilação do módulo de MySQL do PHP

Neste caso é necessário recorrer ao código fonte do PHP da mesma versão que o pacote.

TODO: obtenção do pacote, descompactação, navegação para a pasta correcta

Caso se esteja realmente a usar MariaDB, para compilar é preciso editar o Makefile gerado, apenas se não se tiver usado as opções do ./configure para gerir os caminhos de include! Os dois últimos caminhos

 -I/usr/include/mariadb -I/usr/include/mariadb/mysql

devem ser substituídos por

 -I/usr/include/mariadb/server -I/usr/include/mariadb/server/private

TODO: processo de compilação

Depois de compilado, o módulo de MySQL pode ser copiado para a pasta correcta onde o PHP o irá procurar, tipicamente /usr/lib/php// em que é a data da versão em uso. Pode-se confirmar qual a pasta a utilizar fazendo ls -l /usr/lib/php

TODO: comando de cópia

Problemas de autenticação Unix em Manjaro

Em Manjaro (e possivelmente em Arch e noutras distribuições) autenticar os utilizadores de MariaDB utilizando PAM com pam_unix pode ser problemático, podendo gerar-se erros como o seguinte:

 unix_chkpwd[xxxxx]: check pass; user unknown
 unix_chkpwd[xxxxx]: password check failed for user \(minion\)
 pam_unix(mysql:auth): authentication failure; logname= uid=963 euid=963 tty= ruser= rhost=  user=minion

O Manjaro não tem grupo shadow no sistema. A forma mais rápida (mas potencialmente perigosa) de dar a volta é criar o grupo shadow (frequentemente tem o ID numérico 42), adicionar o MariaDB a esse grupo, mudar o grupo do ficheiro /etc/shadow para shadow, dar-lhe permissões de leitura ao grupo e reiniciar o MariaDB.

 sudo groupadd -g 42 -r shadow
 sudo chown :shadow /etc/shadow
 sudo chmod 640 /etc/shadow
 sudo chown :shadow /usr/sbin/unix_chkpwd
 sudo chmod g+s /usr/sbin/unix_chkpwd
 sudo gpasswd -a mysql shadow
 sudo systemctl restart mariadb