on mysql, percona, mariadb, ubuntu

Безопасность MySQL в Ubuntu

Независимо от того, установлена уже у вас СУБД MySQL или вы только собираетесь это сделать, необходимо произвести несколько обязательных действий, которые обезопасят вас от большинства проблем с безопасностью.

Установить mysql

MySQL:

sudo apt-get install mysql-server

Percona в Ubuntu 12.04:

sudo apt-key adv --keyserver keys.gnupg.net --recv-keys 1C4CBDCDCD2EFD2A
sudo add-apt-repository -s 'deb http://repo.percona.com/apt precise main'
sudo add-apt-repository -s 'deb-src http://repo.percona.com/apt precise main'
sudo apt-get update
sudo apt-get install percona-server-server-5.6

MariaDB в Ubuntu 12.04:

sudo apt-get install python-software-properties
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db
sudo add-apt-repository -s 'deb http://mirror.mephi.ru/mariadb/repo/10.0/ubuntu precise main'
sudo apt-get update
sudo apt-get install mariadb-server

Для Ubuntu 14.04 нужно заменить в вышеприведённых примерах "precise" на "trusty".

Безопасность

Выполнить из терминала скрипт mysqlsecureinstallation, который предложит сменить рутовый пароль, удалить тестовую базу и анонимного пользователя.

sudo mysql_secure_installation

Укажите новый пароль:

Enter current password for root (enter for none): OK, successfully used password, moving on...

Удалите анонимных пользователей:

Remove anonymous users? [Y/n] y

Очень важно: запретить доступ извне сервера к суперпользователю mysql (как подключиться снаружи рутом - читайте ниже)

Disallow root login remotely? [Y/n] y

Удалите тестовую базу, она вам не понадобится:

Remove test database and access to it? [Y/n] y

Обновите привилегии пользователей:

Reload privilege tables now? [Y/n] y

После завершения работы скрипта проверьте подключение из терминала с новым паролем:

mysql -u root -p

Если подключение произошло успешно, то здесь же, в консоли mysql произведите следующие операции:

Смена имени суперпользователя mysql

a). Придумайте имя суперпользователя базы данных, отличающееся от root – это даст дополнительную защиту от взломщика, который сможет попасть на сервер и попытается подключиться к базе обычным именем пользователя root.

UPDATE mysql.user SET user = 'newRootUserName' WHERE user = 'root';
FLUSH PRIVILEGES;
SELECT user,host,password FROM mysql.user;

b). В Ubuntu для системных служебных целей в mysql добавлен пользователь, обладающий слишком широкими для его деятельности правами. Нужно их немного ограничить, там же, в консоли mysql:

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;
SHOW GRANTS FOR 'debian-sys-maint'@'localhost';

После этого нужно выйти из консоли mysql, набрав

quit;

и залогиниться уже под новыми именем и паролем суперпользователя mysql:

mysql -u newRootUserName -p

Избегайте совсем очевидных имен.

Внешний доступ к MySQL по SSH

Если вы не используете для управления MySQL серверные приложения типа PhpMyAdmin или база данных располагается на отдельном сервере, то для подключения к ней необходимо обращаться по защищённому каналу, чтобы избежать перехвата данных.

Это реализуется через порт форвардинг или ssh-туннель. Порт mysql должен быть закрыт наружу (в конфиге bind-address=localhost), клиентское приложение подключается к cерверу через SSH.

Откройте или создайте файл конфигурации (он может отстутствовать на некоторых инсталляциях по умолчанию):

sudo nano /etc/mysql/my.cnf

и добавьте следующие инструкции:

[mysqld]
general_log=0
skip-show-database
local-infile=0
bind-address=localhost

Затем перезапустите сервер mysql

sudo service mysql restart

и проверьте подключение к localhost или 127.0.0.1

Пример подключения к СУБД через ssh-туннель в лучшем приложении управления mysql для Mac OS X - Sequel Pro

Подключение к СУБД через ssh-туннель в Sequel Pro