Mantenha seus bancos de dados MySQL seguros criando usuários e permissões separados

Sempre fui amigo das boas práticas, muito mais se nos ajudarem a manter a segurança dos nossos servidores, serviços ou simplesmente das nossas informações.

Um hábito (mau hábito) que muitos administradores ou usuários têm é usar o acesso com raiz para todos os bancos de dados, ou seja ... eles instalam um site usando o CMS WordPress, e como dados de acesso ao banco de dados (para WP usar o servidor MySQL e usar seu banco de dados) colocam o usuário de administração do servidor MySQL: root

Além disso, eles instalam qualquer outra aplicação web (chat, paste, forum, etc) e fazem o mesmo, eles sempre usam o usuário root do MySQL ...

ERRO!!!

Este é simplesmente um hábito fatal.

Suponha que temos os seguintes serviços em um servidor:

  1. Um site ou portal usando WordPress.
  2. Nosso fórum de suporte, palestras, etc ... uma comunidade inteira.
  3. Um FTP que usa um banco de dados MySQL para armazenar usuários e senhas.
  4. Os usuários de email são armazenados (usuários e senhas) em um banco de dados MySQL.
  5. Um pequeno WebChat que instalamos para conversar com alguém que você conhece.

E em todos eles, nos 5 serviços utilizamos o usuário root do MySQL para que cada serviço acesse e salve os dados em seu banco de dados correspondente.

Um belo dia, qualquer um dos muitos trolls por aí, mas este não é apenas um troll, mas também domina alguns exploits, vulnerabilidades, hacking, etc ... decide fazer algo prejudicial a nós.

Encontre um bug no WebChat que estamos usando, aproveitando esse bug, ele consegue acessar os arquivos do WebChat, inclusive o arquivo de configuração do WebChat, e… neste arquivo, obviamente, está o nome de usuário e a senha que o WebChat usa para acessar o Servidor MySQL e adivinha? … Não é nada mais e nada menos o USUÁRIO ROOT!

Ao obter essas informações, de uma forma muito simples, o troll pode:

  1. Exclua-nos e / ou roube tudo relacionado ao site ou portal que possuímos (WordPress).
  2. Você pode excluir e / ou roubar informações nossas E de nossos usuários que usam o Fórum, a comunidade que criamos.
  3. Você também pode roubar o nome de usuário e senha de TODOS os usuários que possuem uma conta de e-mail em nosso servidor, bem como roubar as informações de seus e-mails, falsificar a identidade, etc.
  4. E agora, finalmente, você pode usar uma conta em nosso servidor FTP, e enviar qualquer arquivo que contenha malware, o que permitiria que você assumisse o controle TOTAL e ABSOLUTO de nosso servidor.

Bem, o que você acha? … 🙂

Você vê tudo o que pode acontecer simplesmente por não criar usuários independentes para cada banco de dados que temos?

Isso NÃO é um exagero, amigos, isso pode acontecer com uma facilidade incrível ... bem, tudo o que é necessário para desencadear a catástrofe é apenas um bug em alguns dos aplicativos da web que você instalou.

Agora…

Como criar usuários MySQL separados para cada aplicativo da web?

Primeiro devemos entrar no servidor MySQL com o usuário root, pois é ele quem tem os privilégios para criar bancos de dados, estabelecer permissões, criar usuários, etc:

mysql -u root -p

Quando eles escrevem o acima e pressionam [Entrar] Será solicitada a senha do usuário root do MySQL, eles a digitam e pressionam [Entrar] novamente, você verá instantaneamente algo assim:

Agora vamos criar um banco de dados chamado «webchatdb":
CREATE DATABASE webchatdb;

Observe o ponto-e-vírgula «;»No final da linha.

Pronto, você já criou o banco de dados, agora vamos criar o usuário «usuário de chat da web«Com a senha«senhadelputowebchat":

CREATE USER 'webchatuser'@'localhost' IDENTIFIED BY 'passworddelputowebchat';

Agora a mágica ... vamos dar todos os privilégios (ler e escrever) para usuário de chat da web SOMENTE no banco de dados webchatdb:

GRANT ALL PRIVILEGES ON webchatdb.* TO 'webchatuser'@'localhost' WITH GRANT OPTION;

E pronto, o usuário já tem as permissões nesse banco de dados ... agora só falta atualizar as permissões para o MySQL, ou seja, diga ao MySQL para reler os privilégios dos usuários porque acabamos de fazer uma alteração neles:

FLUSH PRIVILEGES ;

Deixo uma captura de tela:

E isso foi tudo. Fazendo isso para cada aplicativo da web que usamos, garantimos que caso eles consigam violar um desses aplicativos da web, os outros estarão seguros (pelo menos do ponto de vista do MySQL)

