Mysql
 sql >> база данни >  >> RDS >> Mysql

Защита на MySQL сървър

MySQL

MySQL е система за управление на релационни бази данни с отворен код. Това ръководство ще ви покаже как да защитите и одитирате MySQL сървър. Името е комбинация от „My“, името на дъщерята на съоснователя Michael Widenius, и „SQL“, съкращението за Structured Query Language.

Преди да започнете

  1. Уверете се, че сте следвали ръководствата Първи стъпки и защита на вашия сървър. Уверете се, че името на хоста на Linode е зададено.

    Проверете името на хоста на вашия Linode. Първата команда трябва да показва вашето кратко име на хост, а втората трябва да показва пълното ви име на домейн (FQDN).

    hostname
    hostname -f
    
    Забележка Ако имате регистрирано име на домейн за вашия уебсайт, добавете домейна към сървъра на Linode, на който планирате да инсталирате стека LAMP. Ако нямате регистрирано име на домейн, заменете example.com с IP адреса на сървъра на Linode в следните инструкции.
  2. Актуализирайте системата си:

    sudo yum update
    
    Забележка Това ръководство е написано за потребител без root права. Командите, които изискват повишени привилегии, имат префикс с sudo . Ако не сте запознати с sudo команда, можете да проверите нашето ръководство за потребители и групи.
  3. За да защитите и одитирате 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.

  1. Извикайте помощната програма, като изпълните следната команда:

     sudo mysql_secure_installation
    
  2. Процесът на настройка започва и помощната програма ви подканва да посочите дали искате да активирате приставката за валидиране на паролата, която се използва за тестване на пароли и подобряване на сигурността. Препоръчително е да активирате тази функция.

    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

  3. След като активирате приставката за парола, посочете вашата политика за валидиране на паролата въз основа на нивото на силата на желаните пароли.

    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

  4. Премахване на анонимни потребители. Това е важна опция за сигурност, тъй като нападателите могат да използват анонимни потребители, за да получат достъп до сървъра на базата данни.

    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

  5. Деактивирайте отдалечено влизане в 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

  6. Изтрийте тестовата база данни, създадена по време на инсталационния процес на 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

  7. Презаредете таблиците с привилегии, за да се уверите, че всички промени са приложени и са в сила.

    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 по подразбиране потребителско име и парола.

Промяна на „root“ потребител

По подразбиране MySQL сървърът е предварително дефиниран с superuser/admin акаунт, който има достъп до всички привилегии и функционалности на базите данни и потребителите на база данни. Предвид този несравним контрол и достъп е важно да заключите и защитите root акаунта, тъй като нападателите обикновено се насочват към root акаунта на MySQL сървър, тъй като той има потенциала да осигури пълен достъп до базите данни и потребителите на база данни.

Първата стъпка в осигуряването на „root“ потребител е да промените потребителското име от root за нещо по-непреклонно, целта е да направи потребителското име на root толкова трудно за отгатване или груба сила за нападателите. След което също се препоръчва да промените root парола за акаунт редовно като добра практика.

  1. Влезте в MySQL сървъра със следната команда:

     sudo mysql -u root
    
  2. Променете потребителското име на „root“ акаунт, като изпълните следната заявка:

     rename user 'root'@'localhost' to '<new-username>'@'localhost';
    
  3. Променете root парола за акаунт към нещо силно и трудно за отгатване, препоръчително е да използвате генератор на пароли. Ако сте активирали приставката за проверка на паролата по време на процеса на защитена инсталация, трябва да предоставите парола, която отговаря на изискванията на правилата по отношение на силата.

     ALTER USER 'example_username'@'localhost' IDENTIFIED BY '<new-password>';
    
  4. Презаредете таблицата с привилегии, за да сте сигурни, че всички промени са запазени и активирани, като изпълните следната команда:

     flush privileges;
    
  5. За да потвърдите дали 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 разрешения за тази конкретна база данни. Това гарантира, че по всяко време само един потребител има достъп до една база данни в даден момент и потребителите нямат достъп до други бази данни.

  1. Създайте Test база данни, като изпълните следната заявка в MYSQL:

     create database Test;
    
  2. Създайте потребителя, отговорен за управлението на тази тестова база данни:

     CREATE USER '<username>'@'localhost' IDENTIFIED BY '<password>';
    
  3. Задайте съответните CRUD разрешения на потребителя за Test база данни:

     GRANT SELECT,UPDATE,DELETE ON Test.* TO '<username>'@'localhost';
    
  4. Важно е да се отбележи, че тези привилегии са приложими само за Test база данни, ако създавате потребител за приложение като phpMyAdmin , трябва да предоставите на потребителя root разрешения.

  5. Ако решите да изтриете конкретен потребител, изпълнете следната заявка:

     drop user '<username>'@'localhost';
    
  6. Презаредете таблицата с привилегии, за да сте сигурни, че направените промени са приложени и активирани, като изпълните следната заявка:

     flush privileges;
    

