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_bdseoutro_usuárionã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_dbantes de executá-lo ou somente a senha para o usuáriorootdo MariaDB desta forma:shell>
mysql -u root mysqlmysql>UPDATE user SET Password=PASSWORD('nova_senha')->WHERE user='root';mysql>FLUSH PRIVILEGES; - Não execute o daemon do MariaDB como o usuário
rootdo Unix. Isto é muito perigoso, porque qualquer usuário com privilégiosFILEestará apto a criar arquivos como oroot(por exemplo,~root/.bashrc). Para prevenir esta situação,mysqldirá recusar a execução comoroota menos que ele seja especificado diretamente usando a opção--user=root.O
mysqldpode ser executado como um usuário normal sem privilégios. Você pode também criar um novo usuário UnixMariaDBpara tornar tudo mais seguro. Se você executar omysqldcomo outro usuário Unix, você não precisará alterar o usuáriorootna tabelauser, porque nomes de usuário do MariaDB não tem nada a ver com nomes de usuários Unix. Para iniciar omysqldcomo outro usuário Unix, adicione uma linhauserque especifica o nome de usuário para o grupo[mysqld]do arquivo de opções/etc/my.cnfou o arquivo de opçõesmy.cnfno 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_safeoumysql.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 omysqldcomo 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 processlitsmostra 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
mysqldreserva uma conexão extra para usuários que tenham o privilégio process, portanto o usuáriorootdo 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 OUTFILEsã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 DATApara carregar o arquivo/etc/passwdem 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_connectionsnomysqld.