sql >> Databasteknik >  >> RDS >> Mysql

Säkra MySQL Server

MySQL

MySQL är ett relationsdatabashanteringssystem med öppen källkod. Den här guiden visar dig hur du säkrar och granskar en MySQL-server. Namnet är en kombination av "My", namnet på medgrundaren Michael Widenius dotter, och "SQL", förkortningen för Structured Query Language.

Innan du börjar

  1. Se till att du har följt guiderna Komma igång och Säkra din server. Se till att Linodes värdnamn är inställt.

    Kontrollera din Linodes värdnamn. Det första kommandot ska visa ditt korta värdnamn och det andra ska visa ditt fullständiga domännamn (FQDN).

    hostname
    hostname -f
    
    Obs Om du har ett registrerat domännamn för din webbplats, lägg till domänen till Linode-servern där du planerar att installera LAMP-stacken. Om du inte har ett registrerat domännamn, ersätt sedan example.com med IP-adressen för Linode-servern i följande instruktioner.
  2. Uppdatera ditt system:

    sudo yum update
    
    Obs Den här guiden är skriven för en icke-rootanvändare. Kommandon som kräver förhöjda privilegier har prefixet sudo . Om du inte är bekant med sudo kommandot kan du läsa vår guide för användare och grupper.
  3. För att säkra och granska MySQL måste du ha en Linux-server med MySQL Server tjänster igång. För information om hur du installerar MySQL, se Installera MySQL

    Obs Instruktionerna i den här guiden är baserade på Ubuntu 18.04, även om alla steg är distributionsagnostiska med undantag för paketnamn och pakethanterare.

Använda Secure MySQL Installer

Mysql-serverpaketet levereras förkonfigurerat med ett verktyg som heter mysql_secure_installation som används för att skapa en säker startpunkt för MySQL-servern, genom att radera anonyma användare och låta dig ange önskad policy för lösenordsstyrka.

mysql_secure_installation är ett skalskript tillgängligt på Unix-system och gör att du kan säkra MySQL-installationen genom att göra det möjligt för dig att:

  • ställ in ett lösenord för root-konton
  • ta bort root-konton som är tillgängliga utanför den lokala värden
  • ta bort anonyma användarkonton
  • ta bort testdatabasen, som som standard kan nås av anonyma användare

Börja säkerhetsprocessen genom att köra det här verktyget omedelbart efter installation av mysql-server.

  1. Starta verktyget genom att köra följande kommando:

     sudo mysql_secure_installation
    
  2. Installationsprocessen börjar och verktyget uppmanar dig att ange om du vill aktivera insticksprogrammet validera lösenord som används för att testa lösenord och förbättra säkerheten. Det rekommenderas att aktivera den här funktionen.

    Securing the MySQL server deployment.
    
    Connecting to MySQL using a blank password.
    
    VALIDATE PASSWORD PLUGIN can be used to test passwords
    and improve security. It checks the strength of password
    and allows the users to set only those passwords which are
    secure enough. Would you like to setup VALIDATE PASSWORD plugin?
    
    Press y|Y for Yes, any other key for No: y

  3. När du har aktiverat lösenordspluginen anger du din policy för lösenordsvalidering baserat på styrkan på de önskade lösenorden.

    There are three levels of password validation policy:
    
    LOW    Length >= 8
    MEDIUM Length >= 8, numeric, mixed case, and special characters
    STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file
    
    Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2
    Please set the password for root here.
    
    New password:
    
    Re-enter new password:
    
    Estimated strength of the password: 100
    Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y

  4. Ta bort anonyma användare. Detta är ett viktigt säkerhetsalternativ eftersom angripare kan utnyttja anonyma användare för att få tillgång till databasservern.

    By default, a MySQL installation has an anonymous user,
    allowing anyone to log into MySQL without having to have
    a user account created for them. This is intended only for
    testing, and to make the installation go a bit smoother.
    You should remove them before moving into a production
    environment.
    
    Remove anonymous users? (Press y|Y for Yes, any other key for No) : y

  5. Inaktivera rotinloggning på distans, detta är en extremt viktig säkerhetskonfiguration eftersom den förhindrar angripare från att fjärrautentisera till MySQL-servern som root eller utföra brute-force-attacker med lösenord. Fjärrautentisering kan också inaktiveras helt, vi kommer att ta en titt på hur man gör det i nästa avsnitt.

    Normally, root should only be allowed to connect from
    'localhost'. This ensures that someone cannot guess at
    the root password from the network.
    
    Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y

  6. Ta bort testdatabasen som skapades under mysql-serverinstallationsprocessen, denna databas skapas för teständamål, som en god praxis rekommenderas att ta bort denna databas.

    By default, MySQL comes with a database named 'test' that
    anyone can access. This is also intended only for testing,
    and should be removed before moving into a production
    environment.
    
    
    Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y

  7. Ladda om behörighetstabellerna för att säkerställa att alla ändringar tillämpas och är i kraft.

    Reloading the privilege tables will ensure that all changes
    made so far will take effect immediately.
    
    Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
    Success.
    
    All done!
    Du har nu en säker bas att arbeta med, i nästa avsnitt hittar du instruktionerna för att ändra standard rot användarnamn och lösenord.

