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
-
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. -
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 medsudo
kommando, kan du tjekke vores bruger- og gruppervejledning. -
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 MySQLBemæ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.
-
Start værktøjet ved at køre følgende kommando:
sudo mysql_secure_installation
-
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
-
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
-
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
-
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
-
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
-
Genindlæs privilegietabellerne for at sikre, at alle ændringer anvendes og er i kraft.
Du har nu en sikker base at arbejde med, i næste afsnit finder du instruktionerne til at ændre standard rod brugernavn og adgangskode.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!
Æ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.
-
Log ind på MySQL-serveren med følgende kommando:
sudo mysql -u root
-
Skift "root"-kontoens brugernavn ved at køre følgende forespørgsel:
rename user 'root'@'localhost' to '<new-username>'@'localhost';
-
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>';
-
Genindlæs privilegietabellen for at sikre, at alle ændringer er gemt og aktiveret ved at køre følgende kommando:
flush privileges;
-
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.
-
Opret en
Test
database ved at køre følgende forespørgsel i MYSQL:create database Test;
-
Opret den bruger, der er ansvarlig for at administrere denne testdatabase:
CREATE USER '<username>'@'localhost' IDENTIFIED BY '<password>';
-
Tildel de relevante CRUD-tilladelser til brugeren for
Test
database:GRANT SELECT,UPDATE,DELETE ON Test.* TO '<username>'@'localhost';
-
Det er vigtigt at bemærke, at disse privilegier kun gælder for
Test
database, hvis du opretter en bruger til et program såsomphpMyAdmin
, skal du give brugerenroot
tilladelser. -
Hvis du beslutter dig for at slette en bestemt bruger, skal du køre følgende forespørgsel:
drop user '<username>'@'localhost';
-
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.
-
Den globale MySQL-konfigurationsfil er placeret i
/etc/mysql/my.cnf
, skal alle brugerdefinerede globale konfigurationer opsættes i konfigurationsfilen. -
Den brugerdefinerede konfiguration skal specificeres for mysqld (MySQL-dæmonen), de muligheder, der vises i billedet, er brugerdefinerede sikkerhedskonfigurationer.
-
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.
-
Klon MySAT Github-lageret ved at køre følgende kommando:
git clone https://github.com/meob/MySAT.git
-
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 enMySAT.htm
fil. -
Overvåg sikkerheden ved at køre følgende kommando:
mysql --user=<root-user> -p<password> --skip-column-names -f < mysat.sql > MySAT.htm
-
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 medscp
, så du kan analysere resultaterne af revisionen. -
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.
-
Revisionsrapporten afslører, hvilke konfigurationer der skal ændres eller modificeres, og giver dig et topniveaubillede af den overordnede sikkerhed på MySQL-serveren.