Захист mysql і mariadb на сервері linux

Розміщення серверів в надійних дата-центрах Європи. Відкрийте хмарний VPS / VDS сервер на швидких SSD за 1 хвилину!

Кращий хостинг:
- захистить дані від несанкціонованого доступу в охоронюваному європейському ЦОДі
- прийме оплату хоч в bitcoin.
- дозволить поставити свій дистрибутив

- захист від DDos-атак
- безкоштовний backup
- Uptime 99,9999%
- ЦОД - TIER III
- провайдер - TIER I

Підтримаємо російською мовою 24/7/365 Працюємо з юрособами і фізособами. Вам прямо зараз потрібно 24 ядра і 72 Gb RAM. Будь ласка!

Наші вигідні тарифи доведуть, що дешевий хостинг ви ще не знали!

Хвилинна справа: виберіть конфігурацію, оплатіть і CMS на VPS готова.
Money Back - 30 днів!

Банківськими картами, електронною валютою, через термінали Qiwi, Webmoney, PayPal, Новоплат і ін.

Задайте питання в службу підтримки 24/7/365

Знайдіть відповіді в нашій базі і познайомтеся з рекомендаціями

У Linux- і Unix-подібних операційних системах існує безліч реалізацій мови SQL, серед яких і популярні реляційні бази даних MySQL і MariaDB.

Однак, як і більшість програм, при неправильному налаштуванні ці інструменти можуть становити загрозу для безпеки системи. Це керівництво допоможе захистити бази даних MySQL або MariaDB і разом з тим забезпечити захист всьому VPS.

Для простоти роботи в керівництві використовується MySQL на сервері Ubuntu 12.04; однак перераховані тут техніки підійдуть і для MariaDB і інших дистрибутивів Linux.

Початкова настройка

MySQL дозволяє виконати початкову настройку безпеки ще під час установки. По-перше, СУБД пропонує встановити root-пароль.

sudo apt-get install mysql-server
. Configuring mysql-server-5.5.
. While not mandatory, it is highly recommended that you set a password for the.
. MySQL administrative "root" user.
.
. If this field is left blank, the password will not be changed.
.
. New password for the MySQL "root" user.
.
. _______________________________________________________________________________.
.
.
.

Після завершення установки потрібно запустити кілька скриптів. Для створення структури каталогів для баз даних використовується скрипт mysql_install_db:

Потім запустіть скрипт mysql_secure_installation, який видалить деякі потенційно небезпечні для виробництва настройки за замовчуванням.

Спочатку цей скрипт запросить root-пароль, потім запропонує змінити його (в разі необхідності встановіть більш надійний пароль).

Відразу після цього він поставить низку питань; рекомендується відповісти на всі ці питання Y.

Це блокує доступ до MySQL за замовчуванням і віддалені підключення адміністратора, видаляє деякі небезпечні тестові бази даних і оновлює налаштування MySQL.

оцінка безпеки

Головне правило безпеки MySQL (і майже будь-який інший системи): доступ слід надавати тільки в разі крайньої необхідності. Говорячи про захист даних, часто доводиться вибирати між зручністю і безпекою.

Примітка: У цьому керівництві вибір зроблений на користь безпеки; ваш вибір може відрізнятися в залежності від вимог і цілей сервера.

файл my.cnf

Головний конфігураційний файл MySQL називається my.cnf і зберігається в каталозі / etc / mysql / в системі Ubuntu або в каталозі / etc / в деяких інших системах.

Щоб заблокувати доступ до MySQL, потрібно змінити деякі настройки в цьому файлі.

Відкрийте файл з правами root. Змініть шлях до каталогу, якщо ви виконуєте керівництво на іншому дистрибутиві Linux.

sudo nano /etc/mysql/my.cnf

Спочатку потрібно перевірити настройку bind-address в розділі [mysqld]; ця настройка повинна вказувати на локальний мережевий loopback-інтерфейс, 127.0.0.1.

Ця установка блокує всі підключення до MySQL, крім підключень з локальної машини.

Якщо вам потрібен доступ до цієї бази даних з іншої машини, використовуйте підключення SSH, які дозволяють відправляти запити і керувати базою даних локально і передавати результати через SSH-тунель.

Далі потрібно відключити функцію, яка дозволяє отримати доступ до файлової системи з MySQL. Вона може спричинити серйозні наслідки для безпеки.

В цей же розділ файлу потрібно додати директиву, яка відключить цю поведінку:

Тепер MySQL НЕ буде завантажувати локальні файли для користувачів без відповідного рівня доступу.

Якщо у вас досить простору і вам не потрібно обробляти великі обсяги даних, можна налаштувати логирование додаткової інформації, щоб мати можливість відстежувати підозрілу активність.

Внесення в лог занадто великої кількості інформації в логи може привести до зниження продуктивності, тому цей крок потрібно добре обміркувати.

Змінну log можна додати в той же розділ [mysqld].

Переконайтеся, що лог MySQL, лог помилок і каталог логів не доступний для читання всім:

sudo ls -l / var / log / mysql *
-rw-r ----- 1 mysql adm 0 Jul 23 18:06 /var/log/mysql.err
-rw-r ----- 1 mysql adm 0 Jul 23 18:06 /var/log/mysql.log
/ Var / log / mysql:
total 28
-rw-rw ---- 1 mysql adm 20694 Jul 23 19:17 error.log

