MySQL
MySQL е система за управление на релационни бази данни с отворен код. Това ръководство ще ви покаже как да защитите и одитирате MySQL сървър. Името е комбинация от „My“, името на дъщерята на съоснователя Michael Widenius, и „SQL“, съкращението за Structured Query Language.
Преди да започнете
-
Уверете се, че сте следвали ръководствата Първи стъпки и защита на вашия сървър. Уверете се, че името на хоста на Linode е зададено.
Проверете името на хоста на вашия Linode. Първата команда трябва да показва вашето кратко име на хост, а втората трябва да показва пълното ви име на домейн (FQDN).
hostname hostname -f
Забележка Ако имате регистрирано име на домейн за вашия уебсайт, добавете домейна към сървъра на Linode, на който планирате да инсталирате стека LAMP. Ако нямате регистрирано име на домейн, заменете
example.com
с IP адреса на сървъра на Linode в следните инструкции. -
Актуализирайте системата си:
sudo yum update
Забележка Това ръководство е написано за потребител без root права. Командите, които изискват повишени привилегии, имат префикс с
sudo
. Ако не сте запознати сsudo
команда, можете да проверите нашето ръководство за потребители и групи. -
За да защитите и одитирате MySQL, трябва да имате Linux сървър с
MySQL Server
услугите работят. За информация относно инсталирането на MySQL, моля, вижте Инсталиране на MySQLЗабележка Инструкциите в това ръководство са базирани на Ubuntu 18.04, въпреки че всички стъпки са независими от разпространението с изключение на имената на пакети и мениджърите на пакети.
Използване на Secure MySQL Installer
Пакетът mysql-server идва предварително конфигуриран с помощна програма, наречена mysql_secure_installation
който се използва за настройване на сигурна отправна точка за MySQL сървър, като изтрива анонимни потребители и ви позволява да зададете желаната политика за сила на паролата.
mysql_secure_installation
е шел скрипт, наличен в Unix системи и ви позволява да защитите инсталацията на MySQL, като ви позволява да:
- задайте парола за root акаунти
- премахнете root акаунти, които са достъпни извън локалния хост
- премахване на акаунти на анонимни потребители
- премахнете тестовата база данни, която по подразбиране може да бъде достъпна от анонимни потребители
Започнете процеса на защита, като стартирате тази помощна програма веднага след инсталирането на mysql-server.
-
Извикайте помощната програма, като изпълните следната команда:
sudo mysql_secure_installation
-
Процесът на настройка започва и помощната програма ви подканва да посочите дали искате да активирате приставката за валидиране на паролата, която се използва за тестване на пароли и подобряване на сигурността. Препоръчително е да активирате тази функция.
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
-
След като активирате приставката за парола, посочете вашата политика за валидиране на паролата въз основа на нивото на силата на желаните пароли.
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
-
Премахване на анонимни потребители. Това е важна опция за сигурност, тъй като нападателите могат да използват анонимни потребители, за да получат достъп до сървъра на базата данни.
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
-
Деактивирайте отдалечено влизане в root, това е изключително важна конфигурация за сигурност, тъй като не позволява на нападателите да се удостоверяват от разстояние до MySQL сървъра като root или да извършват атаки с груба сила с парола. Отдалеченото удостоверяване също може да бъде деактивирано напълно, ще разгледаме как да го направим в следващия раздел.
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
-
Изтрийте тестовата база данни, създадена по време на инсталационния процес на mysql-сървър, тази база данни е създадена за тестови цели, като добра практика се препоръчва да изтриете тази база данни.
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
-
Презаредете таблиците с привилегии, за да се уверите, че всички промени са приложени и са в сила.
Вече имате защитена база, с която да работите, в следващия раздел намерете инструкциите за промяна на root по подразбиране потребителско име и парола.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!
Промяна на „root“ потребител
По подразбиране MySQL сървърът е предварително дефиниран с superuser/admin
акаунт, който има достъп до всички привилегии и функционалности на базите данни и потребителите на база данни. Предвид този несравним контрол и достъп е важно да заключите и защитите root акаунта, тъй като нападателите обикновено се насочват към root акаунта на MySQL сървър, тъй като той има потенциала да осигури пълен достъп до базите данни и потребителите на база данни.
Първата стъпка в осигуряването на „root“ потребител е да промените потребителското име от root
за нещо по-непреклонно, целта е да направи потребителското име на root толкова трудно за отгатване или груба сила за нападателите. След което също се препоръчва да промените root
парола за акаунт редовно като добра практика.
-
Влезте в MySQL сървъра със следната команда:
sudo mysql -u root
-
Променете потребителското име на „root“ акаунт, като изпълните следната заявка:
rename user 'root'@'localhost' to '<new-username>'@'localhost';
-
Променете
root
парола за акаунт към нещо силно и трудно за отгатване, препоръчително е да използвате генератор на пароли. Ако сте активирали приставката за проверка на паролата по време на процеса на защитена инсталация, трябва да предоставите парола, която отговаря на изискванията на правилата по отношение на силата.ALTER USER 'example_username'@'localhost' IDENTIFIED BY '<new-password>';
-
Презаредете таблицата с привилегии, за да сте сигурни, че всички промени са запазени и активирани, като изпълните следната команда:
flush privileges;
-
За да потвърдите дали
root
потребителското име и паролата са променени, изпълнете следната заявка:use mysql; select user,host,authentication_string from mysql.user;
Това показва потребителските таблици, съхранени в базата данни на mysql и трябва да отразява направените промени.
+------------------+-----------+-------------------------------------------+
| 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)
Създаване на нов потребител
Добрата практика за сигурност е концепцията за разделяне по задължения или роля. Това означава, че за всяка база данни или приложение, което използва базата данни, създайте нов потребител, който има CRUD разрешения за тази конкретна база данни. Това гарантира, че по всяко време само един потребител има достъп до една база данни в даден момент и потребителите нямат достъп до други бази данни.
-
Създайте
Test
база данни, като изпълните следната заявка в MYSQL:create database Test;
-
Създайте потребителя, отговорен за управлението на тази тестова база данни:
CREATE USER '<username>'@'localhost' IDENTIFIED BY '<password>';
-
Задайте съответните CRUD разрешения на потребителя за
Test
база данни:GRANT SELECT,UPDATE,DELETE ON Test.* TO '<username>'@'localhost';
-
Важно е да се отбележи, че тези привилегии са приложими само за
Test
база данни, ако създавате потребител за приложение катоphpMyAdmin
, трябва да предоставите на потребителяroot
разрешения. -
Ако решите да изтриете конкретен потребител, изпълнете следната заявка:
drop user '<username>'@'localhost';
-
Презаредете таблицата с привилегии, за да сте сигурни, че направените промени са приложени и активирани, като изпълните следната заявка:
flush privileges;
Персонализирана MySQL конфигурация
Вече можете да настроите защитена персонализирана конфигурация за MySQL, която предоставя допълнителни опции за конфигурация за сигурност.
-
Глобалният конфигурационен файл на MySQL се намира в
/etc/mysql/my.cnf
, всички персонализирани глобални конфигурации трябва да бъдат настроени в конфигурационния файл. -
Персонализираната конфигурация трябва да бъде посочена за mysqld (MySQL демон), опциите, показани в изображението, са персонализирани конфигурации за сигурност.
-
След като добавите персонализираните конфигурации, трябва да рестартирате
mysql
услуга, за да се гарантира, че всички промени са приложени.systemctl restart mysql
Проверка на сигурността на MySQL
Вече можете да одитирате сигурността на MySQL сървъра, като използвате инструмент, наречен MySAT. MySAT извършва няколко теста за анализиране на конфигурации на база данни и политики за сигурност. MySAT помага да се оцени и следователно да се увеличи сигурността на базата данни на MySQL. MySAT е прост SQL скрипт, лесен за разбиране и лесен за поддръжка. Резултатите от MySAT се извеждат в HTML формат.
-
Клонирайте хранилището на MySAT Github, като изпълните следната команда:
git clone https://github.com/meob/MySAT.git
-
След като клонирате директорията, отидете в директорията MySAT, където
mysat.sql
файл се намира и се използва съвместно с MySQL сървъра за извеждане на резултатите вMySAT.htm
файл. -
Проверете сигурността, като изпълните следната команда:
mysql --user=<root-user> -p<password> --skip-column-names -f < mysat.sql > MySAT.htm
-
Както е посочено, MySAT изисква root достъп до MySQL, за да изпълни необходимите тестове, след изпълнение на командата се генерира файлът MySAT.htm, копирайте файла MySAT.htm и
mysat.css
файл на Apache или NGINX сървър или ги изтеглете локално сscp
, за да можете да анализирате резултатите от одита. -
Резултатите са форматирани в лесен за четене и разбиране формат, където конфигурациите се проверяват и резултатите са цветно кодирани въз основа на текущата им конфигурация и как тя влияе върху сигурността на mysql сървъра. Например, неуспешната проверка на конфигурацията е цветно кодирана в оранжево, а преминалата проверка е цветно кодирана в зелено.
-
Докладът от одита разкрива какви конфигурации трябва да бъдат променени или модифицирани и ви представя картина от най-високо ниво на цялостната сигурност на MySQL сървъра.