Ir para conteúdo
  • Cadastre-se

Ubuntu & Debian ( Configuração Avançada de Segurança MySQL )


deproxmonrox

Posts recomendados

Esse tutorial foi escrito para o Linux Ubuntu, se o seu sistema é outro então adapte este tutorial conforme sua necessidade, sempre verificando o path dos arquivos mencionados e criando uma cópia de segurança além de anotar as permissões dos mesmos antes de começar as alterações.

Sempre gosto de posta coisa que vai ajudar a garantir a segurança do seu servidor de lineage 2 isso vai garantir mais tempo em servidores de lineage 2 hoje em dia.

 

Open-source-database-also-needs-powerful

Por padrão é possível logar-se localmente em um servidor MySQL como usuário anônimo sem a necessidade de autenticação, apesar do acesso ficar restrito as bases test e information_schema, uma mente criativa pode através de script coletar dados da máquina e armazenar estes dados dentro da base test para futura consulta sem chamar a atenção.

Os parâmetros mais utilizados para conexão com o servidor são
-u nome do usuário
-p requisição de senha
-h host / ip
-P porta de conexão (padrão 3306)
-D base de dados

Observação: Apesar de apontarem para o mesmo local, no servidor, localhost e 127.0.0.1 são vistos como coisas diferentes, então um usuário que tem acesso a localhost não necessariamente conseguirá logar em 127.0.0.1, ou seja, dentro da base mysql na tabela user localhost é uma coisa e 127.0.0.1 é outra, ja no arquivo my.conf usa-se apenas 127.0.0.1 quando se fala de acesso local.

Tornando o MySQL um pouco mais seguro

Para solucionar a questão do login temos três possíveis soluções.

  • Criar uma senha para o usuário anônimo
  • Remover o usuário anônimo (identificado como '' na tabela user)
  • Deletar a base test

Optei por criar uma senha forte para o usuário anônimo ao invés de deletá-lo ou de deletar a base test pois ambos podem ser úteis no futuro, assim você não precisa se dar o trabalho de criar uma nova conta ou tabela caso precise de algo corriqueiro e dificilmente alguém tentará crackear a senha de usuário com privilégios restritos apenas para salvar dados na base, mas se a senha for nula essa técnica pode ser válida.

Conecte-se como root no servidor através do ip 127.0.0.1 ou localhost
$ mysql -u root -p -h 127.0.0.1 -D mysql Altere a senha do usuário anônimo que é identificado como ''@'localhost' substituindo o respectivo texto pela nova senha.
mysql>SET PASSWORD FOR ''@'localhost' = password('nova senha');
Query OK, 0 rows affected (0.00 sec) Para testar basta sair do servidor e se conectar como anônimo informando a nova senha, lembre-se de utilizar o parâmetro -p
mysql>exit
Bye

