Содержание:
- Подготовка к установке
- Установка PhpMyAdmin
- Выполнение входа
- Ограничение доступа для root-пользователя
- Установка второго шлюза аутентификации
PhpMyAdmin – это инструмент управления базами данных для MySQL, который поставляется с веб-интерфейсом. В данном руководстве будет рассмотрена установка phpMyAdmin на сервер с популярной ОС Debian 10, а также некоторые способы защиты приложения.
Подготовка к установке
Перед развертыванием самой программы следует соблюсти ряд условий. Главное из них — уже должен быть установлен программный пакет, включающий в себя стек LEMP (Linux, Nginx, MySQL и PHP).
Если эти компоненты установлены не полностью, в терминале следует выполнить команду:
apt install nginx php-fpm mysql-server
По завершении установки будет отображен следующий результат:
Примечание. Установка веб-сервера и phpMyAdmin для Debian 9 производится теми же командами.
Так как phpMyAdmin использует учетные данные MySQL для защиты аутентификации, настоятельно рекомендуется установить сертификат SSL/TLS. Он даст возможность наладить передачу зашифрованного трафика между клиентом и сервером.
Добавление репозиториев для Debian 10
В официальных репозиториях Debian 10 отсутствует большинство программ, в число которых входит PhpMyAdmin.
Чтобы добавить источники для загрузки PhpMyAdmin, нужно открыть файл, содержащий списки репозиториев – «sources.list», и внести строки, отвечающие за добавление адреса (URL) до сервера.
Открыть «sources.list» в редакторе можно командой:
nano /etc/apt/sources.list
Нужно внести следующие строки в конец файла:
deb http://deb.debian.org/debian/ stretch main contrib non-free deb-src http://deb.debian.org/debian/ stretch main contrib non-free
Остаётся сохранить изменения нажатием «Ctrl+X» + «Y» + «Enter».
Процесс установки phpMyAdmin
Веб-интерфейс
Первое, что следует сделать – установить веб-интерфейс phpMyAdmin на Nginx-сервер. Установка выполняется с использованием репозиториев. Следовательно, сначала нужно обновить базу пакетов командой в терминале:
apt-get update
Теперь можно установить phpMyAdmin на Debian, выполнив команду в терминале:
apt-get install phpmyadmin
В процессе установки инсталлятор предложит указать, какой веб-сервер потребуется настраивать автоматически — Apache или Lighthttp. В данном случае, планируется установка на сервер Nginx, поэтому выбор делать не нужно. Чтобы пропустить этот вопрос, следует нажать клавишу «Tab», а затем подтвердить выбор кнопкой «ОК».
Настройка базы данных
Далее мастер установки предложит задействовать «dbconfig-common», чтобы настроить базу данных приложения. Здесь следует выбрать «Да». Это позволит настроить внутреннюю базу данных и пользователя с привилегиями администратора для phpMyAdmin.
Создание пароля пользователя
Программа предложит создать пароль для пользователя MySQL. Всегда нужно вводить сложный и надежный пароль, способный, в случае попытки проникновения, выдержать атаку методом брутфорса (перебора паролей). Также можно предоставить программе возможность сгенерировать случайный код доступа, оставив поле пустым.
Остается подождать, пока установятся необходимые пакеты ПО.
Настройка Nginx
Чтобы PhpMyAdmin стал доступен по назначенному пользователем адресу и получил доступ к Unix-сокету PHP-FPM, нужно отредактировать конфигурационные файлы сервера Nginx.
Для начала нужно узнать информацию об установленной версии PHP. Она понадобится в следующих действиях при составлении команд. Узнать информацию о установленной версии можно, выполнив команду:
php -v
В последующий действиях потребуется использовать две цифры из установленной версии PHP.
Примечание. В примерах будет использоваться версия 7.0.
Теперь нужно открыть конфигурационный файл Nginx в редакторе (по умолчанию — «/etc/nginx/sites-available/default»). Для этого в терминал требуется ввести следующую команду:
nano /etc/nginx/sites-available/default
Если файл редактируется в первый раз, нужно найти и удалить следующие строки:
root /var/www/html; # Add index.php to the list if you are using PHP index index.html index.htm index.nginx-debian.html; server_name _; location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ =404; }
Теперь нужно найти в начале файла директиву «server {» и перенести следующий код:
root /var/www/html/; server_name 194.61.0.6; # Add index.php to the list if you are using PHP index index.php index.html index.htm index.nginx-debian.html; location /pma { alias /usr/share/phpmyadmin/; location ~ \.php$ { fastcgi_pass unix:/run/php/php7.0-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $request_filename; include fastcgi_params; fastcgi_ignore_client_abort off; } location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { access_log off; log_not_found off; expires 1M; } }
В примере:
- «server_name» – директива, отвечающая за местоположение хоста. Вместо «194.61.0.6» нужно подставить действительный домен или IP-адресс сервера.
- «location /pma {» – от значения «pma» зависит будущий адрес PhpMyAdmin (http://my-IP/pma/). Рекомендуется изменить «pma» на уникальное имя, чтобы скрыть PhpMyAdmin и избежать атак ботов, подбирающих пароль методом брутфорса (перебор паролей).
- «fastcgi_pass unix:/run/php/php7.0-fpm.sock;» – путь до Unix сокета PHP-FPM. Название файла зависит от установленной версии PHP, поэтому на место 7.0 требуется подставить свою версию программы. В противном случае возможна ошибка 502 при запуске PhpMyAdmin.
В итоге файл конфигурации должен выглядеть следующим образом:
Остаётся сохранить изменения и закрыть файл. Для этого нужно нажать «Ctrl+X» + «Y» и подтвердить сохранение нажатием «Enter».
Проверить правильность внесенных данных можно командой:
nginx -t
Получение следующего вывода сигнализирует о правильности внесенных корректив в конфигурационный файл.
Если вывод сервера Nginx отличается от полученного, то придётся проверить конфигурационный файл на наличие ошибок. Вполне возможно, что были допущены ошибки при расставлении скобок «}» или же Nginx заметил ошибки в секциях (повторяющиеся директивы и недопустимые значения).
Редактирование конфигурационных файлов PHP
Чтобы защита PhpMyAdmin оставалась на должном уровне, нужно добавить параметр «open_basedir», ограничивающий доступ к каталогам «/usr/share/phpmyadmin» и «/usr/share/php/php-gettext». Для этого требуется открыть конфигурационный файл пула PHP-FPM в текстовом редакторе Nano:
nano /etc/php/7.0/fpm/pool.d/www.conf
При составлении команды «7.0» нужно изменить на установленную версию PHP.
Чтобы задать параметры для PHP, нужно внести следующую строку в конец файла:
;php_admin_value[open_basedir] ="/usr/share/phpmyadmin:/usr/share/php/php-gettext"
После внесения правок, нужно сохранить изменения и выйти из файла.
Остается перезапустить Nginx и PHP-FPM для применения параметров. Для этого в терминале вводится команда:
systemctl restart nginx php7.0-fpm
Проверка работы PhpMyAdmin
Установка phpMyAdmin завершается проверкой доступа к интерфейсу. Для этого нужно перейти по IP-адресу веб-сервера, добавив в адресной строке имя, указанное в директиве «location». По умолчанию используется «/pma»:
http://server_domain_or_IP/pma
В случае успеха откроется окно входа PhpMyAdmin. При появлении ошибок 404, 403, 502 придётся повторно проверить файлы конфигурации и наличие всех компонентов комплекса LEMP.
Выполнение входа в PhpMyAdmin
PhpMyAdmin для защиты аутентификации использует данные пользователей MySQL. Для входа придется указать логин и пароль, используемые для подключения к консоли БД (MySQL, MariaDB).
Если учетная запись MySQL отсутствует, то выполнить создание нового пользователя можно несколькими командами. Для начала нужно подключится к оболочке MySQL и ввести в терминал:
mysql -u root -p
Программа попросит пройти аутентификацию, указав пароль. Если авторизация для учетной записи root не настроена, то можно оставить поле «Enter Password» пустыми и, для подтверждения, нажать «Enter».
После входа в оболочку нужно создать учетную запись и предоставить необходимые привилегия новому пользователю. Для этого последовательно выполняются команды:
CREATE USER 'phpadmin'@'localhost' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON *.* TO 'phpadmin'@'localhost' WITH GRANT OPTION;
Вместо «phpadmin» нужно подставить собственный логин, а в поле «mypassword» ввести пароль для создаваемой учетной записи.
Теперь можно выполнить вход в интерфейс PhpMyAdmin, воспользовавшись данными авторизации только что созданного пользователя.
Важно! Никогда не стоит открывать phpMyAdmin как root-пользователь MySQL. Это значительно снижает безопасность. Ниже будет рассмотрен способ отключения возможности входа как root.
Ограничение доступа для входа пользователю root
Суперпользователь в MySQL, как и в Linux – это пользователь, обладающий правами администратора и неограниченным доступом ко всей базе данных. Вдобавок к этому, root является достаточно популярным логином и боты используют его чуть ли не чаще всего в процессе применения bruteforce.
Чтобы исключить подобный риск, phpMyAdmin необходимо сконфигурировать так, чтобы даже с правильными данными для входа под root пользователем панель управления выдавала ошибку «Доступ запрещен» и закрыла доступ к своему интерфейсу.
В процессе установки использовался пакет «dbconfig-common», отвечающий за настройку и сохранение опций phpMyAdmin. Следовательно, стандартная конфигурация сейчас находится в БД. Следует создать файл «config.inc.php», в котором будут храниться собственные настройки пользователя.
Хотя все PHP-файлы для работы phpMyAdmin расположены в «/usr/share/phpmyadmin» (или уже измененной директории), система пользуется конфигурационными файлами из «/etc/phpmyadmin». Так что новый файл создается в «/etc/phpmyadmin/conf.d» и имеет название «pma_secure.php»:
sudo nano /etc/phpmyadmin/conf.d/pma_secure.php
В создаваемом файле следует вставить предложенный ниже код, который позволит отключить вход без пароля (напротив AllowNoPassword указано false) и под суперпользователем (напротив AllowRoot стоит такое же значение):
/etc/phpmyadmin/conf.d/pma_secure.php <?php # PhpMyAdmin Settings # This should be set to a random string of at least 32 chars $cfg['blowfish_secret'] = '3!#32@3sa(+=_4?),5XP_:U%%8\34sdfSdg43yH#{o'; $i=0; $i++; $cfg['Servers'][$i]['auth_type'] = 'cookie'; $cfg['Servers'][$i]['AllowNoPassword'] = false; $cfg['Servers'][$i]['AllowRoot'] = false; ?>
После этого можно сохранить файл. Если для его создания использовался редактор Nano, это делается поочередным нажатием «CTRL + X», затем «Y» для подтверждения изменений и «ENTER». Можно перезагрузить страницу авторизации и попробовать залогиниться как пользователь root. Отобразится сообщение об ошибке с запретом доступа:
Войти в панель phpMyAdmin как root теперь невозможно. Возможность подбора пароля для этого пользователя исключена. Вдобавок, код дает возможность пользоваться учетными записями MySQL с меньшими привилегиями для входа в phpMyAdmin. Что само по себе сильная мера защиты.
Установка второго шлюза аутентификации
Описанные выше меры безопасности позволяют обеспечить сильную защиту от автоматических программ для сканирования сети и ботов. Однако такая защита малоэффективна от целевого нападения.
Для повышения безопасности веб-интерфейса с ограниченным доступом, лучше всего останавливать злоумышленников до того, как они смогут найти панель. Это исключит для них возможность воспользоваться универсальными эксплойтами и атаковать при помощи bruteforce.
Поэтому стоит защитить PhpMyAdmin, добавив еще один уровень авторизации, открывающий доступ к окну входа в веб-интерфейс. Если это не сделать, у злоумышленников остается возможность применить bruteforce для попытки авторизоваться.
В большей части веб-серверов повышение безопасности таким способом доступно из коробки.
Настройка нового уровня аутентификации
Для начала, потребуется создать файл, в котором будут храниться пароли для учетных данных аутентификации. Согласно требованию Nginx, эти пароли необходимо зашифровать, используя функцию «crypt()». Она доступна в пакете OpenSSL – он автоматически поставляется в комплекте Nginx. Можно приступать к созданию паролей, введя в терминале команду:
openssl passwd
После ввода появится предложение создать пароль и подтвердить его. Важно учесть, что максимальная длина пароля – 10 символов. Далее программа покажет этот пароль, уже в зашифрованном виде:
Output O5az.RSPzd.HE
Это значение необходимо скопировать в надежное место или лучше записать на бумаге. Оно понадобится для вставки в файл аутентификации.
Приступим к созданию самого файла. Для примера, его можно назвать «pma_pass» и расположить в папке с конфигурационным файлом Nginx:
sudo nano /etc/nginx/pma_pass
Здесь потребуется вписать строку с именем пользователя, используемого для аутентификации. За ним ставится двоеточие и добавляется сгенерированный пароль с помощью «openssl passwd». Назовем нашего пользователя «admin», следовательно, результат должен выглядеть таким образом:
/etc/nginx/pma_pass admin:O5az.RSPzd.HE
Можно сохранять изменения и переходить к следующему шагу – изменить файл с конфигурациями Nginx. Чтобы внести правки, его нужно открыть в текстовом редакторе:
nano /etc/nginx/sites-available/default
Здесь понадобится найти блок «server» и секцию «location». В данном примере указанное местоположение phpMyAdmin относительно корня сети – «/pma»:
Для запуска второго шлюза аутентификации нужно внести под секцию «location» следующие строки:
auth_basic "Admin Login"; auth_basic_user_file /etc/nginx/pma_pass;
- auth_basic – позволяет задать сообщение, отображаемое в приглашении пройти аутентификацию;
- auth_basic_user_file – указывает на созданный только что файл.
Измененная секция в итоге должна выглядеть таким образом:
После сохранения изменений и выхода из редактора не лишним будет проверить, правильно ли выполнена настройка. В терминале это можно сделать командой:
nginx -t
Если все правильно, вывод будет следующего вида:
Остается перезапустить Nginx для применения параметров:
systemctl restart nginx
Можно попытаться снова открыть веб-адрес phpMyAdmin. Однако, в этом случае браузер сделает запрос на ввод логина и пароля, сохраненных в «pma_pass»:
http://server_domain_or_IP/pma
Если пользователь выполнит успешный вход, он получит возможность авторизоваться непосредственно в phpMyAdmin.
Важно! Если при проверке второй шлюз отсутствует, в браузере следует выполнить очистку кэша или перейти в новый сеанс браузера (если в текущий момент выполнен вход в phpMyAdmin).
Дополнительным преимуществом такой защиты является возможность сохранить чистыми журналы MySQL от попыток аутентификации ботами.
Следующим действием настоятельно рекомендуется установить сертификат SSL/TLS. Он даст возможность наладить передачу зашифрованного трафика между клиентом и сервером.