MariaDB + LDAP
Índice
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