$ mysql -p -h 127.0.0.1
Password: Para evitar logins remotos (ip's externos), procure a seguinte linha no arquivo /etc/mysql/my.conf (este é o path relativo para distro ubuntu, caso não encontre o arquivo procure-o através do comando locate ou find)
skip-networking Ao encontrá-la, descomente-a retirando o # da frente do comando, caso essa linha não exista, crie-a.

Certifique-se de que no mesmo arquivo a linha abaixo contém o IP local 127.0.0.1 ao invés de 0.0.0.0 assim apenas conexões locais serão aceitas
bind-address = 127.0.0.1 Pronto! Menos uma questão de segurança para se preocupar.
Se você pretende habilitar acesso remoto, siga as instruções abaixo, caso contrário "por hoje é só pessoal!"

Habilitando acesso remoto

Atenção: Aqui será feito exatamente o contrário de parte do que fizemos acima! Pois vamos liberar o acesso remoto ao invés de bloqueá-lo, porém de uma forma segura.

O primeiro passo é garantir a algum usuário permissão para conectar ao servidor e especificar quais serão seus privilégios, abaixo a lista dos possíveis privilégios:

ALL/ALL PRIVILEGES – Simboliza todos os privilégios abaixo;
ALTER – Permite alterar a estrutura de tabelas;
ALTER ROUTINE – Permite alterar e excluir stored procedures/functions;
CREATE – Permite criar base de dados e tabelas;
CREATE ROUTINE – Permite criar stored procedures/functions;
CREATE TEMPORARY TABLES – Permite a criação de tabelas temporárias em expressões SQL que utilizam esse recurso;
CREATE USER – Permite criar e gerenciar usuários;
CREATE VIEW – Permite criar visões;
DELETE – Permite excluir informações;
DROP – Permite excluir estruturas (bases e tabelas);
EVENT – Permite criar event schedulers;
EXECUTE – Permite executar stored procedures;
FILE – Permite ler e escrever arquivos no sistema;
GRANT – Permite cadastrar seus privilégios para outros usuários;
INDEX – Permite o gerenciamento de índices;
INSERT – Permite inserir informações em tabelas;
LOCK TABLES – Permite bloquear tabelas;
PROCESS – Permite visualizar e finalizar processos do MySQL;
RELOAD – Permite recarregar bases de dados;
REPLICATION CLIENT – Permite solicitar replicação;
REPLICATION SLAVE – Permite replicar suas informações;
SELECT – Permite consultas;
SHOW DATABASES – Permite visualizar todas as estruturas das bases existentes;
SHOW VIEW – Permite visualizar os códigos de criação de visões;
SHUTDOWN – Permite desligar o servidor MySQL;
SUPER – Permite configurar os dados do servidor MASTER (em caso de replicação);
TRIGGER – Permite criar e gerenciar triggers;
UPDATE – Permite alterar informações em tabelas;
USAGE – Permite utilizar comandos básicos.

Vamos criar uma usuária chamada amanda (sugiro a criação de um usuário específico para acesso remoto, uma das vantagens é a identificação nos arquivos de log) e ja definir seus privilégios, isso será feito através do comando GRANT, a sintaxe do mesmo é:

GRANT <privilégios> ON <base>.<tabela> TO '<usuario>'@'<dominio>' IDENTIFIED BY '<senha>'

Sendo que

*.* – Aplica-se a todas as bases!
<base>.* – Aplica-se a todas as tabelas da base determinada
<base>.<tabela> – Aplica-se a uma determinada tabela

Criando a usuária amanda e atribuindo seus privilégios:
$ mysql -u root -p -D mysql
mysql> GRANT SELECT,INSERT,DELETE,UPDATE ON test.* TO 'amanda'@'%'
IDENTIFIED BY 'senha da amanda'; Nota: O uso de ' %' define que a usuária poderá se logar tanto localmente quanto remotamente.

Observação: O Comando GRANT cria um novo usuário e atribui privilégios a cada vez que é utilizado, se você estiver realizando alguns testes nesta parte, recomendo que ao terminar de um select na tabela user para verificar se não foi criada mais de uma entrada para o mesmo usuário com hosts diferentes, para revogar privilégios utilize o comando

O conteúdo está oculto, favor efetuar login ou se cadastrar!


Para habilitar conexões remotas ao seu servidor MySQL vamos considerar o cenário do diagrama abaixo, o IP 200.220.4.113 é apenas para fim ilustrativo, substitua-o por seu IP externo! para descobrir seu IP externo visite o site
O conteúdo está oculto, favor efetuar login ou se cadastrar!
ou o
O conteúdo está oculto, favor efetuar login ou se cadastrar!
.

O conteúdo está oculto, favor efetuar login ou se cadastrar!

Vamos começar com o mínimo de alterações e caso isso não seja o suficiente partiremos para outra etapa, assim restringimos as mudanças ao que for realmente necessário.

Primeiro o arquivo my.conf (o oposto do que fizemos no início deste tutorial) vamos comentar a linha skip-networking (caso essa linha não exista não é necessário cria-la) e alterar o bind-adress para 0.0.0.0, ao comentar a linha skip-networking estamos habilitando as conexões via tcp/ip, ja o bind-adress como 0.0.0.0 permite conexões de qualquer faixa de ip.
#skip-networking
bind-address = 0.0.0.0 Se ao tentar um login remoto ocorrer o erro:
$ mysql -u amanda -p -h 200.220.4.113 -P 3306
ERROR 1042 (HY000): Can't get hostname for your address Procure a linha abaixo no arquivo my.conf, caso exista certifique-se de que ela não está comentada com #, caso não exista, crie-a.
skip-name-resolve Se depois disso você receber time-out
$ mysql -u amanda -p -h 200.220.4.113 -P 3306
Enter password:
ERROR 2003 (HY000): Can't connect to MySQL server on '200.220.4.113' (110) Talvez seu firewall esteja bloqueando a conexão, se for este o caso adicione a seguinte regra ao firewall:
$ sudo ufw allow 3306/tcp Para verificar se a regra foi adicionada corretamente
$ sudo ufw status

Status: active

To Action From
-- ------ ----
3306/tcp ALLOW Anywhere
3306/tcp ALLOW Anywhere (v6)
Se tudo estiver correto você conseguirá logar remotamente:
$ mysql -u yourusername -p -h 200.220.4.113 -P 3306 # Use seu IP externo!
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.

Copyright © 2000, 2013, Oracle and/or its affiliates.
All rights reserved.

Oracle is a registered trademark of Oracle Corporation
and/or its affiliates.
Other names may be trademarks of their respective owners.

Type 'help;' or '\h' for help. Type '\c' to clear
the current input statement.

mysql>


É isto!

Observação: Se ainda assim não conseguir conectar remotamente e você utilizar um roteador, será preciso redirecionar a porta do roteador para sua máquina, porém devido a imensa diversidade de modelos de roteadores não irei incluir isto neste tutorial, mas você encontrará informações sobre como fazer o "foward" de portas de diversos modelos no site

O conteúdo está oculto, favor efetuar login ou se cadastrar!



Para remover a usuária amanda que foi criada apenas como teste:
$ mysql -u root -p -D mysql
mysql> DELETE FROM user WHERE user='amanda';
Para bloquear novamente o acesso no firewall mude a regra de allow para deny:
$ sudo ufw deny 3306/tcp

Interrompendo o inicio automático do servidor MySQL

Geralmente após instalado o servidor passa a ser iniciado como um serviço no boot do sistema, se você o utiliza apenas eventualmente quando está em produção e não como servidor permanente local, como medida de segurança adicional recomendo iniciar o servidor apenas quando você for trabalhar com o mesmo. O cancelamento do início automático pode ser feito de duas maneiras.

A Primeira é criando um arquivo override com a instrução "manual", a vantagem deste metódo é que você não precisa alterar o arquivo de inicialização do MySQL, (caso queira voltar a inicializar o servidor automaticamente no boot basta remover o arquivo mysql.override.)

Criando o arquivo mysql.override
$ sudo touch /etc/init/mysql.override
$ echo "manual" | sudo tee /etc/init/mysql.override
A outra opção é como root comentar a seguinte linha no arquivo /etc/init/myql.init
#start on runlevel [2345] A partir dai para iniciar manualmente o servidor:
$ sudo initctl start mysql Para interromper o servidor
$ sudo initctl stop mysql Como alternativa também é possível iniciar ou parar o servidor através do comando service mysql <start / stop>

0016.gifNa minha opinião, a Microsoft é muito melhor em fazer dinheiro do que Sistemas Operacionais.0016.gif


Você tem que encontrar o que você gosta. E isso é verdade tanto para o seu trabalho quanto para seus companheiros. Seu trabalho vai ocupar uma grande parte da sua vida, e a única maneira de estar verdadeiramente satisfeito é fazendo aquilo que você acredita ser um ótimo trabalho. E a única maneira de fazer um ótimo trabalho é fazendo o que você ama fazer. Se você ainda não encontrou, continue procurando. Não se contente. Assim como com as coisas do coração, você saberá quando encontrar. E, como qualquer ótimo relacionamento, fica melhor e melhor com o passar dos anos. Então continue procurando e você vai encontrar. Não se contente.

Link para o comentário
Compartilhar em outros sites






×
×
  • Criar Novo...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.