sql >> Database teknologi >  >> RDS >> Mysql

Sikring af MySQL-server

MySQL

MySQL er et open source relationsdatabasestyringssystem. Denne vejledning viser dig, hvordan du sikrer og reviderer en MySQL-server. Navnet er en kombination af "My", navnet på medstifter Michael Widenius' datter, og "SQL", forkortelsen for Structured Query Language.

Før du begynder

  1. Sørg for, at du har fulgt vejledningerne Kom godt i gang og Sikring af din server. Sørg for, at Linodes værtsnavn er indstillet.

    Tjek din Linodes værtsnavn. Den første kommando skal vise dit korte værtsnavn, og den anden skal vise dit fuldt kvalificerede domænenavn (FQDN).

    hostname
    hostname -f
    
    Bemærk Hvis du har et registreret domænenavn til dit websted, skal du tilføje domænet til Linode-serveren, hvor du planlægger at installere LAMP-stakken. Hvis du ikke har et registreret domænenavn, skal du erstatte example.com med IP-adressen på Linode-serveren i følgende instruktioner.
  2. Opdater dit system:

    sudo yum update
    
    Bemærk Denne guide er skrevet til en ikke-rootbruger. Kommandoer, der kræver forhøjede privilegier, er præfikset med sudo . Hvis du ikke er bekendt med sudo kommando, kan du tjekke vores bruger- og gruppervejledning.
  3. For at sikre og revidere MySQL skal du have en Linux-server med MySQL Server tjenester kører. For information om installation af MySQL, se venligst Installer MySQL

    Bemærk Instruktionerne i denne vejledning er baseret på Ubuntu 18.04, selvom alle trin er distributionsagnostiske med undtagelse af pakkenavne og pakkeadministratorer.

Brug af Secure MySQL Installer

Mysql-server-pakken leveres prækonfigureret med et hjælpeprogram kaldet mysql_secure_installation der bruges til at konfigurere et sikkert udgangspunkt for MySQL-serveren ved at slette anonyme brugere og give dig mulighed for at angive den ønskede adgangskodestyrkepolitik.

mysql_secure_installation er et shell-script tilgængeligt på Unix-systemer og giver dig mulighed for at sikre MySQL-installationen ved at give dig mulighed for at:

  • indstil en adgangskode til root-konti
  • fjern root-konti, der er tilgængelige uden for den lokale vært
  • fjern anonyme brugerkonti
  • fjern testdatabasen, som som standard kan tilgås af anonyme brugere

Start sikkerhedsprocessen ved at køre dette værktøj umiddelbart efter installation af mysql-server.

  1. Start værktøjet ved at køre følgende kommando:

     sudo mysql_secure_installation
    
  2. Opsætningsprocessen begynder, og værktøjet beder dig angive, om du vil aktivere plugin'et for validering af adgangskode, der bruges til at teste adgangskoder og forbedre sikkerheden. Det anbefales at aktivere denne funktion.

    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 aktiveret adgangskode-pluginnet, skal du angive din adgangskodevalideringspolitik baseret på styrken af ​​de ønskede adgangskoder.

    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. Fjern anonyme brugere. Dette er en vigtig sikkerhedsmulighed, da angribere kan udnytte anonyme brugere til at få adgang til databaseserveren.

    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. Deaktiver root-login eksternt, dette er en ekstremt vigtig sikkerhedskonfiguration, da den forhindrer angribere i at fjerngodkende til MySQL-serveren som root eller udføre brute-force-angreb med adgangskode. Fjerngodkendelse kan også deaktiveres fuldstændigt, vi vil se på, hvordan man gør det i næste afsnit.

    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. Slet testdatabasen oprettet under mysql-server installationsprocessen, denne database er oprettet til testformål, som en god praksis anbefales det at slette denne database.

    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. Genindlæs privilegietabellerne for at sikre, at alle ændringer anvendes og er 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 sikker base at arbejde med, i næste afsnit finder du instruktionerne til at ændre standard rod brugernavn og adgangskode.

Ændring af "root"-brugeren

Som standard leveres MySQL-serveren foruddefineret med en superuser/admin konto, der har adgang til alle privilegier og funktionalitet for databaserne og databasebrugerne. I betragtning af denne uovertrufne kontrol og adgang er det vigtigt at låse og sikre root-kontoen, da angribere normalt målretter mod root-kontoen på en MySQL-server, fordi den har potentialet til at give fuldstændig adgang til databaserne og databasebrugerne.

Det første trin i at sikre "root"-brugeren er at ændre brugernavnet fra root til noget mere ubøjelig, er målet at gøre root-brugernavnet lige så svært at gætte eller brute-force for angribere. Herefter anbefales det også at ændre root kontoadgangskode regelmæssigt som en god praksis.

  1. Log ind på MySQL-serveren med følgende kommando:

     sudo mysql -u root
    
  2. Skift "root"-kontoens brugernavn ved at køre følgende forespørgsel:

     rename user 'root'@'localhost' to '<new-username>'@'localhost';
    
  3. Skift root kontoadgangskode til noget stærkt og svært at gætte, anbefales det at bruge en adgangskodegenerator. Hvis du aktiverede plugin'et Bekræft adgangskode under den sikre installationsproces, skal du angive en adgangskode, der opfylder politikkens krav med hensyn til styrke.

     ALTER USER 'example_username'@'localhost' IDENTIFIED BY '<new-password>';
    
  4. Genindlæs privilegietabellen for at sikre, at alle ændringer er gemt og aktiveret ved at køre følgende kommando:

     flush privileges;
    
  5. For at bekræfte, om root brugernavn og adgangskode ændres, kør følgende forespørgsel:

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

