Экземпляр Adminer, оставленный запущенным на открытом адресе, — один из самых незаметных способов потерять базу данных. Кто-то разворачивает единственный PHP-файл, чтобы проверить таблицу, URL работает, и файл остаётся там месяцами, пока устаревшая копия не превращается в вектор атаки. Именно поэтому данное руководство по установке Adminer на Linux VPS уделяет столько же внимания безопасности инструмента, сколько и его запуску.
Adminer — это единственный PHP-файл (около 503 КБ в полной сборке), который работает с MySQL, MariaDB, PostgreSQL, SQLite и несколькими другими базами данных. Его чрезвычайно просто развернуть, что как раз и является причиной, по которой его часто разворачивают небрежно.
Вы установите его на современном VPS Ubuntu или Debian с Nginx и PHP-FPM, добавите HTTP-аутентификацию, список разрешённых IP-адресов и HTTPS с Let's Encrypt, и завершите чётким правилом о том, когда вовсе пропустить публичную настройку и обращаться к Adminer через SSH-туннель.
Кратко (TL;DR)
- Adminer — это один PHP-файл, который вы скачиваете в корневую директорию сайта с помощью
wgetв корневую директорию сайта; Nginx вместе с PHP-FPM обслуживают его. - Публичный экземпляр Adminer требует всех трёх: уровня HTTP-аутентификации, списка разрешённых IP-адресов и HTTPS. Любого одного из них недостаточно.
- Для наиболее чувствительных баз данных вообще не открывайте Adminer: привяжите его к
localhostи обращаться к нему через SSH-туннель. - Обновление — это одна команда: повторно выполните
wgetзагрузку. Недавние выпуски безопасности делают поддержание актуальности настоящей операционной задачей, а не лишь пожеланием.
Предварительные требования: что вам понадобится перед установкой
Данное руководство рассчитано на Ubuntu 26.04 и 24.04, а также Debian 13, с примечаниями о совместимости для Ubuntu 22.04 и Debian 12. Версии PHP-FPM по умолчанию: 8.5 в Ubuntu 26.04, 8.3 в Ubuntu 24.04, 8.4 в Debian 13, 8.2 в Debian 12 и 8.1 в Ubuntu 22.04.
- Linux VPS под управлением Ubuntu 22.04, Ubuntu 24.04, Ubuntu 26.04, Debian 12 или Debian 13 с пользователем, имеющим доступ
sudoдоступ. - Сервер базы данных (MySQL, MariaDB или PostgreSQL), уже работающий либо на этом VPS, либо на том, к которому Adminer может подключиться через сеть. Данное руководство не устанавливает базу данных; оно устанавливает инструмент для её администрирования.
- PHP-FPM из поддерживаемых репозиториев операционной системы. Несмотря на то что скомпилированный файл Adminer поддерживает PHP 5.3+, используйте текущую версию, предоставляемую дистрибутивом (указана выше), а не устаревшую версию PHP.
- Для публичной настройки HTTPS вам нужно имя хоста, указывающее на VPS, и доступные входящие TCP-порты 80 и 443. Используется процесс Certbot Nginx использует проверку HTTP-01 на порту 80. Let's Encrypt теперь поддерживает краткосрочные сертификаты IP-адресов, но Certbot не устанавливает их автоматически через свой рабочий процесс Nginx, поэтому в данном руководстве используется имя хоста.
Примечание: Данное руководство специально использует Nginx. Если вы используете Apache, логика загрузки и защиты по-прежнему применима, но конфигурация серверного блока ниже — нет.
Установка Nginx и PHP-FPM
Начните с обновления индекса пакетов и установки Nginx и PHP-FPM вместе с расширением PHP для базы данных, необходимым вашему серверу:
sudo apt update
sudo apt install -y nginx php-fpm php-mysql
Для бэкенда PostgreSQL установите php-pgsql вместо или совместно с php-mysql:
sudo apt install -y php-pgsql
Убедитесь, что сокет PHP-FPM существует:
ls /run/php/
Сопоставьте имя файла сокета с версией, указанной выше, например, php8.5-fpm.sock на Ubuntu 26.04, php8.3-fpm.sock на Ubuntu 24.04 или php8.4-fpm.sock на Debian 13. Если ожидаемый сокет отсутствует, проверьте соответствующий сервис с помощью systemctl status php8.5-fpm, заменив 8.5 на версию, установленную в вашей ОС.
Совет профессионала: несоответствие сокета — одна из возможных причин
502 Bad Gateway. Убедитесь, чтоfastcgi_passимя файла в директории/run/php/, убедитесь, что соответствующий сервис PHP-FPM запущен, и проверьте/var/log/nginx/error.logесли ошибка остаётся.
Загрузка Adminer
Создайте директорию для Adminer, затем загрузите в неё единственный файл. Ссылка latest.php URL всегда указывает на текущий стабильный выпуск:
sudo mkdir -p /var/www/adminer
sudo wget -O /var/www/adminer/adminer.php https://www.adminer.org/latest.php
Если вы работаете только с MySQL или MariaDB, сборка только для MySQL меньше по размеру (около 406 КБ) и загружается тем же способом:
sudo wget -O /var/www/adminer/adminer.php https://www.adminer.org/latest-mysql.php
Оставьте директорию Adminer под владением root, предоставив PHP-FPM доступ на чтение:
sudo chown -R root:root /var/www/adminer
sudo chmod 755 /var/www/adminer
sudo chmod 644 /var/www/adminer/adminer.php
You do not need to track the version number: the latest.php URL означает, что повторный запуск загрузки — это и путь обновления, к которому возвращается раздел об обслуживании.
Настройка серверного блока Nginx
Создайте серверный блок, который обслуживает директорию Adminer и передаёт запросы .php запросы к сокету PHP-FPM, который вы определили ранее. Откройте новый файл сайта:
sudo nano /etc/nginx/sites-available/adminer
Вставьте следующее, заменив db.example.com на имя хоста, уже указывающее на ваш VPS, и убедившись, что fastcgi_pass сокет соответствует вашей версии PHP:
# /etc/nginx/sites-available/adminer
server {
listen 80;
server_name db.example.com;
root /var/www/adminer;
location = / {
return 302 /adminer.php;
}
location = /adminer.php {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
location / {
return 404;
}
}
Активируйте сайт, создав символическую ссылку в директории sites-enabled, затем проверьте конфигурацию без перезагрузки Nginx:
sudo ln -s /etc/nginx/sites-available/adminer /etc/nginx/sites-enabled/
sudo nginx -t
nginx -t должен сообщить о корректном синтаксисе и успешном тесте. Не перезагружайте Nginx, поскольку сайт ещё не имеет аутентификации или ограничения IP. Продолжайте через эти два шага по защите; шаг ограничения IP выполняет первую перезагрузку после установки обеих защит.
Заблокировать доступ: Аутентификация, Ограничение IP и HTTPS
Публичный экземпляр Adminer находится непосредственно перед учётными данными вашей базы данных, поэтому ему нужны многоуровневые защиты, а не один замок. Три уровня ниже выполняют разные задачи: HTTP-аутентификация останавливает всех без пароля на веб-сервере, список разрешённых IP блокирует подключения с неодобренных адресов, а HTTPS не позволяет вводимым вами учётным данным пересекать сеть в открытом виде. Добавьте все три. Ни один из них не заменяет другие.
Добавление HTTP Basic-аутентификации
Установите htpasswd утилиту, входящую в пакет apache2-utils для Ubuntu и Debian:
sudo apt install -y apache2-utils
Создайте файл паролей и пользователя (вам будет предложено ввести пароль):
sudo htpasswd -B -C 10 -c /etc/nginx/.htpasswd adminuser
sudo chown root:www-data /etc/nginx/.htpasswd
sudo chmod 640 /etc/nginx/.htpasswd
Добавьте директивы точно в блок расположения Adminer PHP, чтобы PHP-запрос был защищён:
location = /adminer.php {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
Обе директивы задокументированы в справочнике по модулю Nginx HTTP auth_basic. Запустить sudo nginx -t для проверки конфигурации, но не перезагружайте Nginx; список разрешённых IP добавляется следующим. Не передавайте учётные данные Basic Auth по незашифрованному HTTP; дождитесь включения HTTPS ниже.
Ограничение доступа по IP-адресу
Базовая аутентификация блокирует неаутентифицированных пользователей, но Nginx по-прежнему получает запросы от любого источника. Замените существующий блок расположения Adminer PHP следующим объединённым блоком, чтобы правила IP и директивы Basic Auth оставались в одном месте:
location = /adminer.php {
satisfy all;
allow 203.0.113.10;
allow 203.0.113.0/28;
deny all;
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
Замените примерные адреса вашим реальным публичным IP-адресом или диапазоном доверенной сети. Оставьте только записи allow которые вам нужны, и удалите неиспользуемые примеры. Первая запись демонстрирует одиночный адрес, а вторая — диапазон CIDR. Nginx возвращает 403 Forbidden адресам, которые не соответствуют правилу allow разрешения. Синтаксис директив задокументирован в справочнике по модулю доступа Nginx Протестируйте и перезагрузите Nginx:
sudo nginx -t && sudo systemctl reload nginx
Включение HTTPS с Let's Encrypt
Имея домен, указывающий на VPS, установите Certbot и его плагин для Nginx, затем запросите сертификат:
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d db.example.com
Certbot редактирует ваш серверный блок для обслуживания HTTPS на порту 443 и предлагает перенаправление HTTP на HTTPS; примите перенаправление. Также устанавливается таймер обновления, поэтому сертификат обновляется автоматически до истечения срока действия. Вы можете проверить путь обновления с помощью sudo certbot renew --dry-run, который должен завершиться без ошибок.
Теперь перейдите по адресу https://db.example.com/adminer.php с разрешённого адреса и убедитесь, что Nginx запрашивает учётные данные Basic Auth перед загрузкой Adminer.
Выбор модели доступа: Публичный HTTPS или SSH-туннель
Описанная выше настройка подходит, когда вам нужен доступ к базе данных через браузер с нескольких машин или когда открытие SSH-сессии нецелесообразно. Это не единственная модель, и для чувствительной базы данных она не является наиболее защищённой.
Для чувствительных конфигураций не открывайте Adminer публично. Официальные рекомендации по безопасности Adminer рекомендует делать его недоступным из публичного интернета по возможности. Если вы выбираете доступ только через туннель, замените публичный блок сервера Nginx этой конфигурацией только для loopback и пропустите публичную настройку HTTPS:
# /etc/nginx/sites-available/adminer
server {
listen 127.0.0.1:8080 default_server;
server_name _;
root /var/www/adminer;
location = / {
return 302 /adminer.php;
}
location = /adminer.php {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
location / {
return 404;
}
}
Протестируйте и перезагрузите заменяющую конфигурацию:
sudo nginx -t && sudo systemctl reload nginx
Затем откройте туннель с вашей машины:
ssh -N -L 127.0.0.1:8080:127.0.0.1:8080 user@your-server-ip
С запущенным туннелем откройте http://127.0.0.1:8080/adminer.php. Nginx принимает соединения Adminer только через loopback-интерфейс VPS, тогда как SSH транспортирует трафик через зашифрованное соединение. Это использует поведение, описанное в документации по локальному перенаправлению OpenSSH.
Используйте публичный HTTPS, Basic Auth и список разрешённых IP, когда вам нужен прямой доступ через браузер с нескольких машин. Предпочитайте конфигурацию SSH только для loopback, когда публичный доступ не нужен.
Главный вывод: Самый защищённый Adminer — тот, который никогда не доступен из публичного интернета.
Обновление Adminer
Забытый экземпляр — вот настоящий риск, и его стоит рассматривать как плановую задачу, а не как запоздалую мысль. Обновление Adminer — это одна команда, та же самая wget команду, которую вы использовали для установки, потому что latest.php всегда загружает текущий выпуск:
sudo wget -O /var/www/adminer/adminer.php https://www.adminer.org/latest.php
Это не теоретическая проблема. Adminer 5.4.3, выпущенный 9 июля 2026 г., устранил семь предупреждений безопасности GitHub в одном релизе. Более ранний совет по CVE-2026-25892 показал, что даже конечная точка проверки версии Adminer может быть превращена в вектор неаутентифицированного отказа в обслуживании; проблема была исправлена в версии 5.4.2. Устаревшая копия накапливает публично задокументированные уязвимости, поэтому её обновление должно быть плановым обслуживанием.
Примечание: Оставайтесь на текущем официальном выпуске Adminer. Репозиторий репозиторий AdminerEvo был заархивирован в январе 2025 г. и не является активно поддерживаемой альтернативой.
Развёртывание на VPS
Если вы предпочитаете пропустить ручные шаги, Adminer доступен как однокнопочное развёртывание в маркетплейс Cloudzy на Облачный VPS Cloudzy Linux. Образ в маркетплейсе использует Apache, Basic Auth и самоподписанный сертификат, поэтому он отличается от стека Nginx, списка разрешённых IP и Let's Encrypt выше. Проверьте эти различия в безопасности перед вводом учётных данных для производственной базы данных.
Собственный «след» Adminer незначителен; базу данных определяет размер. Выбирайте CPU, память и хранилище на основе размера данных и индексов базы данных, нагрузки запросов, количества соединений, резервных копий и ожидаемого роста, а не самого Adminer.
Часто задаваемые вопросы
Безопасно ли открывать Adminer публично на VPS?
Не сам по себе. Если вам необходимо открыть Adminer публично, разместите его за HTTP Basic Authentication, списком разрешённых IP и HTTPS вместе. Эти меры снижают риск, но не делают публичный доступ безопасным. Для чувствительных баз данных привяжите Adminer к localhost и обращайтесь к нему через SSH-туннель.
Как получить доступ к Adminer, не открывая его в интернет?
Настройте только-loopback серверный блок Nginx выше так, чтобы Adminer слушал на 127.0.0.1:8080, затем выполните ssh -N -L 127.0.0.1:8080:127.0.0.1:8080 user@your-server-ip на вашей машине. Откройте http://127.0.0.1:8080/adminer.php пока туннель работает.
Может ли Adminer подключаться к PostgreSQL, а также MySQL?
Да. Adminer поддерживает MySQL, MariaDB, PostgreSQL, SQLite, MS SQL и Oracle из коробки, с дополнительными базами данных через плагины. Установите соответствующее расширение PHP для вашей базы данных, например php-pgsql для PostgreSQL, чтобы PHP мог с ним взаимодействовать.
Как поддерживать Adminer в актуальном состоянии?
Повторно запустите команду загрузки: sudo wget -O /var/www/adminer/adminer.php https://www.adminer.org/latest.php. latest.php URL всегда возвращает текущий стабильный выпуск, поэтому это перезаписывает вашу копию новейшей версией. Недавние выпуски безопасности делают это стоящим по расписанию, а не только когда вы вспомните.
Следует ли мне устанавливать Adminer через apt пакет или скачать напрямую?
Загрузите один файл напрямую. Это даёт вам текущую версию немедленно и делает обновления однострочной командой, тогда как пакет дистрибутива может отставать от официального выпуска. Прямой файл — это тот же инструмент с более коротким путём к последним исправлениям безопасности.