Устанавливаем и защищаем phpMyAdmin в Debian
В прошлой заметке я подробно разобрал процесс установки базовых компонентов любого хостинга – Apache, MySQL и PHP. Уже сейчас хост готов к работе, но для удобства в нем не хватает несколько полезных инструментов. Одним из таких инструментов по праву считается phpMyAdmin. Он упрощает администрирование сервера БД. Добавление пользователей, создание новых баз, выполнение запросов – эти и многие другие задачи легко и просто решать при помощи phpMyAdmin. Установка phpMyAdmin немногим отличается от того же Apache. Правда если оставить phpMyAdmin без дополнительной защиты, то рано или поздно злоумышленники смогут скомпрометировать весь сервер. О простейшем, но эффективным способе защиты phpMyAdmin пойдет речь в этой заметке.
Установка phpMyAdmin
Для установки phpMyAdmin в терминале выполняем команду:
apt-get install phpmyadmin
Загрузив все необходимые компоненты, запустится мастер настройки phpMyAdmin. В первом вопросе требуется определиться с установленным web-сервером. Доступно два варианта:
- apache2
- lighthttpd
Мы выбираем первый вариант, поскольку в предыдущей заметке устанавливали именно Apache. После ответа на вопрос начнется загрузка недостающих компонентов и их установка.
В следующем шаге мастер попросит разрешения на создания новой базы данных для хранения всех настроек phpMyAdmin. Без этого установка phpMyAdmin будет невозможна, поэтому соглашаемся.
Далее нас попросят ввести пароль пользователя root MySQL-сервера. Вводим и нажимаем «enter».
Затем нас попросят придумать пароль для доступа в phpMyAdmin. Придумываем пароль посложней и нажимаем «Enter».
Добавляем phpMyAdmin к конфигурации к Apache
Установка phpMyAdmin завершена. Чтобы протестировать этот инструмент в работе, необходимо добавить phpMyAdmin к конфигурации Apache. Для этого открываем конфигурационный файл Apache:
nano /etc/apache2/apache2.conf
Перемещаемся в его конец и добавляем строчку для подключения phpMyAdmin:
Include /etc/phpmyadmin/apache.conf
Сохраняем внесенные изменения (ctrl + o) и закрываем файл (ctrl + x). Перезапускаем Apache:
service apache2 restart
Проверяем phpMyAdmin
Открывай браузер и переходим по ссылке http://ip_адрес/phpmyadmin
. Открытие страницы входа phpMyAdmin – подтверждение успешной установки.
Защищаем phpMyAdmin
Пользоваться phpMyAdmin можно начиать прямо сейчас, но если не обеспечить ему минимальную защиту, то рано или поздно кто-нибудь его взломает. В php приложениях частенько находят ошибки и в большинстве случаев они носят фатальный характер. Чтобы избежать подобных проблем, необходимо изначально продумать организацию дополнительной линии защиты. Проще всего это сделать с помощью установки дополнительной аутентификации на уровне web-сервера.
При обращении к директории, в которой установлен phpMyAdmin, web-сервер будет запрашивать связку логин/пароль. Неправильный ввод данных на этом уровне не позволит злоумышленнику получить доступ к странице ввода учетных данных phpMyAdmin. Пробить такую защиту тоже можно, но сделать это будет намного сложней. Что ж, попробуем обыграть выше сказанный сценарий на практике.
Конфигурируем авторизацию на уровне Apache
Сначала откроем конфигурационный файл phpMyAdmin, который используется с Apache:
sudo nano /etc/phpmyadmin/apache.conf
Находим в файле блок «»
и дописываем директиву «AllowOverride All». Отредактированный блок в итоге должен выглядеть так:
<Directory /usr/share/phpmyadmin> Options FollowSymLinks DirectoryIndex index.php AllowOverride All //Остальной текст оставляем как есть
Сохраняем изменения (ctrl + o) и закрываем файл (ctrl + x). При помощи директивы “AllowOverride” мы сообщили Apache, что все директивы могут быть переопределены через внешний файл настроек – «.htaccess».
Подготавливаем .htaccess
Создадим новый конфигурационный файл .htaccess в директории с phpmyadmin:
nano /usr/share/phpmyadmin/.htaccess
Прописываем в этом файле необходимость авторизации на уровне web-сервера:
AuthType Basic AuthName "Restricted Files" AuthUserFile /home/.htpasswd Require valid-user
В конфигурационном файле мне пришлось воспользоваться следующими директивами:
- AuthType – директива определяет тип идентификации пользователя. В качестве значения я указываю Basic. Насколько мне известно, вариантов кроме Basic до сих пор в Apache не реализовано (поправьте, если ошибаюсь).
- AuthName – директива используется совместно с предыдущей. В ней мы пишем текст, который будет отображаться в диалоге запроса логина/пароля. Значением директивы может быть абсолютно любой текст.
- AuthUserFile – значением директивы выступает путь к файлу, содержащий информацию о пользователях и их паролях, которые могут получить доступ к закрытому ресурсу. На данном этапе этого файла нет, мы создадим его чуть позже.
- Require – директива позволяет определить принцип аутентификации. Она может принимать несколько значений (например, мы можем перечислить пользователей или группы пользователей, которые могут получать доступ к закрытому ресурсу). Значение Valid-user подразумевает, что получить доступ к закрытому ресурсу могут получить все пользователи, доступные в файле AuthUserFile.
Создание htpasswd файла
Необходимые настройки сделаны. Теперь создадим файл, путь к которому мы указывали в директиве AuthUserFile. Для этого вбиваем команду:
sudo htpasswd -c /home/.htpasswd username
Имя пользователя выбираем любое, с системными пользователями оно не переплетается. Утилита htpasswd запросит пароль для нового пользователя. Придумываем пароль и после завершения создания пользователя перезапустим apache:
service apache2 restart
Проверяем авторизацию на уровне web-сервера
Попробуем обратиться к phpMyAdmin. Если все описанные выше манипуляции были проделаны правильно, то страница входа phpMyAdmin сразу будет недоступна. Вместо нее появится окно с запросом имени пользователя и пароля. Вводим данные, которые мы указали утилите htpasswd и только после этого попадаем на страницу входа в phpMyAdmin