Как установить phpMyAdmin из исходного кода на Debian 10
Введение
Хотя многим пользователям нужны функциональные возможности системы управления базами данных, такой как MariaDB, им может быть неудобно взаимодействовать с системой исключительно из командной строки MariaDB.
phpMyAdmin был создан для того, чтобы пользователи могли взаимодействовать с MariaDB через веб-интерфейс. В этом руководстве мы обсудим, как установить и защитить phpMyAdmin, чтобы вы могли безопасно использовать его для управления своими базами данных в системе Debian 10.
Предпосылки
Прежде чем приступить к работе с этим руководством, вам потребуется следующее:
- Доступ к серверу Debian 10. На этом сервере должен быть пользователь без полномочий root с привилегиями
sudo
и брандмауэр, настроенный с помощьюufw
. Чтобы настроить это, следуйте нашему Руководству по начальной настройке сервера для Debian 10. - Стек LAMP (Linux, Apache, MariaDB и PHP), установленный на вашем сервере Debian 10. Следуйте нашему руководству по установке стека LAMP в Debian 10, чтобы настроить его.
Примечание. MariaDB — это форк MySQL, разработанный сообществом, и хотя эти две программы тесно связаны, они не полностью взаимозаменяемы. Хотя phpMyAdmin был разработан специально для управления базами данных MySQL и ссылается на MySQL в различных диалоговых окнах, будьте уверены, что ваша установка MariaDB будет корректно работать с phpMyAdmin.
Наконец, существуют важные соображения безопасности при использовании такого программного обеспечения, как phpMyAdmin, поскольку оно:
- Общается напрямую с вашей установкой MariaDB
- Обрабатывает аутентификацию с использованием учетных данных MariaDB.
- Выполняет произвольные запросы SQL и возвращает результаты.
По этим причинам, а также потому, что это широко распространенное PHP-приложение, которое часто подвергается атакам, вам никогда не следует запускать phpMyAdmin на удаленных системах через обычное HTTP-соединение.
Если у вас нет существующего домена, настроенного с сертификатом SSL/TLS, вы можете следовать этому руководству по настройке виртуального хоста Apache.
Выполнив эти шаги, вы готовы приступить к работе с этим руководством.
Шаг 1 — Установка phpMyAdmin и рекомендуемых пакетов
Перед установкой и настройкой phpMyAdmin в официальной документации рекомендуется установить на сервер несколько расширений PHP, чтобы активировать определенные функции и повысить производительность.
Если вы следовали предварительному руководству по стеку LAMP, некоторые из этих модулей будут установлены вместе с пакетом php
. Однако рекомендуется также установить эти пакеты:
php-mbstring
: расширение PHP, используемое для управления строками, отличными от ASCII, и преобразования строк в другие кодировкиphp-zip
: модуль PHP, поддерживающий загрузку файлов.zip
в phpMyAdminphp-gd
: еще один модуль PHP, обеспечивающий поддержку графической библиотеки GD
Во-первых, обновите индекс пакетов вашего сервера, если вы не сделали этого в последнее время:
- sudo apt update
Затем используйте apt
, чтобы извлечь файлы и установить их в вашей системе:
- sudo apt install php-mbstring php-zip php-gd
Далее мы можем установить phpMyAdmin. На момент написания этой статьи phpMyAdmin недоступен в репозиториях Debian по умолчанию, поэтому вам необходимо загрузить исходный код на свой сервер с сайта phpMyAdmin.
Для этого перейдите на страницу загрузок phpMyAdmin, прокрутите вниз до таблицы со ссылками для скачивания последней стабильной версии и скопируйте ссылку для скачивания, оканчивающуюся на tar.gz
. Эта ссылка указывает на архивный файл, известный как tarball, который при распаковке создаст ряд файлов в вашей системе. На момент написания этой статьи последней версией была версия 4.9.7.
Примечание. На этой странице загрузок вы увидите ссылки для скачивания с пометками all-languages
и english
. Ссылки all-languages
позволяют загрузить версию phpMyAdmin, позволяющую выбрать один из 72 доступных языков, а ссылки english
позволяют использовать phpMyAdmin только на английском языке. .
В этом руководстве будет использоваться пакет all-languages
, чтобы показать, как установить phpMyAdmin, но если вы планируете использовать phpMyAdmin на английском языке, вы можете установить пакет english
. Просто не забудьте заменить ссылки и имена файлов по мере необходимости в следующих командах.
Замените ссылку в следующей команде wget
ссылкой для скачивания, которую вы только что скопировали, затем нажмите ENTER
. Это запустит команду и загрузит архив на ваш сервер:
- wget https://files.phpmyadmin.net/phpMyAdmin/4.9.7/phpMyAdmin-4.9.7-all-languages.tar.gz
Затем распакуйте архив:
- tar xvf phpMyAdmin-4.9.7-all-languages.tar.gz
Это создаст ряд новых файлов и каталогов на вашем сервере в родительском каталоге с именем phpMyAdmin-4.9.7-all-languages
.
Затем выполните следующую команду. Это переместит каталог phpMyAdmin-4.9.7-all-languages
и все его подкаталоги в /usr/share/
каталог, место, где phpMyAdmin ожидает найти свои файлы конфигурации по умолчанию. Он также переименует существующий каталог просто в phpmyadmin
:
- sudo mv phpMyAdmin-4.9.7-all-languages/ /usr/share/phpmyadmin
Таким образом, вы установили phpMyAdmin, но необходимо внести ряд изменений в конфигурацию, чтобы получить доступ к phpMyAdmin через веб-браузер.
Шаг 2 — Настройка phpMyAdmin вручную
При установке phpMyAdmin с помощью диспетчера пакетов, как и в среде Ubuntu, 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
Откройте этот файл с помощью предпочитаемого вами текстового редактора. Здесь мы будем использовать nano
:
- sudo nano /usr/share/phpmyadmin/config.inc.php
phpMyAdmin по умолчанию использует метод аутентификации cookie
, что позволяет вам войти в phpMyAdmin как любой действительный пользователь MariaDB с помощью алгоритма Advanced Encryption Standard (AES) во временном файле cookie.
Исторически сложилось так, что вместо этого 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 символов, это приведет к тому, что зашифрованные файлы cookie будут менее безопасными. Однако ввод строки длиннее 32 символов не причинит никакого вреда.
Чтобы сгенерировать действительно случайную строку символов, вы можете установить и использовать программу pwgen
:
- sudo apt install pwgen
По умолчанию pwgen
создает легко произносимые, хотя и менее безопасные пароли. Однако, включив флаг -s
, как в следующей команде, вы можете создать совершенно случайный, сложный для запоминания пароль. Обратите внимание на два последних аргумента этой команды: 32
, определяющий, какой длины должна быть сгенерированная строка пароля pwgen
; и 1
, который сообщает pwgen
, сколько строк он должен сгенерировать:
- pwgen -s 32 1
Затем прокрутите вниз до комментария /* Пользователь, используемый для управления хранилищем */
. Этот раздел включает в себя некоторые директивы, определяющие пользователя базы данных 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';
. . .
Ниже этого раздела вы найдете еще один раздел, которому предшествует комментарий: /* База данных и таблицы хранилища */
. Этот раздел включает в себя ряд директив, определяющих хранилище конфигурации 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';
Сохраните и закройте файл после добавления этой строки. Если вы использовали nano
, вы можете сделать это, нажав 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 и предоставить ему соответствующие разрешения. Обязательно измените password
, чтобы он совпадал с паролем, который вы определили в файле config.inc.php
:
- GRANT SELECT, INSERT, UPDATE, DELETE ON phpmyadmin.* TO 'pma'@'localhost' IDENTIFIED BY 'password';
Если вы еще не создали его, вам также следует создать обычного пользователя MariaDB для управления базами данных через phpMyAdmin, поскольку рекомендуется входить в систему, используя другую учетную запись, а не пользователя pma. С помощью этой команды вы можете создать пользователя, который имеет привилегии ко всем таблицам в базе данных, а также право добавлять, изменять и удалять пользовательские привилегии. Какие бы привилегии вы ни назначали этому пользователю, обязательно дайте ему надежный пароль:
- GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
После этого выйдите из оболочки MariaDB:
- exit
Теперь phpMyAdmin полностью установлен и настроен на вашем сервере. Однако ваш сервер Apache еще не знает, как обслуживать приложение. Чтобы решить эту проблему, мы создадим для него файл конфигурации Apache.
Шаг 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, все, что осталось сделать, это усилить безопасность вашей системы, чтобы защитить ее от злоумышленников.
Шаг 4 — Защита вашего экземпляра phpMyAdmin
Из-за своего повсеместного распространения phpMyAdmin является популярной мишенью для злоумышленников, и вам следует проявлять особую осторожность, чтобы предотвратить несанкционированный доступ. Один из самых простых способов сделать это — разместить шлюз перед всем приложением, используя встроенные в Apache функции аутентификации и авторизации .htaccess
.
Для этого вы должны сначала разрешить использование переопределений файла .htaccess
, отредактировав файл конфигурации Apache.
Отредактируйте связанный файл, который был помещен в каталог конфигурации Apache:
- sudo nano /etc/apache2/conf-available/phpmyadmin.conf
Добавьте директиву 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 /usr/share/phpmyadmin/.htpasswd
Require valid-user
Вот что означает каждая из этих строк:
AuthType Basic
: в этой строке указывается тип аутентификации, который вы реализуете. Этот тип реализует аутентификацию по паролю с использованием файла паролей.AuthName
: устанавливает сообщение для диалогового окна аутентификации. Вы должны оставить его общим, чтобы неавторизованные пользователи не могли получить информацию о том, что защищается.AuthUserFile
: задает расположение файла паролей, который будет использоваться для аутентификации. Это должно быть за пределами каталогов, которые обслуживаются. Вскоре мы создадим этот файл.Require valid-user
: указывает, что доступ к этому ресурсу должен быть предоставлен только пользователям, прошедшим проверку подлинности. Это то, что на самом деле предотвращает вход неавторизованных пользователей.
Когда вы закончите, сохраните и закройте файл.
Место, которое вы выбрали для своего файла паролей, было /usr/share/phpmyadmin/.htpasswd
. Теперь вы можете создать этот файл и передать его первому пользователю с помощью утилиты htpasswd
:
- sudo htpasswd -c /usr/share/phpmyadmin/.htpasswd username
Вам будет предложено выбрать и подтвердить пароль для создаваемого пользователя. После этого создается файл с введенным вами хешированным паролем.
Если вы хотите ввести дополнительного пользователя, вам нужно сделать это без флага -c
, например:
- sudo htpasswd /etc/phpmyadmin/.htpasswd additionaluser
Теперь при доступе к подкаталогу phpMyAdmin вам будет предложено ввести дополнительное имя учетной записи и пароль, которые вы только что настроили:
https://your_domain_or_IP/phpmyadmin
После входа в систему аутентификации Apache вы попадете на обычную страницу аутентификации phpMyAdmin, чтобы ввести свои учетные данные MariaDB. Эта настройка добавляет дополнительный уровень безопасности, что желательно, поскольку в прошлом phpMyAdmin страдал от уязвимостей.
Заключение
Теперь у вас должен быть настроен phpMyAdmin и он готов к использованию на вашем сервере Debian 10. Используя этот интерфейс, вы можете легко создавать базы данных, пользователей, таблицы и т. д., а также выполнять обычные операции, такие как удаление и изменение структур и данных.