Skip to content

Установка на хост ​

nkt — один статический бинарник для Linux. Он ставится на хост, который нужно видеть и править, работает как systemd-служба и слушает только 127.0.0.1:8077. Никаких зависимостей: ни базы, ни агентов, ни Docker.

Платформа — только Linux (amd64, arm64, 32-битный ARM от armv6). На Windows и macOS рабочий режим не запускается — там доступен только режим снапшота для знакомства.

Много хостов?

Если хостов несколько, ставьте хаб: он поставит nkt на каждый сам и покажет их в одном окне.

1. Бинарник ​

Готовые бинарники для linux/amd64, linux/arm64 и linux/arm лежат в Releases вместе с SHA256SUMS:

bash
# подставьте свою архитектуру; V — последняя версия
V=$(curl -fsSL https://api.github.com/repos/piqab/nkt/releases/latest | sed -n 's/.*"tag_name": *"\(.*\)".*/\1/p')
curl -fsSLO https://github.com/piqab/nkt/releases/download/$V/nkt-linux-amd64
curl -fsSLO https://github.com/piqab/nkt/releases/download/$V/SHA256SUMS
sha256sum -c SHA256SUMS --ignore-missing
chmod +x nkt-linux-amd64
sudo mv nkt-linux-amd64 /usr/local/bin/nkt

Из исходников нужен только make: он сам решает, собирать в Docker или на голом хосте (тогда при нехватке Go и Node предложит поставить их в ~/.local без sudo):

bash
git clone https://github.com/piqab/nkt.git && cd nkt
make build                  # dist/nkt
sudo make install           # бинарник, юнит и nkt.env (свой nkt.env не перезапишет)

Подробнее — в разделе Разработка.

2. Проверить, что хост читается ​

bash
sudo nkt scan

Команда печатает найденные слушатели, контейнеры, правила firewall и проблемы — то же, что покажет веб-интерфейс; при критичных находках код выхода 2. Нужен root: iptables-save и systemctl обычному пользователю недоступны.

Рабочий режим (NKT_MODE=local) на Linux включён по умолчанию. Состояние пишется в /var/lib/netknownsthat — туда же, куда пишет служба, так что nkt tui, запущенный вручную, читает ту же базу.

3. Служба ​

Конфиг и systemd-юнит берутся прямо с GitHub, клонировать репозиторий не нужно:

bash
sudo install -d -m 0750 /etc/netknownsthat
curl -fsSL https://raw.githubusercontent.com/piqab/nkt/main/deploy/nkt.env.example \
  | sudo install -m 0640 /dev/stdin /etc/netknownsthat/nkt.env
curl -fsSL https://raw.githubusercontent.com/piqab/nkt/main/deploy/netknownsthat.service \
  | sudo install -m 0644 /dev/stdin /etc/systemd/system/netknownsthat.service
sudo $EDITOR /etc/netknownsthat/nkt.env
sudo systemctl daemon-reload
sudo systemctl enable --now netknownsthat
sudo journalctl -u netknownsthat -n 30     # здесь будет пароль администратора

Пароль администратора печатается в журнал один раз, при первом запуске, и нигде не хранится в открытом виде. Чтобы задать его заранее — NKT_BOOTSTRAP_ADMIN_PASSWORD в nkt.env до первого старта; потом пароли меняются командой nkt passwd (см. Доступ).

Юнит запускает nkt от root, но в песочнице: ProtectSystem=strict с явным списком каталогов для записи, урезанный набор capabilities, фильтр системных вызовов. Подробно — в Безопасности.

4. Открыть в браузере ​

Служба слушает 127.0.0.1:8077, а cookie сессии по умолчанию ходит только по HTTPS (NKT_COOKIE_SECURE=true). Три способа добраться:

  • SSH-туннель — быстрее всего:
    bash
    ssh -L 8077:127.0.0.1:8077 user@host
    и открыть http://127.0.0.1:8077. Туннель отдаёт обычный HTTP, поэтому в nkt.env нужно NKT_COOKIE_SECURE=false.
  • Свой HTTPS — NKT_TLS_ENABLED=true. При первом запуске nkt выпускает самоподписанный сертификат в NKT_DATA_DIR/tls/ и дальше переиспользует его. По умолчанию он покрывает 127.0.0.1, ::1 и имя хоста; адрес, по которому вы открываете nkt (IP в локальной сети, имя), добавьте сами — NKT_TLS_HOSTS=192.168.1.10,127.0.0.1,::1,имя-хоста — иначе сертификат не подойдёт к нему, даже если ему доверять. Свой сертификат — NKT_TLS_CERT и NKT_TLS_KEY (оба сразу). Самоподписанному сертификату нужно доверие браузера — см. ниже.
  • Обратный прокси с TLS (nginx, Caddy) перед 127.0.0.1:8077.

Самоподписанный сертификат и терминал

«Дополнительно → Перейти на сайт» в предупреждении браузера действует не навсегда: Chrome через какое-то время (или после перезапуска) забывает это решение. Открытая страница продолжает работать — её запросы идут по уже установленному соединению, — а всё, что открывает новое WebSocket-соединение, падает молча: терминал, консоли, живые журналы заданий и логов, экран машины («Не удалось подключиться…», в консоли браузера — пустое WebSocket connection … failed:). Для WebSocket браузер предупреждения не показывает.

  • Сразу: открыть адрес nkt заново (или выйти и войти) и снова принять сертификат.
  • Насовсем: сделать сертификат доверенным. Убедитесь, что в NKT_TLS_HOSTS есть адрес, по которому вы открываете nkt (после правки перезапустите службу — сертификат перевыпустится). Затем скачайте его (замок в адресной строке → сертификат → экспорт, или NKT_DATA_DIR/tls/cert.pem) и установите в доверенные корневые: Windows — «Доверенные корневые центры сертификации», macOS — «Связка ключей» → «Всегда доверять», Linux — хранилище браузера или /usr/local/share/ca-certificates + update-ca-certificates. Либо настоящий сертификат (свой центр сертификации, certbot) или обратный прокси с ним.

Мобильному приложению это не мешает: оно само сверяет сертификат, закреплённый при входе.

Какие ещё порты бывают и что из них открывать — на странице Порты и доступ.

Доступ к nkt равносилен root на хосте

Он правит конфиги, управляет сервисами и меняет firewall. Не открывайте его в интернет без отдельного слоя аутентификации.

Окна интерфейса

Размер любого окна меняется уголком справа внизу, двойной щелчок по нему возвращает обычный размер. Кнопка в заголовке разворачивает окно на весь экран. Размер окон логов, заданий, редакторов, терминала и экрана машины запоминается в браузере.

5. Терминальный интерфейс ​

Если вы уже на хосте по SSH, браузер не нужен:

bash
sudo nkt tui

Те же данные и действия: обзор, находки, карта деревом, доступность, нагрузка, конфигурации с редактором (Ctrl+S — с той же проверкой и автооткатом), сервисы, firewall, сертификаты, журнал. Экраны — цифрами 1…9, 0 или Tab; F5 — обновить, r — пересканировать, ? — помощь, q — выход.

TUI не собирает историю сам: пробы и метрики делает служба netknownsthat, без неё экраны доступности и нагрузки пустые. Входа по паролю нет — вы уже root; действия пишутся в журнал как tui:<логин> (под sudo — исходный пользователь). NKT_ALLOW_MUTATIONS=false действует и здесь.

6. Обновление ​

  • Вручную — скачать новый бинарник (шаг 1) поверх /usr/local/bin/nkt и sudo systemctl restart netknownsthat.
  • Хост под хабом обновляется с хаба: «обновить» в строке хоста или «обновить всё» (см. Хосты хаба).

Юнит из deploy/ иногда меняется (новые каталоги в ReadWritePaths, capabilities). После крупного обновления перезалейте и его — шаг 3 или sudo make install; хост под хабом получает новый юнит при каждом обновлении сам.

Что дальше ​