MySQL är världens mest populära databassystem med öppen källkod och MariaDB (en gaffel av MySQL) är världens snabbast växande databassystem med öppen källkod. Efter installation av MySQL-servern är den osäker i sin standardkonfiguration, och att säkra den är en av de viktigaste uppgifterna i allmän databashantering.
Detta kommer att bidra till att förstärka och öka den övergripande Linux-serversäkerheten, eftersom angripare alltid söker igenom sårbarheter i vilken del av ett system som helst, och databaser har tidigare varit viktiga målområden. Ett vanligt exempel är brute-forcing av root-lösenordet för MySQL-databasen.
I den här guiden kommer vi att förklara användbara MySQL/MariaDB bästa praxis för säkerhet för Linux.
1. Säker MySQL-installation
Detta är det första rekommenderade steget efter installation av MySQL-servern, mot att säkra databasservern. Detta skript underlättar för att förbättra säkerheten för din MySQL-server genom att be dig:
- ange ett lösenord för root-kontot, om du inte angav det under installationen.
- inaktivera fjärrinloggning för rotanvändare genom att ta bort root-konton som är tillgängliga utanför den lokala värden.
- ta bort anonyma användarkonton och testdatabas som som standard kan nås av alla användare, även anonyma användare.
# mysql_secure_installation
När du har kört det, ställ in root-lösenordet och svara på frågorna genom att ange [Yes/Y ] och tryck på [Retur] .
2. Bind databasserver till loopbackadress
Denna konfiguration kommer att begränsa åtkomst från fjärrdatorer, den talar om för MySQL-servern att endast acceptera anslutningar inifrån den lokala värden. Du kan ställa in den i huvudkonfigurationsfilen.
# vi /etc/my.cnf [RHEL/CentOS] # vi /etc/mysql/my.conf [Debian/Ubuntu] OR # vi /etc/mysql/mysql.conf.d/mysqld.cnf [Debian/Ubuntu]
Lägg till följande rad nedan under [mysqld]
avsnitt.
bind-address = 127.0.0.1
3. Inaktivera LOCAL INFILE i MySQL
Som en del av säkerhetshärdningen måste du inaktivera local_infile för att förhindra åtkomst till det underliggande filsystemet från MySQL genom att använda följande direktiv under [mysqld]
avsnitt.
local-infile=0
4. Ändra MYSQL-standardport
Porten variabel ställer in MySQL-portnumret som kommer att användas för att lyssna på TCP/IP-anslutningar. Standardportnumret är 3306 men du kan ändra det under [mysqld] avsnitt som visas.
Port=5000
5. Aktivera MySQL-loggning
Loggar är ett av de bästa sätten att förstå vad som händer på en server, vid eventuella attacker kan du enkelt se alla intrångsrelaterade aktiviteter från loggfiler. Du kan aktivera MySQL-loggning genom att lägga till följande variabel under [mysqld]
avsnitt.
log=/var/log/mysql.log
6. Ställ in lämplig behörighet för MySQL-filer
Se till att du har ställt in lämpliga behörigheter för alla mysql-serverfiler och datakataloger. /etc/my.conf filen ska bara vara skrivbar till root. Detta blockerar andra användare från att ändra databasserverkonfigurationer.
# chmod 644 /etc/my.cnf
7. Ta bort MySQL Shell History
Alla kommandon du kör på MySQL-skalet lagras av mysql-klienten i en historikfil:~/.mysql_history . Detta kan vara farligt, eftersom för alla användarkonton som du skapar kommer alla användarnamn och lösenord som skrivs på skalet att registreras i historikfilen.
# cat /dev/null > ~/.mysql_history
8. Kör inte MySQL-kommandon från kommandoraden
Som du redan vet lagras alla kommandon du skriver på terminalen i en historikfil, beroende på vilket skal du använder (till exempel ~/.bash_history för bash). En angripare som lyckas få tillgång till den här historikfilen kan enkelt se alla lösenord som registrerats där.
Det rekommenderas starkt inte att skriva lösenord på kommandoraden, ungefär så här:
# mysql -u root -ppassword_
När du kontrollerar den sista delen av kommandohistorikfilen ser du lösenordet som skrivits ovan.
# history
Det lämpliga sättet att ansluta MySQL är.
# mysql -u root -p Enter password:
9. Definiera applikationsspecifika databasanvändare
För varje applikation som körs på servern, ge endast åtkomst till en användare som är ansvarig för en databas för en given applikation. Till exempel, om du har en wordpress-webbplats, skapa en specifik användare för wordpress-webbplatsdatabasen enligt följande.
# 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
och kom ihåg att alltid ta bort användarkonton som inte längre hanterar någon applikationsdatabas på servern.
10. Använd ytterligare säkerhetsplugin-program och bibliotek
MySQL innehåller ett antal säkerhetsplugin för:autentisering av klienters försök att ansluta till mysql-servern, lösenordsvalidering och säker lagring av känslig information, som alla är tillgängliga i gratisversionen.
Du kan hitta mer här:https://dev.mysql.com/doc/refman/5.7/en/security-plugins.html
11. Byt MySQL-lösenord regelbundet
Detta är en vanlig information/applikation/systemsäkerhetsråd. Hur ofta du gör detta beror helt på din interna säkerhetspolicy. Det kan dock förhindra "snoopers" som kan ha spårat din aktivitet under en lång tidsperiod från att få åtkomst till 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. Uppdatera MySQL-serverpaketet regelbundet
Det rekommenderas starkt att uppgradera mysql/mariadb-paket regelbundet för att hålla jämna steg med säkerhetsuppdateringar och buggfixar, från leverantörens arkiv. Normalt är paket i standardlager för operativsystem föråldrade.
# yum update # apt update
Efter att ha gjort några ändringar på mysql/mariadb-servern, starta alltid om tjänsten.
# systemctl restart mariadb #RHEL/CentOS # systemctl restart mysql #Debian/Ubuntu
Det är allt! Vi älskar att höra från dig via kommentarsformuläret nedan. Dela med oss av eventuella MySQL/MariaDB-säkerhetstips som saknas i listan ovan.