Особенности установки и настройки MariaDB в Debian 9

  • Автор:

mariadb-debian-000.pngНачиная с версии Debian 9 популярную систему управления базами данных MySQL заменила MariaDB. Данная СУБД является ответвлением от MySQL созданная ее первоначальными разработчиками, которые оказались недовольны лицензионной политикой Oracle и испытывали опасения, что MySQL может стать более закрытым продуктом. MariaDB является полностью совместимой с MySQL, а это значит, что замена произойдет максимально прозрачно и все приложения, которые работали с MySQL также будут работать с MariaDB. А мы же рассмотрим некоторые особенности этого перехода.

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

Но есть и отличия, прежде всего они касаются безопасности и были внесены командой Debian. Одним из основных отличий является то, то MariaDB входящая в состав Debian 9 не запрашивает пароль root при установке. После чего пользователь остается в некоторой растерянности, а что делать дальше? Масла в огонь подливает тот факт, что большинство инструкций в сети интернет рассматривают управление MySQL сугубо через панель управления phpMyAdmin, и не имеющие навыков работы в командной строке пользователи оказываются в особо беспомощном состоянии.

"Как установить пароль root в MariaDB" в разных вариациях является одним из популярных поисковых запросов, связанных с этой СУБД. Но не будем рубить с плеча, а сначала разберемся, что сделали разработчики Debian и для чего.

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

Поэтому в Debian для суперпользователя root в MariaDB предусмотрена аутентификация через UNIX-сокет и реализована она таким образом, что неограниченный доступ к MariaDB может получить только суперпользовтаель системы и только в режиме командной строки. С точки зрения безопасности это очень правильно, так как теперь сторонние пользователи и веб-приложения не смогут получить доступ с правами root, даже если они каким-то образом узнали пароль.

Все это хорошо, но что делать обычному пользователю, который поставил MariaDB на свой сервер и хочет залить на нее дамп базы сайта? Прежде всего завести пользователя, лучше даже не одного. Для этого поднимем свои права в системе до root через su или sudo и выполним команду:

mysql -u root

После чего вы окажетесь в командной строке MariaDB. Для того, чтобы создать нового пользователя выполним команду:

create user 'andrey'@'localhost' identified by 'password';

В нашем примере мы создали пользователя andrey с паролем password.

Теперь назначим ему права. Прежде всего явно заберем права на чужие базы:

grant usage on *.* to 'andrey'@'localhost';

И выдадим полные права на базы с шаблоном имени andrey_basename, такой подход позволит автоматически давать права всем новым базам которые будет создавать пользователь.

grant all privileges on `andrey\_%`.* to 'andrey'@'localhost';

Обратите внимание, что шаблон оборачивается символами грависа (`), который находится на клавише с русской буквой Ё.

Остается только перезагрузить привелегии и выйти из консоли MariaDB

flush privileges;
quit;

После чего можно вернуться к привычным инструментам работы с MySQL/MariaDB, например, phpMyAdmin:

mariadb-debian-001.pngОбратите внимание, что данный способ, в отличие от распространенных рекомендаций "включить root в MariaDB", позволяет сохранить повышенную безопасность системы, что важно, если доступ к ней будут иметь третьи лица. Также мы не советуем держать все базы под одним пользователем, в идеале один сайт (или иное приложение) - один пользователь, это позволит без лишних затрат времени и сил сменить пароль в случае его компрометации или ее потенциальной возможности (скажем вы привлекали для работ с сайтом фрилансера).

Установка MariaDB из репозиториев разработчика

Операционная система Debian имеет много достоинств, одно из них, за которое его больше всего любят - это стабильность. Настроил и забыл - это как раз про него, но оборотной стороной такого подхода является консервативность, многие пакеты имеют не столь свежие версии, как иногда хотелось бы. В настоящий момент вместе с Debian 9 поставляется MariaDB 10.1, в то время как текущими версиями являются 10.2 и 10.3.

Поэтому если вам нужны какие-то новые функции MariaDB или вы просто хотите использовать последние стабильные версии софта, то можете установить MariaDB непосредственно из репозиториев разработчика. Сделать это несложно, но перед любым потенциально опасным действием следует сделать полную резервную копию вашего сервера.

Для этого выполните в консоли сервера с правами суперпользователя следующую команду:

mysqldump -u root --all-databases > ~/my_backup.sql

Эта команда сохранит все базы MariaDB, включая служебные, в файл my_backup.sql в директории /root и, если что-то пойдет не так, вы всегда сможете восстановить состояние вашего сервера на момент создания копии.

Получить инструкции по установке можно на специальной странице официального сайта.

mariadb-debian-002.pngСделана она очень удобно: вы выбираете свой дистрибутив, его выпуск, версию СУБД и зеркало - после чего получаете готовую инструкцию для установки. Чтобы сэкономить вам время приведем ее здесь (мы будем устанавливать MariaDB 10.3 на Debian 9):

apt-get install software-properties-common dirmngr
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xF1656F24C74CD1D8
add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://mirror.mephi.ru/mariadb/repo/10.3/debian stretch main'

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

Теперь обновим список пакетов:

apt-get update

и установим новую версию MariaDB:

apt-get install mariadb-server

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

mariadb-debian-003.pngВторой момент, при установке MariaDB от разработчиков инсталлятор попросит у вас задать пароль root, так как в этой версии аутентификация через UNIX-сокет не используется.

mariadb-debian-004.pngКого-то может это и порадует, но если вы успели понять и оценить все достоинства способа от разработчиков Debain, то возникнет резонный вопрос: а можно ли вернуть как было? Можно. Для этого откройте конфигурационный файл /etc/mysql/mariadb.conf.d/50-server.cnf и добавьте в секцию [mysqld] строку:

plugin-load-add = auth_socket.so

Перезапустим СУБД:

service mysqld restart

Попробуем войти из учетной записи обычного пользователя:

mariadb-debian-005.pngНесмотря на то, что система спросит нас пароль и мы его правильно введем - в доступе нам будет все равно отказано. Повторим попытку через phpMyAdmin:

mariadb-debian-006.pngИ здесь успеха у нас не будет. Отлично! Теперь доступ с правами суперпользователя СУБД имеет только суперпользователь системы и нам не нужно беспокоиться, что пароль root MariaDB станет известен кому-либо.

Дополнительные материалы:


  1. Основы администрирования MySQL при помощи командной строки
  2. Особенности установки и настройки MariaDB в Debian 9