Налаштування безпеки MYSQL в Unix

безпеки

У цій статті "Налаштування безпеки MySQL в Unix/Linux" я хотів би представити матеріал з налаштування безпеки mysql в операційних системах Unix та Linux. Я довго збирав цей матеріал і зібрав усе до купи.

Я не розповідатиму як встановити mysql, а перейду відразу до налаштувань, але якщо хтось не знає як встановити mysql, то можуть ознайомитися з корисним матеріалом тут:

І є ще багато інших корисних статей на цю тему, якщо цікаво, то рекомендую використовувати пошук або пройтися рубриками.

Файл конфігурації my.cnf в Ubuntu та Debian знаходиться: /etc/mysql/my.cnf

Файл конфігурації my.cnf у CentOS, RedHat та Fedora: /etc/my.cnf

Налаштування безпеки MYSQL у Unix/Linux

І так, приступимо.

Попередня установка.

Перед встановленням будь-якого програмного забезпечення зміцнити операційну систему. Це включає функції безпеки для файлової системи:

Налаштування безпеки після встановлення mysql.

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

Перший варіант - це зробити все це самому, вручну:

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

І встановлюємо пароль:

Видаляємо анонімних користувачів:

Видалимо (заборонимо) віддалений доступ для користувача root:

Видаляємо стандартну базу даних з ім'ям test:

Перезавантажимо користувальницькі привілеї:

За умовчанням, MySQL працюватиме через «mysqld_safe», який не робить MySQL безпечним. Скрипт mysqld_safe забезпечує функціональність так: «Скрипт запускає демон MySQL або перезапускає його, якщо він несподівано вмирає».Таким чином, якщо хтось намагається запустити mysql від користувача root, скрипт не запуститься. Процес mysql може працювати без mysqld_safe, ви можете запустити його в такий спосіб, через sudo:

Шлях до демона може відрізнятись, все залежить від ОС.

Другий варіант - це запустити "mysql_secure_installation".

2-й спосіб простіший і скрипт виконає все за вас. Запустіть скрипт "mysql_secure_installation". Це допоможе виконати декілька процедур, які будуть усувати деякі значення за промовчанням, які є небезпечними для використання:

цей скрипт запросить у вас пароль суперкористувача, який ви створили під час установки. Відразу ж після цього, вам буде запропоновано низку питань. Ви повинні відповісти «Y» (Так), на всі питання.

І так, все встановлено і тепер потрібно відредагувати файл конфігурації my.cnf і внести ряд корисних змін:

Перший параметр, який ми повинні перевірити це "bind-address", який знаходиться в розділі "[mysqld]". Цей параметр говорить, що mysql буде запущений на локальному сервері без виходу в інтернет і до нього не зможуть підключитися, приведіть до наступного:

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

У цьому розділі даного файлу, я додаю директиву, щоб вимкнути можливість завантаження локальних файлів:

Це вимикає завантаження файлів із файлової системи для користувачів без прав на рівні файлів у базі даних. Логування може показати багато інформації про падіння сервера, наприклад, тому варто вести логи.

Ви можете встановити шлях де буде бажати лог-файл (у цьому жрозділі»[mysqld]»):

Рекомендується відключення символічних посилань для запобігання різним ризикам у безпеці:

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

НЕ ДЛЯ ПАРАНОЇКІВ! Можна прописати логін та пароль і входити без нього, для цього:

user_mysql - користувач у mysql. password_mysql - пароль від користувача user_mysql в mysql.

Наступного разу при запуску mysql команд у mysql, mysqlcheck, утиліти mysqdump будуть брати user_mysql & password_mysql з файлу і це заощаджує ваш час (і не потрібно прописувати -u і -p).

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

Налаштування безпеки всередині MySQL.

Є ряд кроків, які можна зробити під час використання MySQL для покращення безпеки. Я будемо вводити команди всередині MySQL, тому потрібно увійти:

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

Забезпечення паролів та Host асоціацій

По-перше, необхідно перевірити, що ніхто з користувачів не залишився без пароля або без асоціативних хостів у MySQL:

Як ви можете бачити, у прикладі, користувач Test-user не має пароля і працює незалежно від хоста і БД. Це дуже небезпечно.

Ми можемо встановити пароль для користувача. Змініть «newPassWord» і встановити пароль, який вам потрібно:

Якщо перевіримо таблицю user знову, побачимо, що користувач Test-user тепер має пароль:

Якщо ви подивіться в полі «Host», ви побачите, що ми ще маємо «%», який є джокером. Це означає, що цей користувачмає право працювати з будь-яким хостом на сервері. Це не те, що потрібно і необхідно змінити на "localhost":

Якщо ще раз перевірити, можна побачити, що таблиця user тепер має відповідні поля і вони коректні:

Якщо таблиця містить порожніх користувачів (У цьому прикладі немає таких, тому що я запустив "mysql_secure_installation", але я розповім про це у будь-якому випадку), ми повинні видалити їх:

Після того, як я зробив модифікувати таблиці user, потрібно виконати наступну команду, щоб активувати нові привілеї:

Призначення користувачів та надання їм прав.

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

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

Після чого необхідно надати нові привілеї для щойно створеного користувача на нову таблицю за допомогою наступної команди:

Як приклад, якщо потрібно скасувати права, наприклад UPDATE для користувача, це можна зробити так:

Якщо вам потрібні всі привілеї для певної бази даних, ви можете це зробити так:

Виконаємо оновлення привілеїв для користувачів:

А зараз перевіримо, що вийшло:

Завжди виконуйте “flush privileges”, коли ви закінчили вносити зміни.

Змінити користувача root.

Один додатковий крок, який ви можете зробити, це змінити ім'я користувача root. Якщо зловмисник намагається отримати доступ до користувача root у MySQL, вони повинні будуть виконуватидодаткову стадію знаходження користувача.

Щоб перейменувати користувача root, можна використовувати:

Ви можете побачити зміни, використовуючи той самий запит:

Знову ж таки, необхідно очистити привілеї для цих змін:

Пам'ятайте, що ви повинні будете увійти до MySQL як новостворений користувач. І тепер, ви повинні використовувати не root, а ім'я користувача, яке ви використовували при перейменуванні вище, щоб виконувати адміністративні завдання:

Якщо потрібно скинути пароль від користувача root у mysql, то рекомендую прочитати статтю «Скидання пароля root у MySQL»

Захист конфігураційного файлу MySQL.

Щоб зберегти налаштування, файл не повинен бути доступним для всіх, окрім себе. Щоб забезпечити це, виставте пара на файл 400 або 600. Наприклад:

На всіх конфігураційних файлах повинні мати власника root:

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

Детально про цю утиліту можна прочитати тут:

Переконайтеся, що mysqld працює на tcp порту №3306: