Como Tornar o MariaDB Seguro contra Crackers
Quando você conectar a um servidor MySQL, você normalmente deve usar uma senha. A senha não é transmitida em texto puro sobre a conexão, porém o algorítimo de criptografica não é muito forte e com algum esforço um atacante engenhoso pode quebrar a senha se ele conseguir capturar o tráfego entre o cliente e o servidor. Se a conexão entre o cliente e o servidor passar por uma rede não confiável, você deve usar um tunnel SSH para criptografar a comunicação.
Todas outras informações são transferidas como texto que podem ser lido por qualquer um que consiga ver a conexão. Se você se preocupa com isto, você pode usar o protocol de compressão (No MariaDB versão 3.22 e superiores) para tornar o tráfico muito mais dificil de decifrar. Para deixar tudo ainda mais seguro você deve usar ssh
. Você pode encontrar um cliente ssh
open source em http://www.openssh.org, e um cliente ssh
comercial em http://www.ssh.com. Com isto, você pode obter uma conexão TCP/IP critografada entre um servidor MariaDB e um cliente MySQL.
Se você estiver usando o MariaDB 4.0, você também pode usar o suporte interno OpenSSL Leia "Usando Conexões Seguras".
Para deixar um sistema MariaDB seguro, você deve considerar as seguintes sugestões:
- Utilize senhas para todos os usuários MySQL. Lembre-se que qualquer um pode logar como qualquer outra pessoa simplesmente com
mysql -u outro_usuário nome_bd
seoutro_usuário
não tiver senha. Isto é um procedimento comum com aplicações cliente/servidor que o cliente pode especificar qualquer nome de usuário. Você pode alterar a senha de todos seus usuários editando o scriptmysql_install_db
antes de executá-lo ou somente a senha para o usuárioroot
do MariaDB desta forma:shell>
mysql -u root mysql
mysql>UPDATE user SET Password=PASSWORD('nova_senha')
->WHERE user='root';
mysql>FLUSH PRIVILEGES;
- Não execute o daemon do MariaDB como o usuário
root
do Unix. Isto é muito perigoso, porque qualquer usuário com privilégiosFILE
estará apto a criar arquivos como oroot
(por exemplo,~root/.bashrc
). Para prevenir esta situação,mysqld
irá recusar a execução comoroot
a menos que ele seja especificado diretamente usando a opção--user=root
.O
mysqld
pode ser executado como um usuário normal sem privilégios. Você pode também criar um novo usuário UnixMariaDB
para tornar tudo mais seguro. Se você executar omysqld
como outro usuário Unix, você não precisará alterar o usuárioroot
na tabelauser
, porque nomes de usuário do MariaDB não tem nada a ver com nomes de usuários Unix. Para iniciar omysqld
como outro usuário Unix, adicione uma linhauser
que especifica o nome de usuário para o grupo[mysqld]
do arquivo de opções/etc/my.cnf
ou o arquivo de opçõesmy.cnf
no diretório de dados do servidor. Por exemplo:[mysqld] user=mysql
Estas opções configuram o servidor para iniciar como o usuário designado quando você o inicia manualmente ou usando
mysqld_safe
oumysql.server
. Para maiores detalhes, veja Seção A.3.2, "Como Executar o MariaDB Como Um Usuário Normal". - Não suportar links simbólicos para tabelas (Isto pode ser desabilitado com a opção
--skip-symlink
. Isto é muito importante caso você execute omysqld
como root, assim qualquer um que tenha acesso à escrita aos dados do diretório do mysqld podem apagar qualquer arquivo no sistema! Leia "Utilizando Links Simbólicos para Tabelas". - Verfique se o usuário Unix que executa o
mysqld
é o único usuário com privilégios de leitura/escrita nos diretórios de bancos de dados. - Não forneça o privilégio PROCESS para todos os usuários. A saída de
mysqladmin processlits
mostra as consultas atualmente em execução, portanto qualquer usuário que consiga executar este comando deve ser apto a ver se outro usuário entra com uma consulta do tipoUPDATE user SET password=PASSWORD('não_seguro')
.O
mysqld
reserva uma conexão extra para usuários que tenham o privilégio process, portanto o usuárioroot
do MariaDB pode logar e verificar a atividade do servidor mesmo se todas as conexões normais estiverem em uso. - Não conceda o privilégio FILE a todos os usuários. Qualquer usuário que possua este privilégio pode gravar um arquivo em qualquer lugar no sistema de arquivos com os privilégios do daemon
mysqld
! Para tornar isto um pouco mais seguro, todos os arquivos gerados comSELECT ... INTO OUTFILE
são lidos por todos, e não se pode sobrescrever arquivos existentes.O privilégio FILE pode também ser usado para ler qualquer arquivo acessível para o usuário Unix com o qual o servidor está sendo executado. Pode ocorrer abusos como, por exemplo, usar
LOAD DATA
para carregar o arquivo/etc/passwd
em uma tabela, que pode então ser lido comSELECT
. - Se você não confia em seu DNS, você deve utilizar números IP no lugar de nomes de máquinas nas tabelas de permissão. De qualquer forma, você deve ter muito cuidado ao criar entradas de concessão utilizando valores de nomes de máquinas que contenham metacaractes!
- Se você deseja restrigir o número de conexões para um único usuário, você pode faze-lo configurando a variável
max_user_connections
nomysqld
.