Установка 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: , ,

2 комментария

  • youdocss style says:

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

  • Вадим Соловьёв says:

    После последних манипуляций такая уйня!
    Internal Server Error
    The server encountered an internal error or misconfiguration and was unable to complete your request.

    Please contact the server administrator at webmaster@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

    More information about this error may be available in the server error log.

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