Установка phpMyAdmin из исходного кода в Debian 10

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

Благодаря phpMyAdmin пользователи могут управлять системой MariaDB через веб-интерфейс. Данный мануал содержит пошаговые инструкции по установке и защите интерфейса phpMyAdmin в Debian 10.

Требования

Примечание: MariaDB – это разработанный сообществом форк MySQL. Хотя эти два программы очень похожи, они не вполне взаимозаменяемы. Интерфейс phpMyAdmin разработан специально для управления базами MySQL и во многих диалоговых окнах ссылается именно на MySQL. Однако MariaDB тоже будет работать с phpMyAdmin.

При использовании программ вроде phpMyAdmin всегда следует учитывать, что она:

  • Взаимодействует с MariaDB напрямую;
  • Выполняет аутентификацию при помощи учётных данных MariaDB;
  • Обрабатывает и возвращает результаты для произвольных запросов SQL.

По этим причинам (а еще из-за своей распространённости) данное PHP-приложение часто подвергается атакам. Потому ни при каких обстоятельствах его нельзя запускать в удалённой системе по HTTP-соединению. Без SSL/TLS-сертификата для веб-сервера Apache использовать phpMyAdmin очень опасно.

1: Установка phpMyAdmin и дополнительных пакетов

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

Если вы выполнили мануал по установке стека LAMP, некоторые из этих модулей уже есть на вашем сервере – они были установлены вместе с пакетом php. Но мы рекомендуем также установить пакеты:

  • php-mbstring: PHP-расширение для обработки не-ASCII строк и преобразования строк в другое кодирование.
  • php-zip: модуль PHP для поддержки загрузки .zip файлов в phpMyAdmin.
  • php-gd: модуль PHP для поддержки библиотеки GD Graphics.

Обновите индекс пакетов и установите необходимые компоненты:

sudo apt update
sudo apt install php-mbstring php-zip php-gd

Теперь можно приступать к установке phpMyAdmin. На момент написания статьи phpMyAdmin не доступен в репозитории Debian по умолчанию, потому мы установим этот пакет с официального сайта проекта.

Перейдите на страницу загрузки. Найдите ссылку на последний стабильный релиз phpMyAdmin, скопируйте и загрузите ссылку, которая оканчивается на tar.gz. Эта ссылка ведет к архиву (тарболу), после распаковки которого в системе создается ряд файлов. На данный момент последним стабильным релизом является 4.9.0.1.

Примечание: На этой странице загрузки вы также увидите ссылки с метками all-languages и english. Ссылки all-languages загружают версию phpMyAdmin, в которой вы можете выбрать один из 72 языков, а english, соответственно, предоставляет вам английскую версию интерфейса.

В мануале мы используем версию all-languages для демонстрации настройки, но если вы собираетесь использовать английскую версию, просто установите пакет с меткой english.

Замените ссылку в следующей команде скопированной только что ссылкой, а затем нажмите ENTER.

wget https://files.phpmyadmin.net/phpMyAdmin/4.9.0.1/phpMyAdmin-4.9.0.1-all-languages.tar.gz

Распакуйте загруженный архив:

tar xvf phpMyAdmin-4.9.0.1-all-languages.tar.gz

Вы получите ряд новых файлов и каталогов, они будут в родительском каталоге phpMyAdmin-4.9.0.1-all-languages.

Запустите следующую команду. Она переместит каталог phpMyAdmin-4.9.0.1-all-languages и все его подкаталоги в /usr/share/. В этом расположении phpMyAdmin по умолчанию надеется найти свои конфигурационные файлы. Также команда переименует каталог в phpmyadmin.

sudo mv phpMyAdmin-4.9.0.1-all-languages/ /usr/share/phpmyadmin

Итак, phpMyAdmin установлен. Но прежде чем войти и начать работу с базами данных, вам нужно выполнить базовую настройку интерфейса.

2: Ручная настройка phpMyAdmin

При установке phpMyAdmin через пакетный менеджер, как это чаще всего делается в среде Ubuntu, вы получаете программу в режиме «Zero Configuration». Это позволяет автоматически настроить интерфейс в несколько шагов. Поскольку мы установили phpMyAdmin из исходного кода, нам нужно выполнить все эти шаги вручную.

Для начала создайте новый каталог, в котором phpMyAdmin будет хранить свои временные файлы.

sudo mkdir -p /var/lib/phpmyadmin/tmp

Передайте права на каталог пользователю www-data (это пользователь Linux, который используется веб-серверами типа Apache для работы в среде Ubuntu и Debian).

sudo chown -R www-data:www-data /var/lib/phpmyadmin