Ändra "root"-användaren

Som standard levereras MySQL-servern fördefinierad med en superuser/admin konto som har tillgång till alla privilegier och funktioner för databaserna och databasanvändarna. Med tanke på denna oöverträffade kontroll och åtkomst är det viktigt att låsa och säkra root-kontot eftersom angripare vanligtvis riktar in root-kontot på en MySQL-server eftersom det har potential att ge fullständig åtkomst över databaserna och databasanvändarna.

Det första steget för att säkra "root"-användaren är att ändra användarnamnet från root till något mer orubbligt, är målet att göra root-användarnamnet lika svårt att gissa eller att brute-force för angripare. Därefter rekommenderas det också att ändra root kontolösenord regelbundet som en god praxis.

  1. Logga in på MySQL-servern med följande kommando:

     sudo mysql -u root
    
  2. Ändra "root"-kontots användarnamn genom att köra följande fråga:

     rename user 'root'@'localhost' to '<new-username>'@'localhost';
    
  3. Ändra root kontolösenord till något starkt och svårt att gissa, det rekommenderas att använda en lösenordsgenerator. Om du aktiverade insticksprogrammet verifiera lösenord under den säkra installationsprocessen, måste du ange ett lösenord som uppfyller policykraven när det gäller styrka.

     ALTER USER 'example_username'@'localhost' IDENTIFIED BY '<new-password>';
    
  4. Ladda om privilegietabellen för att säkerställa att alla ändringar sparas och aktiveras genom att köra följande kommando:

     flush privileges;
    
  5. För att bekräfta om root användarnamn och lösenord ändras, kör följande fråga:

     use mysql;
     select user,host,authentication_string from mysql.user;
    

Detta visar användartabellerna lagrade under mysql-databasen och bör återspegla de ändringar som gjorts.

+------------------+-----------+-------------------------------------------+
| user             | host      | authentication_string                     |
+------------------+-----------+-------------------------------------------+
| example_user     | localhost | *A2550B00C6DF81DACE33551E8293462F6CAE33DA |
| mysql.session    | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys        | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| debian-sys-maint | localhost | *241DC5A20F017D55EE82E46E7996784ED4A5CD8A |
+------------------+-----------+-------------------------------------------+
4 rows in set (0.00 sec)

Skapa en ny användare