O que é uma boa prática? 😉

Espero que tenha sido tão útil para você quanto para mim, pois tentei explicá-lo da forma mais simples que pude.

lembranças


Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: Miguel Ángel Gatón
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.

  1.   Martin dito

    Bom post KZKG, se fosse no forum eu pediria um sticky!

    1.    KZKG ^ Gaara dito

      obrigado

      1.    Cuba Vermelho dito

        A senha que você colocou para o webchat é boa, outra coisa que tem a ver com o mysql é o uso da memória dele

  2.   Hyuuga_Neji dito

    Hehehe, obrigado por me lembrar dos comandos do MySQL. Agora vamos ver se "coloquei alguma segurança" no banco de dados do servidor do World of Warcraft que tenho na minha LAN.

  3.   sieg84 dito

    meu conhecimento sobre isso é nulo, mas é quase o mesmo para quando uso o MySQL para Amarok?
    CRIAR BANCO DE DADOS amarokdb;
    CONCEDE TODOS OS PRIVILÉGIOS NO amarokdb. * PARA 'amarokuser' IDENTIFICADO POR 'senha'; FLUSH PRIVILEGES;

    1.    KZKG ^ Gaara dito

      Eu não uso o Amarok há muito, muito tempo, mas se você usa um banco de dados que é o MySQL, em teoria deveria funcionar assim também.

  4.   Carlos André Restrepo dito

    Olá, seria bom se você criasse uma entrada para segurança contra servidores web no Linux, muitos deles não possuem a segurança adequada e o administrador do mesmo não é propriamente um especialista, eles apenas facilitam as coisas, por exemplo o uso de O link simbólico nos servidores permite a leitura dos arquivos de configuração de outras contas no mesmo servidor que muitos administradores desconhecem e é por isso que as defaces do site proliferam

    lembranças

    1.    KZKG ^ Gaara dito

      Olá,
      Bem vindo ao site 🙂

      Na verdade não me considero um especialista no assunto, mas tentarei contribuir com o pouco conhecimento que adquiri ao longo dos anos 🙂

      Outra coisa que poucos administradores de rede fazem, é dar privilégios a sites com apache individualmente, ou seja, o usuário e grupo www-data (ou similar), que é um diferente para cada site, e por sua vez gaiola cada um destes .

      lembranças

  5.   hackloper775 dito

    Boa dica

    lembranças

    1.    KZKG ^ Gaara dito

      Obrigado

  6.   nano dito

    ODEIO a aparência do seu terminal, as letras de fundo me tiram da concentração. Você é um xD maluco

    Fora isso, é interessante porque já vi casos patéticos de interrupções de serviço nessas coisas.

    Agora, não só depende disso, a segurança está em como o banco de dados foi construído, explicou-me um professor, mas ainda não estou muito imerso no banco de dados ... devemos mexer com MongoDB = D um desses dias

  7.   carlos coronel dito

    só isso aconteceu comigo hoje com meu servidor alugado

    Segui seus passos, entrei no cpanel e procurei o banco de dados MYSQL e ele me diz que está fora de serviço.

    Não sei como entrar agora com o usuário root
    Sou um neófito nisso, mas lendo aqui você aprende muito, espero que me oriente para acessar

    1.    KZKG ^ Gaara dito

      Olá 🙂
      O que você tem é um Hosting (SharedHosting) ou um VPS (servidor virtual)?

      Se você tem um Hosting e não um VPS, deve verificar se o seu Hosting tem acesso SSH (entre em contato com o suporte técnico da empresa que vendeu a hospedagem e pergunte como acessar via SSH), depois de entrar por meio de SSH, o usuário NÃO será root, mas você deve usar o usuário que inseriu quando instalou o aplicativo da web.

      Na verdade o seu é um tópico complicado, porque as variantes e possibilidades são muuuuitas, recomendo que você abra um novo tópico em nosso fórum, lá será mais confortável ajudá-lo - » http://foro.desdelinux.net

      Saudações 😀

  8.   bossbrondem dito

    bom,

    Eu entendo que é uma boa prática não conceder todos os privilégios a qualquer usuário, exceto root. No entanto, desde que instalei o phpmyadmin, um novo usuário "phpmyadmin" foi criado com todos os privilégios. Parece lógico que seja esse o caso, já que se trata apenas de uma versão gráfica para gerenciar os bancos de dados em MySQL. De qualquer forma, gostaria de ter certeza se está tudo bem ou se devo fazer alguma modificação nos privilégios do usuário "phpmyadmin".

    Saudações e obrigado!

  9.   Emmanuel dito

    Excelente…
    Eu sou daqueles que fazem tudo com root, mas você abriu meus olhos amigo ..
    Muito obrigado…