Как правильно настроить Linux сервер: Установка и настройка MySQL
|В предыдущей части мы разбирали базовую установку и настройку сервера, сегодня давайте разберемся с началом настройки нашего бекэнда и установкой MySQL.
Установка и настройка mysql сервера
Для установки сервера mysql необходимо выполнить следующие команды в консоли командной строки:
apt-get install mysql-server mysql-client
При установке система спросит новый пароль для пользователя root (суперпользователь с максимальными привилегиями). Не забудьте его!
Рекомендуется произвести следующие настройки безопасности:
Не запускать СУБД от имени суперпользователя root. Необходимо указать имя пользователя для запуска mysql в файле /etc/mysql/my.cnf в разделе [mysqld]:
user = mysql
Обязательно убедиться, что пользователь, от чьего имени запускается СУБД, не имеет возможности авторизоваться в системе. Для данного пользователя должна быть установлена оболочкой по умолчанию /bin/false. Изменить оболочку можно следующей командой:
usermod mysql –s /bin/false
Отключить историю команд:
ln -sf ~/.mysql_history /dev/null
В файле профиля (/etc/profile) прописать:
export MYSQL_HISTFILE=/dev/null
Заблокировать использование команды LOAD DATA LOCAL, добавив следующую опцию:
local-infile=0
После установки данной опции, MySQL не будет загружать локальные файлы для пользователей без соответствующего уровня доступа.
Запретить пользователям создавать новых пользователей:
safe-user-create
При установке этой опции пользователь не может создавать новых пользователей с помощью команды GRANT, если у него отсутствует привилегия INSERT для таблицы mysql.user. Чтобы предоставить пользователю доступ именно для создания новых пользователей с теми привилегиями, которые он имеет право предоставлять, для этого пользователя следует установить следующую привилегию:
mysql> GRANT INSERT(user) ON mysql.user TO 'user''hostname';
Для предотвращения атаки, путем подмены DNS сервера, есть возможность запретить СУБД использовать имена хостов:
skip-name-resolve
При использовании данной опции Все значения в столбцах Host таблиц привилегий должны быть либо IP-адресами, либо localhost.
Удалить тестовую базу данных Test:
DROP DATABASE IF EXISTS test;
Необходимо запретить удаленный доступ для пользователя root:
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
В случае, если СУБД Mysql используется на ОС Debian/Ubuntu, необходимо урезать права системного пользователя debian-sys-maint с привилегированных до минимальных:
REVOKE ALL PRIVILEGES ON *.* FROM 'debian-sys-maint'@'localhost'; GRANT SELECT, RELOAD, SHUTDOWN, PROCESS, SHOW DATABASES, SUPER, LOCK TABLES ON *.* TO 'debian-sys-maint'@'localhost'; FLUSH PRIVILEGES;
Удостовериться, что никто из пользователей не остался без пароля или без ассоциативных хостов в MySQL. Все поля должны быть заполнены.
> SELECT User,Host,Password FROM mysql.user; +------------------+-----------+-------------------------------------------+ | user | host | password | +------------------+-----------+-------------------------------------------+ | root | localhost | *DJLJHFHGJKL:HLKJHK083587C260BACB2A6158 | | Test-user | % | | | root | 127.0.0.1 | *DEIOUYTDRSXCVBNM<>NJHGFYUTRACB2A6158 | | root | ::1 | *DE0OUYTRE$%^&UHBNKJHGFDCVBHJYT^&UYHGBNKA6158 | | captain | localhost | **&^RFGHJKNHT%^7ygbhjuy6tghu76tg0 | +------------------+-----------+-------------------------------------------+ 5 rows in set (0.00 sec)
На данном примере можно увидеть, что пользователь Test-user не имеет пароля и работает независимо от хоста и БД. Это крайне небезопасно.
Для непривилегированных пользователей рекомендуется ограничить глобальные права:
REVOKE ALL PRIVILEGES ON *.* FROM [имя пользователя]@[узел];
В случае необходимости определенной привилегии, ее стоит присваивать для конкретных БД и таблиц:
GRANT [привилегия] ON [база данных].[таблица] TO [имя пользователя]@[узел];
Для тюнинга производительности системы можно использовать утилиту MySQLTuner.
Данная утилита написана на perl, имеет открытый исходный код и свободно распространяется.
Подключение к mysql-серверу с использованием Mysql Workbench
Делать mysql доступным из внешнего интернета – небезопасно. Поэтому подключение будет производиться при помощи ssh-туннеля. Рассмотрится подключение с использованием ssh туннеля, созданного средствами самого mysql workbench и средствами putty.
Для подключения через mysql workbench необходимо перейти в меню Database – Manage Server Connection, где создадим новое подключение в соответствии со скриншотом:
- Connection method – Standart TCP/IP over SSH (указывается, что будет использоваться подключение через ssh-туннель)
- Ssh-hostname – адрес сервера
- Ssh-username – имя пользователя
- Ssh-password – нажать на кнопку “store in vault” и в появившемся окне ввести пароль пользователя
- Mysql-hostname – оставить 127.0.01
- Username – имя пользователя mysql базы
- Password – нажать на кнопку “store in vault” и в появившемся окне ввести пароль пользователя mysql
Затем выберем Test Connection. Если всё настроено, как нужно – появится такое окно
После этого можно закрывать данное окно и подключаться к серверу через меню Database – Connect to database
Удобное ПО не всегда есть под рукой. Рассмотрим создание ssh туннеля при помощи ssh-клиента putty. Для начала необходимо подключиться к серверу по ssh. После этого кликнуть по заголовку окна правой кнопкой мыши и выбрать пункт «Change settings»
В появившемся окне перейти в меню Connection – SSH – Tunnels
И добавить там новый тунель, с настройками, как на скриншоте
После чего нажать последовательно кнопки Add и Apply.
В процессе работы через ssh-туннель, нельзя закрывать ssh-подключение!
После этого можно добавить новое подключение в любом sql клиенте со следующими данными:
Тип подключения: обычное через TCP/IP
Адрес сервера: 127.0.0.1
Порт: 3306
Имя пользователя и пароль в соответствии с пользователями mysql
Может быть интересно: