MySQL er verdens mest populære open source-databasesystem og MariaDB (en gaffel af MySQL) er verdens hurtigst voksende open source-databasesystem. Efter installation af MySQL-serveren er den usikker i sin standardkonfiguration, og sikring af den er en af de væsentlige opgaver i generel databasestyring.
Dette vil bidrage til at hærde og booste den overordnede Linux-serversikkerhed, da angribere altid scanner sårbarheder i enhver del af et system, og databaser har tidligere været vigtige målområder. Et almindeligt eksempel er brute-forcing af root-adgangskoden til MySQL-databasen.
I denne guide vil vi forklare nyttige MySQL/MariaDB bedste praksis for sikkerhed for Linux.
1. Sikker MySQL-installation
Dette er det første anbefalede trin efter installation af MySQL-serveren til at sikre databaseserveren. Dette script gør det lettere at forbedre sikkerheden på din MySQL-server ved at bede dig om at:
- indstil en adgangskode til root-kontoen, hvis du ikke indstillede den under installationen.
- deaktiver eksternt root-brugerlogin ved at fjerne root-konti, der er tilgængelige uden for den lokale vært.
- fjern anonyme brugerkonti og testdatabase, som som standard kan tilgås af alle brugere, også anonyme brugere.
# mysql_secure_installation
Når du har kørt det, skal du indstille root-adgangskoden og besvare rækken af spørgsmål ved at indtaste [Yes/Y ] og tryk på [Enter] .
2. Bind databaseserver til Loopback-adresse
Denne konfiguration vil begrænse adgangen fra fjernmaskiner, den fortæller MySQL-serveren kun at acceptere forbindelser inde fra den lokale vært. Du kan indstille det i hovedkonfigurationsfilen.
# vi /etc/my.cnf [RHEL/CentOS] # vi /etc/mysql/my.conf [Debian/Ubuntu] OR # vi /etc/mysql/mysql.conf.d/mysqld.cnf [Debian/Ubuntu]
Tilføj følgende linje nedenfor under [mysqld]
afsnit.
bind-address = 127.0.0.1
3. Deaktiver LOCAL INFILE i MySQL
Som en del af sikkerhedshærdningen skal du deaktivere local_infile for at forhindre adgang til det underliggende filsystem fra MySQL ved hjælp af følgende direktiv under [mysqld]
afsnit.
local-infile=0
4. Skift MYSQL-standardport
Porten variabel indstiller MySQL-portnummeret, der skal bruges til at lytte på TCP/IP-forbindelser. Standardportnummeret er 3306 men du kan ændre det under [mysqld] sektion som vist.
Port=5000
5. Aktiver MySQL-logning
Logfiler er en af de bedste måder at forstå, hvad der sker på en server, i tilfælde af angreb kan du nemt se alle indtrængningsrelaterede aktiviteter fra logfiler. Du kan aktivere MySQL-logning ved at tilføje følgende variabel under [mysqld]
afsnit.
log=/var/log/mysql.log
6. Indstil passende tilladelse på MySQL-filer
Sørg for, at du har indstillet passende tilladelser for alle mysql-serverfiler og datamapper. /etc/my.conf fil bør kun kunne skrives til root. Dette blokerer andre brugere i at ændre databaseserverkonfigurationer.
# chmod 644 /etc/my.cnf
7. Slet MySQL Shell-historik
Alle kommandoer, du udfører på MySQL-shell, gemmes af mysql-klienten i en historikfil:~/.mysql_history . Dette kan være farligt, for for enhver brugerkonti, du vil oprette, vil alle brugernavne og adgangskoder, der er skrevet på skallen, blive registreret i historiefilen.
# cat /dev/null > ~/.mysql_history
8. Kør ikke MySQL-kommandoer fra kommandolinje
Som du allerede ved, er alle kommandoer, du skriver på terminalen, gemt i en historiefil, afhængigt af den skal, du bruger (f.eks. ~/.bash_history til bash). En angriber, der formår at få adgang til denne historiefil, kan nemt se alle adgangskoder, der er registreret der.
Det anbefales kraftigt ikke at skrive adgangskoder på kommandolinjen, sådan noget som dette:
# mysql -u root -ppassword_
Når du tjekker den sidste sektion af kommandohistorikfilen, vil du se adgangskoden skrevet ovenfor.
# history
Den passende måde at forbinde MySQL på er.
# mysql -u root -p Enter password:
9. Definer applikationsspecifikke databasebrugere
For hver applikation, der kører på serveren, skal du kun give adgang til en bruger, der er ansvarlig for en database for en given applikation. For eksempel, hvis du har et wordpress-websted, skal du oprette en specifik bruger til wordpress-webstedets database som følger.
# mysql -u root -p MariaDB [(none)]> CREATE DATABASE osclass_db; MariaDB [(none)]> CREATE USER 'osclassdmin'@'localhost' IDENTIFIED BY '[email protected]%!2'; MariaDB [(none)]> GRANT ALL PRIVILEGES ON osclass_db.* TO 'osclassdmin'@'localhost'; MariaDB [(none)]> FLUSH PRIVILEGES; MariaDB [(none)]> exit
og husk altid at fjerne brugerkonti, der ikke længere administrerer nogen applikationsdatabase på serveren.
10. Brug yderligere sikkerhedsplugins og biblioteker
MySQL indeholder en række sikkerhedsplugins til:autentificering af klienters forsøg på at oprette forbindelse til mysql-serveren, validering af adgangskode og sikring af opbevaring for følsomme oplysninger, som alle er tilgængelige i den gratis version.
Du kan finde mere her:https://dev.mysql.com/doc/refman/5.7/en/security-plugins.html
11. Skift MySQL-adgangskoder regelmæssigt
Dette er et almindeligt råd om information/applikation/systemsikkerhed. Hvor ofte du gør dette vil helt afhænge af din interne sikkerhedspolitik. Det kan dog forhindre "snoopere", som måske har sporet din aktivitet over en længere periode, i at få adgang til din mysql-server.
MariaDB [(none)]> USE mysql; MariaDB [(none)]> UPDATE user SET password=PASSWORD('YourPasswordHere') WHERE User='root' AND Host = 'localhost'; MariaDB [(none)]> FLUSH PRIVILEGES;
12. Opdater MySQL-serverpakken regelmæssigt
Det anbefales stærkt at opgradere mysql/mariadb-pakker regelmæssigt for at holde trit med sikkerhedsopdateringer og fejlrettelser fra leverandørens lager. Normalt er pakker i standardoperativsystemlagre forældede.
# yum update # apt update
Efter at have foretaget ændringer på mysql/mariadb-serveren, genstart altid tjenesten.
# systemctl restart mariadb #RHEL/CentOS # systemctl restart mysql #Debian/Ubuntu
Det er alt! Vi elsker at høre fra dig via kommentarformularen nedenfor. Del med os eventuelle MySQL/MariaDB-sikkerhedstip, der mangler på listen ovenfor.