Dette viser brugertabellerne, der er gemt under mysql-databasen og bør afspejle de ændringer, der er foretaget.

+------------------+-----------+-------------------------------------------+
| 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)

Oprettelse af en ny bruger

En god sikkerhedspraksis er begrebet adskillelse efter pligter eller rolle. Det betyder, at for hver database eller applikation, der bruger databasen, skal du oprette en ny bruger, der har CRUD-tilladelser til den pågældende database. Dette sikrer, at kun én bruger til enhver tid har adgang til én database ad gangen, og brugere kan ikke få adgang til andre databaser.

  1. Opret en Test database ved at køre følgende forespørgsel i MYSQL:

     create database Test;
    
  2. Opret den bruger, der er ansvarlig for at administrere denne testdatabase:

     CREATE USER '<username>'@'localhost' IDENTIFIED BY '<password>';
    
  3. Tildel de relevante CRUD-tilladelser til brugeren for Test database:

     GRANT SELECT,UPDATE,DELETE ON Test.* TO '<username>'@'localhost';
    
  4. Det er vigtigt at bemærke, at disse privilegier kun gælder for Test database, hvis du opretter en bruger til et program såsom phpMyAdmin , skal du give brugeren root tilladelser.

  5. Hvis du beslutter dig for at slette en bestemt bruger, skal du køre følgende forespørgsel:

     drop user '<username>'@'localhost';
    
  6. Genindlæs privilegietabellen for at sikre, at de foretagne ændringer anvendes og aktiveres ved at køre følgende forespørgsel:

     flush privileges;
    

Tilpasset MySQL-konfiguration

Du kan nu konfigurere en sikker brugerdefineret konfiguration til MySQL, der giver yderligere sikkerhedskonfigurationsmuligheder.

  1. Den globale MySQL-konfigurationsfil er placeret i /etc/mysql/my.cnf , skal alle brugerdefinerede globale konfigurationer opsættes i konfigurationsfilen.

  2. Den brugerdefinerede konfiguration skal specificeres for mysqld (MySQL-dæmonen), de muligheder, der vises i billedet, er brugerdefinerede sikkerhedskonfigurationer.

  3. Efter at have tilføjet de brugerdefinerede konfigurationer, skal du genstarte mysql service for at sikre, at alle ændringer anvendes.

     systemctl restart mysql
    

Revision af MySQL-sikkerhed

Du kan nu kontrollere sikkerheden på MySQL-serveren ved at bruge et værktøj kaldet MySAT. MySAT udfører adskillige tests for at analysere databasekonfigurationer og sikkerhedspolitikker. MySAT hjælper med at vurdere og dermed øge MySQL-databasesikkerheden. MySAT er et simpelt SQL-script, det er nemt at forstå og nemt at vedligeholde. MySAT-resultater udlæses i HTML-format.

  1. Klon MySAT Github-lageret ved at køre følgende kommando:

     git clone https://github.com/meob/MySAT.git
    
  2. Efter at have klonet biblioteket, skal du navigere ind i MySAT-biblioteket, hvor mysat.sql filen er placeret, og den bruges sammen med MySQL-serveren til at udlæse resultaterne til en MySAT.htm fil.

  3. Overvåg sikkerheden ved at køre følgende kommando:

     mysql --user=<root-user> -p<password> --skip-column-names -f < mysat.sql > MySAT.htm
    
  4. Som angivet kræver MySAT root-adgang til MySQL for at køre de påkrævede tests, efter at have kørt kommandoen, genereres MySAT.htm-filen, kopier MySAT.htm-filen og mysat.css fil til en Apache- eller NGINX-server, eller download dem lokalt med scp , så du kan analysere resultaterne af revisionen.

  5. Resultaterne er formateret i et letlæseligt og forståeligt format, hvor konfigurationer kontrolleres og resultater farvekodes baseret på deres aktuelle konfiguration og hvordan det påvirker sikkerheden på mysql-serveren. For eksempel er en mislykket konfigurationskontrol farvekodet i orange, og en bestået kontrol er farvekodet med grøn.

  6. Revisionsrapporten afslører, hvilke konfigurationer der skal ændres eller modificeres, og giver dig et topniveaubillede af den overordnede sikkerhed på MySQL-serveren.


  1. PostgreSQL 12:Implementering af K-Nearest Neighbor Space Partitioned Generalized Search Tree Indexes

  2. Forbindelseshåndtering og drosling med ProxySQL

  3. Tablix:Gentag overskriftsrækker på hver side, der ikke virker - Report Builder 3.0

  4. Oprettelse af Oracle Sequence Trigger