MySQL
MySQL is een open-source relationeel databasebeheersysteem. Deze handleiding laat u zien hoe u een MySQL-server kunt beveiligen en controleren. De naam is een combinatie van "My", de naam van de dochter van mede-oprichter Michael Widenius, en "SQL", de afkorting voor Structured Query Language.
Voordat u begint
-
Zorg ervoor dat u de handleidingen Aan de slag en Uw server beveiligen hebt gevolgd. Zorg ervoor dat de hostnaam van de Linode is ingesteld.
Controleer de hostnaam van uw Linode. De eerste opdracht moet uw korte hostnaam tonen en de tweede uw volledig gekwalificeerde domeinnaam (FQDN).
hostname hostname -f
Opmerking Als u een geregistreerde domeinnaam voor uw website heeft, voeg dan het domein toe aan de Linode-server waarop u de LAMP-stack wilt installeren. Als je geen geregistreerde domeinnaam hebt, vervang dan
example.com
met het IP-adres van de Linode-server in de volgende instructies. -
Werk uw systeem bij:
sudo yum update
Opmerking Deze handleiding is geschreven voor een niet-rootgebruiker. Opdrachten die verhoogde bevoegdheden vereisen, worden voorafgegaan door
sudo
. Als je niet bekend bent met desudo
commando, kunt u onze handleiding voor gebruikers en groepen raadplegen. -
Om MySQL te beveiligen en te controleren, moet u een Linux-server hebben met de
. voor informatie over het installeren van MySQLMySQL Server
diensten lopen. Zie MySQL installerenOpmerking De instructies in deze handleiding zijn gebaseerd op Ubuntu 18.04, hoewel alle stappen distributie-agnostisch zijn, met uitzondering van pakketnamen en pakketbeheerders.
Het veilige MySQL-installatieprogramma gebruiken
Het mysql-server-pakket is vooraf geconfigureerd met een hulpprogramma genaamd mysql_secure_installation
dat wordt gebruikt om een veilig startpunt voor de MySQL-server in te stellen, door anonieme gebruikers te verwijderen en u het gewenste wachtwoordsterktebeleid te laten specificeren.
mysql_secure_installation
is een shellscript dat beschikbaar is op Unix-systemen en waarmee u de MySQL-installatie kunt beveiligen door:
- stel een wachtwoord in voor root-accounts
- verwijder root-accounts die toegankelijk zijn van buiten de lokale host
- verwijder accounts van anonieme gebruikers
- verwijder de testdatabase, die standaard toegankelijk is voor anonieme gebruikers
Start het beveiligingsproces door dit hulpprogramma onmiddellijk na het installeren van mysql-server uit te voeren.
-
Roep het hulpprogramma op door de volgende opdracht uit te voeren:
sudo mysql_secure_installation
-
Het installatieproces begint en het hulpprogramma vraagt u om op te geven of u de plug-in voor het valideren van wachtwoorden wilt inschakelen die wordt gebruikt om wachtwoorden te testen en de beveiliging te verbeteren. Het wordt aanbevolen om deze functie in te schakelen.
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
-
Nadat u de wachtwoord-plug-in heeft ingeschakeld, specificeert u uw wachtwoordvalidatiebeleid op basis van de sterkte van de gewenste wachtwoorden.
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
-
Anonieme gebruikers verwijderen. Dit is een belangrijke beveiligingsoptie omdat aanvallers anonieme gebruikers kunnen gebruiken om toegang te krijgen tot de databaseserver.
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
-
Schakel root-login op afstand uit, dit is een uiterst belangrijke beveiligingsconfiguratie omdat het voorkomt dat aanvallers zich op afstand authenticeren bij de MySQL-server als root of brute-force-aanvallen met wachtwoorden uitvoeren. Externe authenticatie kan ook volledig worden uitgeschakeld, we zullen in de volgende sectie bekijken hoe u dat kunt doen.
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
-
Verwijder de testdatabase die is gemaakt tijdens het installatieproces van mysql-server. Deze database is gemaakt voor testdoeleinden. Als goede gewoonte wordt aanbevolen om deze database te verwijderen.
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
-
Laad de privilegetabellen opnieuw om ervoor te zorgen dat alle wijzigingen worden toegepast en van kracht zijn.
U hebt nu een veilige basis om mee te werken. In het volgende gedeelte vindt u de instructies om de standaard root te wijzigen gebruikersnaam en wachtwoord.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!
De “root”-gebruiker wijzigen
Standaard wordt de MySQL-server voorgedefinieerd geleverd met een superuser/admin
account dat toegang heeft tot alle privileges en functionaliteit van de databases en databasegebruikers. Gezien deze ongeëvenaarde controle en toegang, is het belangrijk om het root-account te vergrendelen en te beveiligen, aangezien aanvallers zich gewoonlijk richten op het root-account op een MySQL-server, omdat het de potentie heeft om volledige toegang te bieden tot de databases en databasegebruikers.
De eerste stap bij het beveiligen van de "root"-gebruiker is het wijzigen van de gebruikersnaam van root
tot iets onverzettelijkers, het doel is om de root-gebruikersnaam zo moeilijk te raden te maken of brute-force voor aanvallers. Daarna wordt het ook aanbevolen om de root
. te wijzigen accountwachtwoord regelmatig als een goede gewoonte.
-
Log in op de MySQL-server met het volgende commando:
sudo mysql -u root
-
Wijzig de gebruikersnaam van de "root"-account door de volgende zoekopdracht uit te voeren:
rename user 'root'@'localhost' to '<new-username>'@'localhost';
-
Wijzig de
root
accountwachtwoord naar iets sterks en moeilijk te raden, wordt het aanbevolen om een wachtwoordgenerator te gebruiken. Als je de plug-in voor het verifiëren van wachtwoorden hebt ingeschakeld tijdens het beveiligde installatieproces, moet je een wachtwoord opgeven dat qua sterkte voldoet aan de beleidsvereisten.ALTER USER 'example_username'@'localhost' IDENTIFIED BY '<new-password>';
-
Laad de privilegetabel opnieuw om ervoor te zorgen dat alle wijzigingen worden opgeslagen en geactiveerd door de volgende opdracht uit te voeren:
flush privileges;
-
Om te bevestigen of de
root
gebruikersnaam en wachtwoord zijn gewijzigd, voert u de volgende query uit:use mysql; select user,host,authentication_string from mysql.user;
Dit toont de gebruikerstabellen die zijn opgeslagen onder de mysql-database en zouden de gemaakte wijzigingen moeten weerspiegelen.
+------------------+-----------+-------------------------------------------+
| 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)
Een nieuwe gebruiker aanmaken
Een goede beveiligingspraktijk is het concept van scheiding door taken of rol. Dit betekent dat voor elke database of toepassing die de database gebruikt, een nieuwe gebruiker moet worden gemaakt met CRUD-machtigingen voor die specifieke database. Dit zorgt ervoor dat slechts één gebruiker op elk moment toegang heeft tot één database en dat gebruikers geen toegang hebben tot andere databases.
-
Maak een
Test
database, door de volgende query uit te voeren in MYSQL:create database Test;
-
Maak de gebruiker aan die verantwoordelijk is voor het beheer van deze testdatabase:
CREATE USER '<username>'@'localhost' IDENTIFIED BY '<password>';
-
Wijs de juiste CRUD-machtigingen toe aan de gebruiker voor de
Test
databank:GRANT SELECT,UPDATE,DELETE ON Test.* TO '<username>'@'localhost';
-
Het is belangrijk op te merken dat deze privileges alleen van toepassing zijn op de
Test
database, als u een gebruiker aanmaakt voor een toepassing zoalsphpMyAdmin
, moet u de gebruikerroot
. geven machtigingen. -
Als u besluit een bepaalde gebruiker te verwijderen, voert u de volgende zoekopdracht uit:
drop user '<username>'@'localhost';
-
Laad de privilegetabel opnieuw om ervoor te zorgen dat de aangebrachte wijzigingen worden toegepast en geactiveerd door de volgende query uit te voeren:
flush privileges;
Aangepaste MySQL-configuratie
U kunt nu een veilige aangepaste configuratie voor MySQL instellen die aanvullende beveiligingsconfiguratie-opties biedt.
-
Het algemene MySQL-configuratiebestand bevindt zich in
/etc/mysql/my.cnf
, moeten alle aangepaste globale configuraties worden ingesteld in het configuratiebestand. -
De aangepaste configuratie moet worden opgegeven voor de mysqld (MySQL-daemon), de opties die in de afbeelding worden weergegeven, zijn aangepaste beveiligingsconfiguraties.
-
Nadat u de aangepaste configuraties hebt toegevoegd, moet u de
mysql
. opnieuw starten service om ervoor te zorgen dat alle wijzigingen worden toegepast.systemctl restart mysql
MySQL-beveiliging controleren
U kunt nu de beveiliging van de MySQL-server controleren met behulp van een tool genaamd MySAT. MySAT voert verschillende tests uit om databaseconfiguraties en beveiligingsbeleid te analyseren. MySAT helpt bij het beoordelen en dus verhogen van de beveiliging van de MySQL-database. MySAT is een eenvoudig SQL-script, het is gemakkelijk te begrijpen en gemakkelijk te onderhouden. MySAT-resultaten worden uitgevoerd in HTML-indeling.
-
Kloon de MySAT Github-repository door de volgende opdracht uit te voeren:
git clone https://github.com/meob/MySAT.git
-
Na het klonen van de directory navigeert u naar de MySAT-directory, waar de
mysat.sql
bestand zich bevindt en wordt gebruikt in combinatie met de MySQL-server om de resultaten uit te voeren in eenMySAT.htm
bestand. -
Controleer de beveiliging door de volgende opdracht uit te voeren:
mysql --user=<root-user> -p<password> --skip-column-names -f < mysat.sql > MySAT.htm
-
Zoals aangegeven vereist MySAT root-toegang tot MySQL om de vereiste tests uit te voeren. Na het uitvoeren van de opdracht wordt het MySAT.htm-bestand gegenereerd, kopieer het MySAT.htm-bestand en de
mysat.css
bestand naar een Apache- of NGINX-server, of download ze lokaal metscp
, zodat u de resultaten van de audit kunt analyseren. -
De resultaten zijn geformatteerd in een eenvoudig te lezen en te begrijpen formaat, waarbij configuraties worden gecontroleerd en de resultaten een kleurcode krijgen op basis van hun huidige configuratie en hoe dit de beveiliging van de mysql-server beïnvloedt. Een mislukte configuratiecontrole heeft bijvoorbeeld een oranje kleurcode en een geslaagde controle heeft een groene kleurcodering.
-
Het auditrapport onthult welke configuraties moeten worden gewijzigd of aangepast en geeft u een beeld op het hoogste niveau van de algehele beveiliging van de MySQL-server.