Вступление
В то время как многим пользователям нужна функциональность системы управления базами данных, такой как MariaDB, им может быть неудобно взаимодействовать с системой исключительно из подсказки MariaDB.
phpMyAdmin был создан для того, чтобы пользователи могли взаимодействовать с MariaDB через веб-интерфейс. В этом руководстве мы обсудим, как установить и защитить phpMyAdmin, чтобы вы могли безопасно использовать его для управления базами данных в системе Debian 10.
Предпосылки
Прежде чем начать работу с этим руководством, вам потребуется следующее:
-
Доступ к серверу Debian 10. На этом сервере должен быть пользователь без полномочий root с привилегиями
+ sudo +
и брандмауэр, настроенный с помощью+ ufw +
. Чтобы настроить это, следуйте нашему Initial Руководству по установке сервера для Debian 10. -
На вашем сервере Debian 10 установлен стек LAMP ( L inux, A pache, M ariaDB и P HP). Следуйте нашему руководству по https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mariadb-php-lamp-stack-on-debian-10 при установке стека LAMP в Debian 10]. установить это.
Наконец, при использовании программного обеспечения, такого как phpMyAdmin, существуют важные соображения безопасности, поскольку оно:
-
Общается напрямую с вашей установкой MariaDB
-
Обрабатывает аутентификацию с использованием учетных данных MariaDB
-
Выполняет и возвращает результаты для произвольных запросов SQL
По этим причинам, а также потому, что это широко развернутое PHP-приложение, которое часто предназначено для атак, вы никогда не должны запускать phpMyAdmin в удаленных системах через обычное HTTP-соединение.
Если у вас нет существующего домена, настроенного с сертификатом SSL / TLS, вы можете следовать этому руководству на https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s- encrypt-on-debian-10 [защищающий Apache с помощью Let’s Encrypt на Debian 10], чтобы установить его. Для этого вам потребуется register имя домена, https: // www .digitalocean.com / community / tutorials / anstruction-to-digitalocean-dns [создать записи DNS для вашего сервера] и https://www.digitalocean.com/community/tutorials/how-to-install-linux- apache-mariadb-php-lamp-stack-on-debian-10 # step-4-% E2% 80% 94-создание-виртуального хоста для вашего сайта [настроить виртуальный хост Apache].
Когда вы закончите с этими шагами, вы готовы начать работу с этим руководством.
Шаг 1 - Установка phpMyAdmin и рекомендуемых пакетов
Перед установкой и настройкой phpMyAdmin в official документация рекомендует установить на сервер несколько расширений PHP, чтобы включить определенные функции и повысить производительность.
Если вы выполнили обязательное условие Lacher stack stack tutorial, некоторые из эти модули будут установлены вместе с пакетом + php +
. Тем не менее, рекомендуется также установить эти пакеты:
-
+ php-mbstring +
: расширение PHP, используемое для управления строками не-ASCII и преобразования строк в различные кодировки -
+ php-zip +
: модуль PHP, который поддерживает загрузку файлов+ .zip +
в phpMyAdmin -
+ php-gd +
: еще один модуль PHP, включающий поддержку GD Graphics Library
Сначала обновите индекс пакета вашего сервера, если вы еще этого не сделали:
sudo apt update
Затем используйте + apt +
, чтобы вытащить файлы и установить их в вашей системе:
sudo apt install php-mbstring php-zip php-gd
Далее мы можем установить phpMyAdmin. На момент написания статьи phpMyAdmin не был доступен в репозиториях Debian по умолчанию, поэтому вам нужно будет загрузить исходный код на свой сервер с сайта phpMyAdmin.
Для этого перейдите на страницу phpMyAdmin Downloads, прокрутите вниз до таблицы со ссылками на скачивание для последней стабильной версии и скопируйте ссылку на скачивание, заканчивающуюся `+ tar.gz + `. Эта ссылка указывает на архивный файл, известный как tarball, который при извлечении создаст несколько файлов в вашей системе. На момент написания этой статьи последняя версия - версия 4.9.0.1.
Замените ссылку в следующей команде + wget +
ссылкой, которую вы только что скопировали, затем нажмите + ENTER +
. Это запустит команду и загрузит архив на ваш сервер:
wget https://files.phpmyadmin.net/phpMyAdmin//phpMyAdmin--.tar.gz
Затем распакуйте архив:
tar xvf phpMyAdmin--.tar.gz
Это создаст ряд новых файлов и каталогов на вашем сервере в родительском каталоге с именем + phpMyAdmin - +
.
Затем выполните следующую команду. Это переместит каталог + phpMyAdmin - +
и все его подкаталоги в каталог + / usr / share / +
, куда phpMyAdmin ожидает найти свои файлы конфигурации по умолчанию. Он также переименует каталог на место, чтобы просто + phpmyadmin
:
sudo mv phpMyAdmin--/ /usr/share/phpmyadmin
После этого вы установили phpMyAdmin, но необходимо внести ряд изменений в конфигурацию, чтобы иметь возможность доступа к phpMyAdmin через веб-браузер.
Шаг 2 - Настройка phpMyAdmin вручную
При установке phpMyAdmin с менеджером пакетов, как это может быть в среде Ubuntu, phpMyAdmin по умолчанию переключается в режим «Zero Configuration», который автоматически выполняет несколько действий по настройке программы. Поскольку мы установили его из источника в этом руководстве, нам нужно будет выполнить эти шаги вручную.
Для начала создайте новый каталог, в котором 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 с помощью cookies. В этом методе пароль пользователя MariaDB хранится и шифруется с помощью алгоритма Advanced Encryption Standard (AES) во временном файле cookie.
Исторически phpMyAdmin вместо этого использовал для этой цели Blowfish cipher, и это все еще отражается в его файле конфигурации. Прокрутите вниз до строки, которая начинается с + $ cfg ['blowfish_secret'] +
. Это будет выглядеть так:
/usr/share/phpmyadmin/config.inc.php
. . .
$cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
. . .
Между одинарными кавычками введите строку из 32 случайных символов. Это не ключевая фраза, которую вы должны помнить, она просто будет использоваться внутри алгоритма AES:
/usr/share/phpmyadmin/config.inc.php
. . .
$cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
. . .
Далее, прокрутите вниз до комментария, читающего + / * Пользователь, используемый для манипулирования с хранилищем * / +
. В этом разделе содержатся некоторые директивы, определяющие пользователя базы данных MariaDB с именем * pma *, который выполняет определенные административные задачи в phpMyAdmin. https://docs. многопользовательские сценарии.
Раскомментируйте директивы + controluser +
и + controlpass +
, удалив предыдущие косые черты. Затем обновите директиву + controlpass +
, чтобы указать безопасный пароль по вашему выбору. Если вы этого не сделаете, пароль по умолчанию останется на месте, и неизвестные пользователи могут легко получить доступ к вашей базе данных через интерфейс phpMyAdmin.
После внесения этих изменений этот раздел файла будет выглядеть следующим образом:
/usr/share/phpmyadmin/config.inc.php
. . .
/* User used to manipulate with storage */
// $cfg['Servers'][$i]['controlhost'] = '';
// $cfg['Servers'][$i]['controlport'] = '';
$cfg['Servers'][$i]['controluser'] = 'pma';
$cfg['Servers'][$i]['controlpass'] = '';
. . .
Ниже этого раздела вы найдете другой раздел, которому предшествует комментарий, читающий + / * База данных хранилища и таблицы * / +
. Этот раздел включает ряд директив, определяющих phpMyAdmin хранилище конфигурации, базу данных и несколько таблиц, используемых административной * pma * пользователь базы данных. Эти таблицы включают ряд функций в phpMyAdmin, в том числе закладки, комментарии, генерацию PDF и многое другое.
Раскомментируйте каждую строку в этом разделе, удалив косую черту в начале каждой строки, чтобы она выглядела следующим образом:
/usr/share/phpmyadmin/config.inc.php
. . .
/* 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 будет использовать этот временный каталог в качестве кэша шаблонов, который позволяет быстрее загружать страницы:
/usr/share/phpmyadmin/config.inc.php
. . .
Сохраните и закройте файл после добавления этой строки. Если вы использовали + 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 * и предоставить ему соответствующие разрешения. Обязательно измените ++
, чтобы он соответствовал паролю, который вы определили в файле + config.inc.php +
:
GRANT SELECT, INSERT, UPDATE, DELETE ON phpmyadmin.* TO 'pma'@'localhost' IDENTIFIED BY '';
Если вы еще не создали его, вам также следует создать обычного пользователя MariaDB для управления базами данных через phpMyAdmin, поскольку рекомендуется входить в систему с использованием другой учетной записи, отличной от пользователя * pma *. С помощью этой команды вы можете создать пользователя, который имеет привилегии для всех таблиц в базе данных, а также полномочия добавлять, изменять и удалять привилегии пользователей. Какие бы привилегии вы ни назначали этому пользователю, обязательно дайте ему также надежный пароль:
GRANT ALL PRIVILEGES ON *.* TO ''@'localhost' IDENTIFIED BY '' 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
Затем добавьте следующее содержимое в файл
/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:///phpmyadmin
Вы увидите следующий экран входа в систему:
изображение: https: //assets.digitalocean.com/articles/phpmyadmin_deb10/phpmyadmin_login_blank.png [экран входа phpMyAdmin]
Войдите в интерфейс с именем пользователя и паролем MariaDB, которые вы настроили. После входа вы увидите пользовательский интерфейс, который будет выглядеть примерно так:
изображение: https: //assets.digitalocean.com/articles/phpmyadmin_deb10/phpmyadmin_ui_deb10.png [пользовательский интерфейс phpMyAdmin]
Теперь, когда вы можете подключаться и взаимодействовать с phpMyAdmin, вам остается только укрепить безопасность вашей системы и защитить ее от злоумышленников.
Шаг 4. Защита вашего экземпляра phpMyAdmin
Из-за своей повсеместности phpMyAdmin является популярной целью для злоумышленников, и вы должны быть особенно осторожны, чтобы предотвратить несанкционированный доступ. Один из самых простых способов сделать это - разместить шлюз перед всем приложением с помощью встроенных в Apache функций аутентификации и авторизации + .htaccess.
Для этого вы должны сначала разрешить использование переопределений файлов + .htaccess +
, отредактировав файл конфигурации Apache.
Отредактируйте связанный файл, который был помещен в ваш каталог конфигурации Apache:
sudo nano /etc/apache2/conf-available/phpmyadmin.conf
Добавьте директиву + AllowOverride All +
в секции + <Directory / usr / share / phpmyadmin> +
файла конфигурации, например так:
/etc/apache2/conf-available/phpmyadmin.conf
<Directory /usr/share/phpmyadmin>
Options FollowSymLinks
DirectoryIndex index.php
<IfModule mod_php5.c>
. . .
Когда вы добавите эту строку, сохраните и закройте файл.
Чтобы применить сделанные изменения, перезапустите Apache:
sudo systemctl restart apache2
Теперь, когда вы включили использование + .htaccess +
для своего приложения, вам нужно создать его, чтобы реально реализовать некоторую безопасность.
Для того, чтобы это было успешно, файл должен быть создан в каталоге приложения. Вы можете создать необходимый файл и открыть его в текстовом редакторе с правами root, набрав:
sudo nano /usr/share/phpmyadmin/.htaccess
В этом файле введите следующее содержимое:
/usr/share/phpmyadmin/.htaccess
Вот что означает каждая из этих строк:
-
+ AuthType Basic +
: в этой строке указывается тип аутентификации, который вы реализуете. Этот тип будет реализовывать аутентификацию по паролю с использованием файла пароля. -
+ AuthName +
: устанавливает сообщение для диалогового окна аутентификации. Вы должны сохранить этот универсальный шаблон, чтобы неавторизованные пользователи не получали никакой информации о том, что защищается. -
+ AuthUserFile +
: устанавливает местоположение файла пароля, который будет использоваться для аутентификации. Это должно быть за пределами каталогов, которые обслуживаются. Мы создадим этот файл в ближайшее время. -
+ Require valid-user +
: указывает, что только аутентифицированным пользователям должен быть предоставлен доступ к этому ресурсу. Это то, что на самом деле мешает неавторизованным пользователям войти.
Когда вы закончите, сохраните и закройте файл.
Местоположение, которое вы выбрали для своего файла паролей, было + / usr / share / phpmyadmin / .htpasswd +
. Теперь вы можете создать этот файл и передать его первоначальному пользователю с помощью утилиты + htpasswd +
:
sudo htpasswd -c /usr/share/phpmyadmin/.htpasswd
Вам будет предложено выбрать и подтвердить пароль для пользователя, которого вы создаете. После этого файл создается с введенным вами хешированным паролем.
Если вы хотите ввести дополнительного пользователя, вам нужно сделать это * без * флага + -c +
, например:
sudo htpasswd /etc/phpmyadmin/.htpasswd
Теперь, когда вы обращаетесь к подкаталогу phpMyAdmin, вам будет предложено ввести имя и пароль дополнительной учетной записи, которые вы только что настроили:
https:///phpmyadmin
изображение: https: //assets.digitalocean.com/articles/phpmyadmin_deb10/pma_deb10_apache_auth.png [пароль phpMyAdmin apache]
После входа в аутентификацию Apache вы попадете на обычную страницу аутентификации phpMyAdmin, чтобы ввести свои учетные данные MariaDB. Эта настройка добавляет дополнительный уровень безопасности, что желательно, поскольку phpMyAdmin в прошлом страдал от уязвимостей.
Заключение
Теперь у вас должен быть настроен и готов к использованию phpMyAdmin на вашем сервере Debian 10. Используя этот интерфейс, вы можете легко создавать базы данных, пользователей, таблицы и т. Д. И выполнять обычные операции, такие как удаление и изменение структур и данных.