Извлеченные ранее файлы включают образец конфигурации, который можно использовать в качестве основы. Скопируйте этот файл в тот же каталог /usr/share/phpmyadmin, но переименуйте в config.inc.php:

sudo cp /usr/share/phpmyadmin/config.sample.inc.php /usr/share/phpmyadmin/config.inc.php

Откройте файл в текстовом редакторе:

sudo nano /usr/share/phpmyadmin/config.inc.php

По умолчанию phpMyAdmin использует метод аутентификации cookie, что позволяет вам входить в phpMyAdmin как любой валидный пользователь MariaDB с помощью куки. По этому методу пароль пользователя MariaDB хранится и шифруется по алгоритму Advanced Encryption Standard (AES) во временных куки.

Традиционно phpMyAdmin использовал вместо этого алгоритма шифр Blowfish, и это по-прежнему отражено в конфигурации. Прокрутите файл до строки , которая начинается с $cfg[‘blowfish_secret’]:

. . .
$cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
. . .

В единичных кавычках введите строку из 32 случайных символов. Это не пароль, ее не нужно запоминать, эта строка будет использоваться алгоритмом AES только внутренне.

. . .
$cfg['blowfish_secret'] = 'STRINGOFTHIRTYTWORANDOMCHARACTERS'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
. . .

Примечание: Если эта строка окажется короче 32 символов, ваши зашифрованные куки будут менее надежны. Если же строка будет длиннее, ничего не изменится.

Вы можете сгенерировать случайную строку с помощью инструмента pwgen. Чтобы установить его, введите:

sudo apt install pwgen

По умолчанию pwgen создает легко запоминающиеся, но не очень надежные пароли. Но с помощью флага –s мы можем создать совершенно случайную последовательность, которую сложно запомнить. Обратите внимание на два последних аргумента: 32 задает длину случайной строки, а 1 – количество случайных строк, которое нужно сгенерировать.

pwgen -s 32 1

Затем найдите комментарий /* User used to manipulate with storage */. В этом разделе содержатся некоторые директивы, которые определяют пользователя базы данных MariaDB по имени pma, который выполняет определенные административные задачи в phpMyAdmin. Согласно официальной документации, эта специальная учетная запись не нужна в тех случаях, когда доступ к phpMyAdmin имеет только один пользователь, но ее рекомендуется настроить в многопользовательских сценариях.

Раскомментируйте директивы controluser и controlpass, удалив косую черту в начале строки. Затем обновите директиву controlpass, указав в ней надежный пароль. Если вы этого не сделаете, программа будет использовать пароль по умолчанию, и неизвестные пользователи смогут легко получить доступ к вашей базе данных через интерфейс phpMyAdmin.

После внесения этих изменений этот раздел файла будет выглядеть следующим образом:

. . .
/* User used to manipulate with storage */
// $cfg['Servers'][$i]['controlhost'] = '';
// $cfg['Servers'][$i]['controlport'] = '';
$cfg['Servers'][$i]['controluser'] = 'pma';
$cfg['Servers'][$i]['controlpass'] = 'password';
. . .

Ниже вы найдете еще один раздел, с комментарием /* Storage database and tables */. Этот раздел содержит ряд директив, определяющих хранилище конфигурации phpMyAdmin, базу данных и несколько таблиц, используемых pma. Эти таблицы включают в phpMyAdmin ряд функций, в том числе вкладки, комментарии, генерацию PDF и многое другое.

Раскомментируйте каждую строку в этом разделе, удалив косую черту в начале, чтобы раздел выглядел следующим образом:

. . .
/* Storage database and tables */
$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
$cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark';
$cfg['Servers'][$i]['relation'] = 'pma__relation';
$cfg['Servers'][$i]['table_info'] = 'pma__table_info';
$cfg['Servers'][$i]['table_coords'] = 'pma__table_coords';
$cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages';
$cfg['Servers'][$i]['column_info'] = 'pma__column_info';
$cfg['Servers'][$i]['history'] = 'pma__history';
$cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs';
$cfg['Servers'][$i]['tracking'] = 'pma__tracking';
$cfg['Servers'][$i]['userconfig'] = 'pma__userconfig';
$cfg['Servers'][$i]['recent'] = 'pma__recent';
$cfg['Servers'][$i]['favorite'] = 'pma__favorite';
$cfg['Servers'][$i]['users'] = 'pma__users';
$cfg['Servers'][$i]['usergroups'] = 'pma__usergroups';
$cfg['Servers'][$i]['navigationhiding'] = 'pma__navigationhiding';
$cfg['Servers'][$i]['savedsearches'] = 'pma__savedsearches';
$cfg['Servers'][$i]['central_columns'] = 'pma__central_columns';
$cfg['Servers'][$i]['designer_settings'] = 'pma__designer_settings';
$cfg['Servers'][$i]['export_templates'] = 'pma__export_templates';
. . .

