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
-
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. -
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 medsudo
kommandot kan du läsa vår guide för användare och grupper. -
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 MySQLObs 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.
-
Starta verktyget genom att köra följande kommando:
sudo mysql_secure_installation
-
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
-
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
-
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
-
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
-
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
-
Ladda om behörighetstabellerna för att säkerställa att alla ändringar tillämpas och är i kraft.
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.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!
Ä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.
-
Logga in på MySQL-servern med följande kommando:
sudo mysql -u root
-
Ändra "root"-kontots användarnamn genom att köra följande fråga:
rename user 'root'@'localhost' to '<new-username>'@'localhost';
-
Ä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>';
-
Ladda om privilegietabellen för att säkerställa att alla ändringar sparas och aktiveras genom att köra följande kommando:
flush privileges;
-
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.
-
Skapa ett
Test
databas genom att köra följande fråga i MYSQL:create database Test;
-
Skapa användaren som ansvarar för att hantera denna testdatabas:
CREATE USER '<username>'@'localhost' IDENTIFIED BY '<password>';
-
Tilldela lämpliga CRUD-behörigheter till användaren för
Test
databas:GRANT SELECT,UPDATE,DELETE ON Test.* TO '<username>'@'localhost';
-
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 somphpMyAdmin
måste du ge användarenroot
behörigheter. -
Om du bestämmer dig för att ta bort en viss användare, kör följande fråga:
drop user '<username>'@'localhost';
-
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.
-
Den globala MySQL-konfigurationsfilen finns i
/etc/mysql/my.cnf
, ska alla anpassade globala konfigurationer ställas in i konfigurationsfilen. -
Den anpassade konfigurationen måste specificeras för mysqld (MySQL-demon), alternativen som visas i bilden är anpassade säkerhetskonfigurationer.
-
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.
-
Klona MySAT Github-förvaret genom att köra följande kommando:
git clone https://github.com/meob/MySAT.git
-
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 enMySAT.htm
fil. -
Granska säkerheten genom att köra följande kommando:
mysql --user=<root-user> -p<password> --skip-column-names -f < mysat.sql > MySAT.htm
-
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 medscp
, så att du kan analysera resultatet av revisionen. -
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.
-
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.