Персонализирана MySQL конфигурация

Вече можете да настроите защитена персонализирана конфигурация за MySQL, която предоставя допълнителни опции за конфигурация за сигурност.

  1. Глобалният конфигурационен файл на MySQL се намира в /etc/mysql/my.cnf , всички персонализирани глобални конфигурации трябва да бъдат настроени в конфигурационния файл.

  2. Персонализираната конфигурация трябва да бъде посочена за mysqld (MySQL демон), опциите, показани в изображението, са персонализирани конфигурации за сигурност.

  3. След като добавите персонализираните конфигурации, трябва да рестартирате mysql услуга, за да се гарантира, че всички промени са приложени.

     systemctl restart mysql
    

Проверка на сигурността на MySQL

Вече можете да одитирате сигурността на MySQL сървъра, като използвате инструмент, наречен MySAT. MySAT извършва няколко теста за анализиране на конфигурации на база данни и политики за сигурност. MySAT помага да се оцени и следователно да се увеличи сигурността на базата данни на MySQL. MySAT е прост SQL скрипт, лесен за разбиране и лесен за поддръжка. Резултатите от MySAT се извеждат в HTML формат.

  1. Клонирайте хранилището на MySAT Github, като изпълните следната команда:

     git clone https://github.com/meob/MySAT.git
    
  2. След като клонирате директорията, отидете в директорията MySAT, където mysat.sql файл се намира и се използва съвместно с MySQL сървъра за извеждане на резултатите в MySAT.htm файл.

  3. Проверете сигурността, като изпълните следната команда:

     mysql --user=<root-user> -p<password> --skip-column-names -f < mysat.sql > MySAT.htm
    
  4. Както е посочено, MySAT изисква root достъп до MySQL, за да изпълни необходимите тестове, след изпълнение на командата се генерира файлът MySAT.htm, копирайте файла MySAT.htm и mysat.css файл на Apache или NGINX сървър или ги изтеглете локално с scp , за да можете да анализирате резултатите от одита.

  5. Резултатите са форматирани в лесен за четене и разбиране формат, където конфигурациите се проверяват и резултатите са цветно кодирани въз основа на текущата им конфигурация и как тя влияе върху сигурността на mysql сървъра. Например, неуспешната проверка на конфигурацията е цветно кодирана в оранжево, а преминалата проверка е цветно кодирана в зелено.

  6. Докладът от одита разкрива какви конфигурации трябва да бъдат променени или модифицирани и ви представя картина от най-високо ниво на цялостната сигурност на MySQL сървъра.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Приставката за удостоверяване „caching_sha2_password“ не може да бъде заредена

  2. MySQL, по-добре да вмъкнете NULL или празен низ?

  3. Как мога да използвам mySQL replace() за заместване на низове в множество записи?

  4. MySQL MONTHNAME() от числа

  5. Функция MySQL ATAN() – Връща дъгата на тангенса на стойност (или стойности)