3x‑ui — удобная веб‑панель для управления Xray/V2Ray. Однако при потере пароля или повреждении базы данных доступ к GUI блокируется, а штатный механизм «Reset Username & Password» внутри меню не срабатывает, если ядро панели не инициализировано.
Данное руководство показывает как вернуть доступ без переустановки и без потери текущих конфигураций клиентов, inbounds/outbounds и трафиковых логов. Подойдёт как для домашних серверов, так и для production‑среды с минимальным простоем.
Инфраструктура и исходные данные
| Компонент | Значение |
|---|---|
| Linux‑дистрибутив | Ubuntu 20.04 LTS (хост) |
| Docker Engine | 24.x или новее |
| Образ 3x‑ui | ghcr.io/mhsanaei/3x-ui:latest |
| Volume для БД | ./db/ → /etc/x-ui/ (SQLite x-ui.db) |
| Порт GUI | 2053/tcp (host‑mode) |
Важно: Docker Compose
network_mode: hostдаёт контейнеру доступ напрямую к сетевому стеку хоста. Поэтому последующие правилаiptablesприменяются к самому хосту.
Мини‑чеклист перед началом
SSH‑доступ к серверу с правами sudo или root.
Выключаем панель (чтобы закрыть файл базы):
docker stop 3x-ui
Устанавливаем SQLite CLI (если на хосте нет):
sudo apt install sqlite3 -y
Убеждаемся, что ./db/x-ui.db реально существует и не равен нулю байт.
Горячий бэкап: на случай «чёрного лебедя»
cp ./db/x-ui.db ./db/x-ui.db.$(date +%F-%H%M%S).bak
ls -lh ./db/*.bak
Бэкап обязателен: если что‑то пойдёт не так, всегда можно вернуть базу командой
mv.
Анатомия базы x-ui.db
3x‑ui хранит всё в SQLite. Основные таблицы:
users— учётные записи GUI;inbounds/outbound_traffics— конфигурации прокси и логи;settings— глобальные параметры (порт, JWT‐секрет, автологин и т. д.);client_traffics— счётчики пользователей.
Колонки таблицы users:
| id | username | password | login_secret |
Пароль хранится plain‑text — поэтому сервер нужно изолировать.
Изменение логина/пароля без потери данных
sqlite3 ./db/x-ui.db <<SQL
PRAGMA table_info(users);
SELECT id, username FROM users;
UPDATE users
SET username = 'admin',
password = 'admin'
WHERE id = 1;
SELECT * FROM users;
.quit
SQL
Объяснение:
login_secretможно обнулить, чтобы сбросить 2FA/JWT.Пароль генерируем on‑the‑fly через подстановку Unix‑timestamp — минимизируем вероятность дубликатов.
После правки запускаем панель:
docker start 3x-ui
Проверка доступа и мгновенная смена пароля через GUI
Открываем браузер:
http://<SERVER_IP>:2053Вводим
admin / adminВ левом меню → Settings → Admin задаём окончательный сложный пароль (GUI автоматически выполнит перехеш).
Hash‑функция: SHA‑256 + salt, который хранится в
login_secret. Поэтому сначала мы обнулили поле, а GUI создаст новое.
Уменьшаем поверхность атаки (hardening)
| Мера | Команда/файл |
| Ограничить доступ по IP | iptables -A INPUT -p tcp --dport 2053 ! -s W.X.Y.Z -j DROP |
| Переместить GUI на локалхост | В настройках settings поменять listen_ip → 127.0.0.1 |
| Reverse Proxy + Basic Auth | nginx + .htpasswd, затем проброс через 443/HTTPS |
| Fail2Ban для 54321 | jail xui-gui с фильтром по логу /etc/x-ui/x-ui.log |
Автоматизация для DevOps pipeline
Создаём скрипт reset_xui_admin.sh:
#!/usr/bin/env bash
DB_PATH="$(pwd)/db/x-ui.db"
NEWPASS="Admin$(date +%s)"
sqlite3 "$DB_PATH" "UPDATE users SET username='admin', password='${NEWPASS}', login_secret='' WHERE id=1;"
echo "Новый пароль: $NEWPASS"
docker restart 3x-ui
Добавляем в cron для ежемесячного обновления пароля или ставим в GitLab CI как job after_script.
Типовые ошибки и их решения
Ошибка | Причина | Решение |
[ERR] Please install the panel first | База повреждена или пуста | Создать базу вручную (x-ui install) или восстановить из бэкапа |
no such table: users | Неверный путь к x-ui.db или дефолтная база | Проверь volume mapping и правильный каталог |
database is locked | Контейнер запущен, файл открыт | docker stop 3x-ui и повторите попытку |
| Не открывается GUI после правок | В таблице users пустой login_secret | Войдите CLI → Settings → Save (GUI пересоздаст токен) |
Заключение
Сброс пароля через SQLite даёт точечное восстановление доступа без даунтайма прокси‑сервисов. Главное правило — делайте бэкап перед изменениями и ограничивайте доступ к панели. С этими рецептами вы сможете за пару минут вернуть контроль над 3x‑ui даже в самых нештатных сценариях.
«Бэкап — это то, что вы делаете до, а не после…» © admin