En god säkerhetspraxis är begreppet segregering efter plikter eller roll. Detta innebär att för varje databas eller applikation som använder databasen, skapa en ny användare som har CRUD-behörigheter för just den databasen. Detta säkerställer att när som helst bara en användare har åtkomst till en databas åt gången och användare kan inte komma åt andra databaser.

  1. Skapa ett Test databas genom att köra följande fråga i MYSQL:

     create database Test;
    
  2. Skapa användaren som ansvarar för att hantera denna testdatabas:

     CREATE USER '<username>'@'localhost' IDENTIFIED BY '<password>';
    
  3. Tilldela lämpliga CRUD-behörigheter till användaren för Test databas:

     GRANT SELECT,UPDATE,DELETE ON Test.* TO '<username>'@'localhost';
    
  4. Det är viktigt att notera att dessa privilegier endast gäller för Test databas, om du skapar en användare för ett program som phpMyAdmin måste du ge användaren root behörigheter.

  5. Om du bestämmer dig för att ta bort en viss användare, kör följande fråga:

     drop user '<username>'@'localhost';
    
  6. Ladda om behörighetstabellen för att säkerställa att ändringarna tillämpas och aktiveras genom att köra följande fråga:

     flush privileges;
    

Anpassad MySQL-konfiguration

Du kan nu ställa in en säker anpassad konfiguration för MySQL som ger ytterligare säkerhetskonfigurationsalternativ.

  1. Den globala MySQL-konfigurationsfilen finns i /etc/mysql/my.cnf , ska alla anpassade globala konfigurationer ställas in i konfigurationsfilen.

  2. Den anpassade konfigurationen måste specificeras för mysqld (MySQL-demon), alternativen som visas i bilden är anpassade säkerhetskonfigurationer.

  3. När du har lagt till de anpassade konfigurationerna måste du starta om mysql tjänst för att säkerställa att alla ändringar tillämpas.

     systemctl restart mysql
    

Revision av MySQL-säkerhet

Du kan nu granska säkerheten för MySQL-servern genom att använda ett verktyg som heter MySAT. MySAT utför flera tester för att analysera databaskonfigurationer och säkerhetspolicyer. MySAT hjälper till att bedöma och därmed öka MySQL-databassäkerheten. MySAT är ett enkelt SQL-skript, det är lätt att förstå och lätt att underhålla. MySAT-resultat matas ut i HTML-format.

  1. Klona MySAT Github-förvaret genom att köra följande kommando:

     git clone https://github.com/meob/MySAT.git
    
  2. Efter att ha klonat katalogen, navigera till MySAT-katalogen, där mysat.sql filen finns och den används tillsammans med MySQL-servern för att mata ut resultaten till en MySAT.htm fil.

  3. Granska säkerheten genom att köra följande kommando:

     mysql --user=<root-user> -p<password> --skip-column-names -f < mysat.sql > MySAT.htm
    
  4. Som nämnts kräver MySAT root-åtkomst till MySQL för att köra de nödvändiga testerna, efter att ha kört kommandot genereras MySAT.htm-filen, kopiera MySAT.htm-filen och mysat.css fil till en Apache- eller NGINX-server, eller ladda ner dem lokalt med scp , så att du kan analysera resultatet av revisionen.

  5. Resultaten är formaterade i ett enkelt att läsa och förstå format, där konfigurationer kontrolleras och resultat färgkodas baserat på deras nuvarande konfiguration och hur det påverkar säkerheten på mysql-servern. Till exempel är en misslyckad konfigurationskontroll färgkodad i orange och en godkänd kontroll är färgkodad i grönt.

  6. Granskningsrapporten avslöjar vilka konfigurationer som behöver ändras eller modifieras och ger dig en toppnivåbild av den övergripande säkerheten för MySQL-servern.


  1. Auto-e-postsystem för att skicka databassammanfattningsrapport

  2. Hur tar man bort ledande och efterföljande blanksteg i ett MySQL-fält?

  3. Varför begår SQL*Plus vid exit?

  4. De bästa verktygen med öppen källkod för MySQL- och MariaDB-migreringar