Эти таблицы еще не существуют, но скоро мы их создадим.

Перейдите в конец файла и добавьте следующую строку. Это настроит phpMyAdmin на использование каталога /var/lib/phpmyadmin/tmp, который вы создали ранее, в качестве своего временного каталога. phpMyAdmin будет использовать этот временный каталог для кэша шаблонов, который позволяет быстрее загружать страницы:

. . .
$cfg['TempDir'] = '/var/lib/phpmyadmin/tmp';

Сохраните и закройте файл (CTRL + X, Y, затем ENTER).

Затем вам нужно создать базу данных и таблицы конфигурации phpMyAdmin. Когда вы установили phpMyAdmin, вместе с тем вы установили файл create_tables.sql. Этот файл SQL содержит все команды, необходимые для создания базы данных хранилища конфигурации и таблиц, которые нужны phpMyAdmin для того чтобы правильно функционировать.

Выполните следующую команду, чтобы использовать файл create_tables.sql для создания базы данных и таблиц конфигурации:

sudo mariadb < /usr/share/phpmyadmin/sql/create_tables.sql

После этого вам нужно создать администратора pma. Откройте командную строку  MariaDB:

sudo mariadb

В командной строке выполните следующую команду, чтобы создать пользователя pma и предоставить ему соответствующие права. Обязательно измените пароль  — он должен соответствовать паролю, который вы определили в файле config.inc.php:

GRANT SELECT, INSERT, UPDATE, DELETE ON phpmyadmin.* TO 'pma'@'localhost' IDENTIFIED BY 'password';

Если вы еще не сделали этого, вам также следует создать обычного пользователя MariaDB для управления базами данных через phpMyAdmin: входить в систему рекомендуется через другую учетную запись, не через пользователя pma. С помощью этой команды вы можете создать пользователя, который имеет доступ ко всем таблицам в базе данных, а также права добавлять, изменять и удалять привилегии пользователей. Какие бы привилегии вы ни делегировали этому пользователю, обязательно выберите для него надежный пароль:

GRANT ALL PRIVILEGES ON *.* TO '8host'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;

После этого выйдите из оболочки MariaDB:

exit

3: Настройка Apache для обслуживания phpMyAdmin

При установке phpMyAdmin из репозитория по умолчанию процесс установки автоматически создает файл конфигурации для Apache и помещает его в каталог /etc/apache2/conf-enabled/. Поскольку мы установили phpMyAdmin из исходного кода, нам нужно создать и включить этот файл вручную.

Создайте файл phpmyadmin.conf в каталоге /etc/apache2/conf-available/:

sudo nano /etc/apache2/conf-available/phpmyadmin.conf

Добавьте в него такое содержимое:

# phpMyAdmin default Apache configuration
Alias /phpmyadmin /usr/share/phpmyadmin
<Directory /usr/share/phpmyadmin>
Options SymLinksIfOwnerMatch
DirectoryIndex index.php
<IfModule mod_php5.c>
<IfModule mod_mime.c>
AddType application/x-httpd-php .php
</IfModule>
<FilesMatch ".+\.php$">
SetHandler application/x-httpd-php
</FilesMatch>
php_value include_path .
php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp
php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext/:/usr/share/php/php-php-gettext/:/usr/share/javascript/:/usr/share/php/tcpdf/:/usr/share/doc/phpmyadmin/:/usr/share/php/phpseclib/
php_admin_value mbstring.func_overload 0
</IfModule>
<IfModule mod_php.c>
<IfModule mod_mime.c>
AddType application/x-httpd-php .php
</IfModule>
<FilesMatch ".+\.php$">
SetHandler application/x-httpd-php
</FilesMatch>
php_value include_path .
php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp
php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext/:/usr/share/php/php-php-gettext/:/usr/share/javascript/:/usr/share/php/tcpdf/:/usr/share/doc/phpmyadmin/:/usr/share/php/phpseclib/
php_admin_value mbstring.func_overload 0
</IfModule>
</Directory>
# Authorize for setup
<Directory /usr/share/phpmyadmin/setup>
<IfModule mod_authz_core.c>
<IfModule mod_authn_file.c>
AuthType Basic
AuthName "phpMyAdmin Setup"
AuthUserFile /etc/phpmyadmin/htpasswd.setup
</IfModule>
Require valid-user
</IfModule>
</Directory>
# Disallow web access to directories that don't need it
<Directory /usr/share/phpmyadmin/templates>
Require all denied
</Directory>
<Directory /usr/share/phpmyadmin/libraries>
Require all denied
</Directory>
<Directory /usr/share/phpmyadmin/setup/lib>
Require all denied
</Directory>

