Екземпляр 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
Додайте директиви до точного розташування PHP 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;
}
Обидві директиви задокументовані в довіднику модуля Nginx HTTP auth_basic. Запустити sudo nginx -t для перевірки конфігурації, але не перезавантажуйте Nginx поки що; список дозволених IP додається наступним. Не надсилайте облікові дані Basic Auth через незашифрований HTTP; дочекайтесь активації HTTPS нижче.
Обмеження доступу за IP-адресою
Базова аутентифікація блокує неавтентифікованих користувачів, але Nginx все одно отримує запити з будь-якого джерела. Замініть існуючий блок розташування PHP Adminer наступним об'єднаним блоком, щоб правила 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 правилу 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 на Cloudzy Linux VPS. Образ маркетплейсу використовує Apache, Basic Auth і самопідписаний сертифікат, тому він відрізняється від стека Nginx, списку дозволених IP і Let's Encrypt вище. Перегляньте ці відмінності в безпеці перед введенням облікових даних виробничої бази даних.
Власний «слід» Adminer є незначним; базу даних визначає розмір. Вибирайте CPU, пам'ять і сховище на основі розміру даних та індексів бази даних, навантаження запитів, кількості з'єднань, резервних копій та очікуваного зростання, а не самого Adminer.
Часті запитання
Чи безпечно публічно відкривати Adminer на VPS?
Не самостійно. Якщо ви повинні відкрити Adminer публічно, розмістіть його за HTTP Basic Authentication, списком дозволених IP і HTTPS разом. Ці засоби контролю зменшують ризик, але не роблять публічний доступ безпечним. Для чутливих баз даних прив'яжіть Adminer до localhost і отримуйте до нього доступ через SSH-тунель.
Як отримати доступ до Adminer, не відкриваючи його в інтернет?
Налаштуйте наведений вище серверний блок Nginx лише для loopback, щоб 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. The latest.php URL завжди повертає поточний стабільний випуск, тому це перезаписує вашу копію найновішою версією. Нещодавні випуски безпеки роблять це вартим виконання за розкладом, а не лише коли ви пам'ятаєте.
Чи слід встановлювати Adminer через apt пакет чи завантажити безпосередньо?
Завантажте один файл безпосередньо. Це дає вам поточну версію негайно і робить оновлення однорядковою командою, тоді як пакет дистрибутива може відставати від офіційного випуску. Прямий файл — це той самий інструмент з коротшим шляхом до останніх виправлень безпеки.