Как правильно настроить Linux сервер: Установка и настройка MySQL

В предыдущей части мы разбирали базовую установку и настройку сервера, сегодня давайте разберемся с началом настройки нашего бекэнда и установкой MySQL.

Установка и настройка mysql сервера

Для установки сервера mysql необходимо выполнить следующие команды в консоли командной строки:

apt-get install mysql-server mysql-client

mysql_server_install

При установке система спросит новый пароль для пользователя root (суперпользователь с максимальными привилегиями). Не забудьте его! 

install_mysql

Рекомендуется произвести следующие настройки безопасности:

Не запускать СУБД от имени суперпользователя 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.

Смотрите так же   Корректная настройка https и получение отметки "A" на Qualys SSL Test

Удалить тестовую базу данных 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, где создадим новое подключение в соответствии со скриншотом:

Смотрите так же   Установка nginx в качестве frontend к apache2

workbench_connect

  • Connection method – Standart TCP/IP over SSH (указывается, что будет использоваться подключение через ssh-туннель)
  • Ssh-hostname – адрес сервера
  • Ssh-username – имя пользователя
  • Ssh-password – нажать на кнопку “store in vault” и в появившемся окне ввести пароль пользователя

workbench_pass

  • Mysql-hostname – оставить 127.0.01
  • Username – имя пользователя mysql базы
  • Password – нажать на кнопку “store in vault” и в появившемся окне ввести пароль пользователя mysql

workbench_root_pass

Затем выберем Test Connection. Если всё настроено, как нужно – появится такое окно

connected_workbench

После этого можно закрывать данное окно и подключаться к серверу через меню Database – Connect to database

mysql_workbench_connected_to_databases

Удобное ПО не всегда есть под рукой. Рассмотрим создание ssh туннеля при помощи ssh-клиента putty. Для начала необходимо подключиться к серверу по ssh. После этого кликнуть по заголовку окна правой кнопкой мыши и выбрать пункт «Change settings»

putty_tunnel

В появившемся окне перейти в меню Connection – SSH – Tunnels

putty_tunnel_2

И добавить там новый тунель, с настройками, как на скриншоте

putty_tunnel_3

После чего нажать последовательно кнопки Add и Apply.

В процессе работы через ssh-туннель, нельзя закрывать ssh-подключение! 

После этого можно добавить новое подключение в любом sql клиенте со следующими данными:

Тип подключения: обычное через TCP/IP

Адрес сервера: 127.0.0.1

Порт: 3306

Имя пользователя и пароль в соответствии с пользователями mysql

mysql_workbench_success

Может быть интересно:

Добавьте комментарий