Это стандартный файл конфигурации phpMyAdmin для Apache, который можно найти в установках Ubuntu – но он хорошо подходит и для Debian.

Сохраните и закройте файл, а затем включите его:

sudo a2enconf phpmyadmin.conf

Затем перезагрузите сервис apache2, чтобы изменения вступили в силу:

sudo systemctl reload apache2

После этого можно получить доступ к странице входа в phpMyAdmin, для этого откройте следующий URL-адрес в веб-браузере:

https://your_domain/phpmyadmin

Чтобы получить доступ к интерфейсу, используйте имя и пароль вашего пользователя MariaDB.

Теперь, когда вы настроили установку phpMyAdmin и можете работать с ней в браузере, пора защитить phpMyAdmin.

4: Защита phpMyAdmin

Из-за своей распространённости PhpMyAdmin часто подвергается атакам хакеров. На данном этапе необходимо обеспечить интерфейсу достаточный уровень защиты для предотвращения вредоносного использования.

Один из самых простых способ защиты phpMyAdmin – размещение шлюза безопасности. Это делается при помощи специальных файлов Apache под названием .htaccess.

Сначала нужно включить поддержку файлов .htaccess, для этого отредактируйте конфигурационный файл Apache.

sudo nano /etc/apache2/conf-available/phpmyadmin.conf

В раздел <Directory /usr/share/phpmyadmin> нужно добавить параметр AllowOverride All:

<Directory /usr/share/phpmyadmin>
Options FollowSymLinks
DirectoryIndex index.php
AllowOverride All
<IfModule mod_php5.c>
. . .

Сохраните и закройте файл.

Перезапустите Apache:

sudo systemctl restart apache2

Теперь сервер поддерживает файлы .htaccess; нужно только создать такой файл.

Для корректной работы необходимо создать такой файл в каталоге приложения. Для этого введите:

sudo nano /usr/share/phpmyadmin/.htaccess

Вставьте в файл:

AuthType Basic
AuthName "Restricted Files"
AuthUserFile /etc/phpmyadmin/.htpasswd
Require valid-user

Рассмотрим эти строки подробнее:

  • AuthType Basic задает тип авторизации; в данном случае используется аутентификация по паролю с помощью файла паролей .htpasswd.
  • AuthName содержит текст сообщения диалогового окна аутентификации. Чтобы неавторизованные пользователи не могли получить дополнительной информации о закрытом приложении, это сообщение не должно содержать подробностей, а только общие данные.
  • AuthUserFile задает расположение файла паролей htpasswd, который будет использоваться для авторизации. Он должен находиться вне обслуживаемых каталогов. Такой файл будет создан позже.
  • Require valid-user указывает, что доступ к этому ресурсу могут получить только авторизованные пользователи. Именно этот параметр защищает ресурс от неавторизованных пользователей.

Сохраните и закройте файл.

Файл с паролями нужно создать в каталоге, заданном в директиве AuthUserFile, в данном случае это /etc/phpmyadmin/.htpasswd.

sudo htpasswd -c /usr/share/phpmyadmin/.htpasswd username

Вам будет предложено выбрать и подтвердить пароль нового пользователя. После этого файл .htpasswd будет создан, а только что введённый пароль будет помещен в него в хэшированном виде.

Чтобы добавить в файл еще одного пользователя, используйте вышеприведенную команду без флага –с:

sudo htpasswd /etc/phpmyadmin/.htpasswd additionaluser

Теперь при входе в подкаталог phpMyAdmin будут запрашиваться учетные данные пользователя:

https://domain_name_or_IP/phpmyadmin
The server http://111.111.11.111:22 requires a username and password. The server says: Restricted Files.
User Name:
Password:

Только после аутентификации пользователь сможет получить доступ к странице авторизации phpMyAdmin. Это установит дополнительный уровень безопасности, который защитит веб-интерфейс phpMyAdmin от атак методом подбора паролей.

Заключение

Теперь phpMyAdmin установлен, запущен и надежно защищен от злоумышленников. При помощи этого интерфейса можно быстро и легко создавать базы данных, пользователей, таблицы и т.п., а также выполнять такие рутинные задачи как удаление и редактирование структур и данных.

Tags: , ,
  • youdocss style

    Спасибо, вы мне очень помогли.
    Я прохожу сейчас практику, с целью научиться как-раз настраивать веб-сервер на debian 10, и я долго искал полезную информацию соответсвующую моей цели, и вот нашел, спасибо вам!