захист MySQL

Під час роботи з MySQL можна також виконати ряд дій для поліпшення безпеки.

Для цього потрібен інтерфейс командного рядка MySQL.

Введіть root-пароль MySQL.

Пароль і хост

Спочатку потрібно переконатися, що всі користувачі, які мають доступ до MySQL, захищені паролем і пов'язані з хостом.

SELECT User, Host, Password FROM mysql.user;
+------------------+-----------+-------------------------------------------+
| user | host | password |
+------------------+-----------+-------------------------------------------+
| root | localhost | * DE06E242B88EFB1FE4B5083587C260BACB2A6158 |
| demo-user | % | |
| root | 127.0.0.1 | * DE06E242B88EFB1FE4B5083587C260BACB2A6158 |
| root |. 1 | * DE06E242B88EFB1FE4B5083587C260BACB2A6158 |
| debian-sys-maint | localhost | * ECE81E38F064E50419F3074004A8352B6A683390 |
+------------------+-----------+-------------------------------------------+
5 rows in set (0.00 sec)

Зверніть увагу: в наведеному прикладі користувач demo-user не має пароля і не прив'язаний до хосту. Це серйозний ризик для безпеки.

Можна встановити пароль для цього користувача за допомогою наступної команди (замініть умовні дані своїми):

UPDATE mysql.user SET Password = PASSWORD ( 'newPassWord') WHERE User = "demo-user";

Тепер знову відкрийте таблицю користувачів; у demo-user з'явився пароль.

SELECT User, Host, Password FROM mysql.user;
+------------------+-----------+-------------------------------------------+
| user | host | password |
+------------------+-----------+-------------------------------------------+
| root | localhost | * DE06E242B88EFB1FE4B5083587C260BACB2A6158 |
| demo-user | % | * D8DECEC305209EEFEC43008E1D420E1AA06B19E0 |
| root | 127.0.0.1 | * DE06E242B88EFB1FE4B5083587C260BACB2A6158 |
| root |. 1 | * DE06E242B88EFB1FE4B5083587C260BACB2A6158 |
| debian-sys-maint | localhost | * ECE81E38F064E50419F3074004A8352B6A683390 |
+------------------+-----------+-------------------------------------------+
5 rows in set (0.00 sec)

Зверніть увагу на поле Host: символ% означає, що цей користувач не підключений до хосту. Підключіть його до localhost:

UPDATE mysql.user SET Host = 'localhost' WHERE User = "demo-user";

Знову відкрийте таблицю користувачів; як бачите, тепер всі поля заповнені належним чином.

На даний момент в mysql не повинно бути зайвих облікових записів (після запуску mysql_secure_installation). Однак якщо в таблиці будуть такі, їх потрібно видалити.

Для цього використовуйте команду:

DELETE FROM mysql.user WHERE User = "";

Завершивши роботу з таблицею користувачів, введіть наступну команду:

спеціалізовані користувачі

Як і система Linux, MySQL запускає процеси як ізольованих користувачів.

Кожна програма, яка використовує MySQL, має мати окрему обліковий запис користувача певним рівнем доступу до даних.

Під час налаштування додатків для використання MySQL потрібно створювати БД для цього додатка:

create database testDB;
Query OK, 1 row affected (0.00 sec)

Потім потрібно створити користувача, який буде керувати цією БД, і передати йому необхідні права доступу. Рівень доступу залежить від програми.

Щоб створити користувача, запустіть команду:

CREATE USER 'demo-user' @ 'localhost' IDENTIFIED BY 'password';

Щоб передати користувачеві права доступу до БД, використовуйте наступну команду:

GRANT SELECT, UPDATE, DELETE ON testDB. * TO 'demo-user' @ 'localhost';

Щоб відібрати у користувача право на редагування, введіть команду:

REVOKE UPDATE ON testDB. * FROM 'demo-user' @ 'localhost';

За допомогою цієї команди можна передати всі права на БД:

GRANT ALL ON testDB. * TO 'demo-user' @ 'localhost';

Завжди оновлюйте дані про привілеї після їх зміни.

Користувач root

На завершення можна змінити стандартне ім'я root-користувача. Якщо зловмисник спробує зламати root-користувача, то йому доведеться підібрати не тільки пароль, але і ім'я.

Змінити ім'я root-користувача можна за допомогою команди:

rename user 'root' @ 'localhost' to 'newAdminUser' @ 'localhost';

select user, host, password from mysql.user;

Тепер знову потрібно оновити дані про привілеї:

Тепер для запуску сесії MySQL потрібно вводити нове ім'я:

mysql -u newAdminUser -p

висновок

Звичайно, цей список рекомендацій щодо захисту MySQL і MariaDB далеко не вичерпний. Однак це усунути найпоширеніші уразливості СУБД.

Більш детальну інформацію про налаштування безпеки можна знайти на веб-сайтах MySQL і MariaDB, а також мануалах програм. Крім того, інструкції з безпечної налаштування можна знайти в документациях підключаються до СУБД додатків.

Схожі статті