Хакер - Мастерская хакера. 13 утилит для Linux, которые пригодятся админу
hacker_frei
Польский Кот
Настоящие воины Linux общаются с командной строкой ежедневно, а некоторые в ней просто живут. В очередной подборке я собрал утилиты, которые облегчат эту жизнь, сделают ее ловчее и веселее. Наибольшую пользу эти тулзы принесут сисадмину и хакеру, но и простой юзер для себя кое‑что найдет. В общем, налетай! Впереди у нас 13 интересных полезняшек.
«Мастерская хакера»
Это уже пятая моя подборка утилит, облегчающих жизнь в мелочах. Благодарные читатели продолжают открывать передо мной свои кладовки, а я выношу оттуда и показываю на страницах «Хакера» все самое вкусное.
Не забудь заглянуть в прошлые четыре части. В первой мы рассматривали в основном сетевые утилиты, во второй — дашборды и прочие украшательства, в третьей я сконцентрировался на жизни в Windows с WSL, а четвертая была для администраторов Linux.
NEZHA
Nezha — легковесный и красивый аналог Zabbix, выводит в веб‑панели сводку по серверам, их системным ресурсам и другую информацию.

Установка относительно непростая: тебе понадобится живой Docker, аккаунт на GitHub и доменное имя.
Для начала создай приложение на GitHub: перейди на GitHub Developer и нажми New OAuth App. При заполнении формы потребуется указать адрес домашней страницы приложения (для этого нужен будет домен), а в поле Authorization callback URL вписать <твой домен>/oauth2/callback. Затем создай на странице приложения Client ID и Client Secret и запиши — больше их посмотреть не получится.
Теперь выполни в терминале следующую команду:
curl -L https://raw.githubusercontent.com/naiba/nezha/master/script/install_en.sh -o nezha.sh && chmod +x nezha.sh && sudo ./nezha.sh
После ее выполнения откроется текстовое меню. Выбираем первый пункт.

Установочный скрипт задаст несколько вопросов, в том числе о портах. По умолчанию HTTP-сервер с интерфейсом поднимется на 8008-м порте, а сервер для сбора информации от агентов — на 5555-м.
Готово, панель поднялась. Можно ее открыть, войти через GitHub и создать новый сервер.

После создания сервера ты увидишь в панели его секрет. Он‑то нам и нужен для установки агента.
Теперь можно установить сам агент. Он ставится тем же скриптом, что и панель, но надо выбрать пункт 8. При установке у тебя спросят адрес панели и секрет, созданный на прошлом шаге. После ввода этих данных клиент сразу заработает, больше ничего настраивать не придется.
Теперь на главной странице появится карточка с информацией сервера, а в панели можно открыть веб‑терминал. Он полноценный: поддерживает цвета, обновляется в реальном времени и реагирует на специальные сочетания клавиш.

В настройках панели можно поменять и тему. На скриншоте ниже — тема Neko Mdui.

Nezha мне очень понравилась. Рекомендую как минимум потыкать демо.
AUTOREGEX
Регулярные выражения — мощнейший способ преобразования текстовых данных. Однако без опыта составление регулярки может отнять больше времени, чем она сэкономит. Встречай AutoRegex — ИИ‑генератор регулярных выражений из обычных человекочитаемых описаний на английском.

Внутри у этого сервиса — OpenAI Codex, публичная нейронка, которая пишет код по словесному описанию.
С простыми запросами AutoRegex справляется очень неплохо и позволяет здорово сэкономить время.
Единственное, что портит жизнь, — это маленькие лимиты на бесплатное использование. Впрочем, даже их должно хватить: бесплатно предлагается штук десять запросов без аккаунта и еще десять в месяц, если зарегистрируешься. Для трех скриптов в месяц этого с головой хватит, но при необходимости можно заплатить или просто зарегать еще одну учетку и продолжить пользоваться.
HUNT
Hunt — это утилита для локального поиска файлов, альтернатива стандартному locate. Судя по моему опыту, работает Hunt быстрее, чем find, fd и locate.
Написана программа на Rust, а следовательно, ставится через Cargo:
cargo install hunt
Здесь есть несколько фильтров и простых настроек, которых тем не менее достаточно для повседневного использования. Вот некоторые из них:
-e— искать только объекты с точно совпадающими именами (по запросуsshне будет найденsshd_config);-i /path1,/path2— исключить из поиска определенные папки;-h— включить поиск внутри скрытых папок;-s— не выводить пояснения, только список найденных файлов. Полезно для скриптов;-c— точное совпадение регистра.

Больше подробностей — в репозитории программы.
PLOW
Plow предназначен для нагрузочного тестирования HTTP-серверов. Он основан на Go-библиотеке fasthttp, которая до десяти раз быстрее стандартной реализации, что делает его каким‑то аномально быстрым, по меньшей мере субъективно.

Plow умеет отдавать статистику в реальном времени не только в окне терминала, но и в браузере (по стандарту встроенный сервер доступен на 18888-м порте).
Запуск возможен из Docker или установкой из исходников:
go install github.com/six-ddc/plow@latest
plow <args>
Альтернатива:
docker run --rm --net=host ghcr.io/six-ddc/plow <args>
Аргументы в целом ничего необычного собой не представляют: тут у нас стандартная для таких программ настройка количества потоков (-c), желаемого количества запросов (-n), времени теста (-d 30s или -d 5m, например) и HTTP-метода (--method="GET"). Про другие параметры можно подробно прочитать в справке программы (--help). Цель передается без специальных параметров.
DOOIT
Для ведения списка дел каждый использует что ему удобнее (я, к примеру, завел приватный канал в Telegram, в котором есть только я, и шлю все дела туда). Если ты проживаешь в терминале, графические приложения тебе чужды и сообщать компаниям о планируемых объемах закупки кофе ты не хочешь, можно использовать локальный менеджер задач вроде Dooit. Он хранит все только у тебя на жестком диске, работает только из терминала и до боли напоминает Vim, с тем лишь отличием, что последний не закрывается по Ctrl-C.

Для установки нужен Git и Python версии не меньше 3.10, что может быть проблемой при использовании в некоторых окружениях. У меня в WSL последняя версия Python все еще 3.8, так что для этой программы пришлось расчехлить виртуалку с более свежей системой.
Если у тебя всё есть, то ставится Dooit всего одной командой:
python3 -m pip install git+https://github.com/kraanzu/dooit.git
Запускается по команде dooit в терминале.
CONTAINERSSH
Занятная находка — ContainerSSH, позволяющий незаметно загонять SSH-клиентов в изолированные контейнеры, причем эти контейнеры создаются прямо на лету, в момент подключения.

Установка очень простая и делается в одну команду с использованием Docker или Kubernetes. Качай содержимое папки‑примера и, если у тебя Docker, выполняй:
docker-compose up -d
А если кубер:
kubectl apply -f kubernetes.yaml
Тестовый сервер будет запущен на 2222-м порте локального хоста и будет принимать пользователя foo с любым паролем.
Исправить это недоразумение можно, написав свой сервер аутентификации: это обычный HTTP-сервер с двумя эндпойнтами (/password и /pubkey), которые принимают и отдают JSON. Вот пример запроса и ответа в случае аутентификации по паролю из документации:
{
"username": "username",
"remoteAddress": "127.0.0.1:1234",
"connectionId": "An opaque ID for the SSH connection",
"passwordBase64": "Base64-encoded password"
}
{
"success": true
}
Выглядит как отличное решение для изоляции пользователей (например, гостевые сессии или песочницы для недоверенных личностей) и проведения всяких соревнований, где клиенты (читай — игроки) должны получать доступ к одинаковым окружениям по одинаковым учетным данным, но не должны иметь возможности что‑то сломать или помешать друг другу.
CATP
Часто скрипты отправляют промежуточные данные в /dev/null. Catp — это утилита, которая позволяет перехватить такой вывод и вывести его на экран.

Никакой магии в работе catp нет: внутри там ptrace, с помощью которого перехватывается системный вызов write. К сожалению, на большинстве систем это означает, что для работы потребуются права root.
Установка не требуется: достаточно скачать последний релиз с GitHub и запустить распакованный файл.
У утилиты есть всего один необязательный аргумент — PID процесса, который нужно прослушать. Если его не указать, catp перехватит вывод всех процессов в системе.
KRUNVM
Krunvm — это утилита для создания простых виртуалок на основе образов OCI. Если нужно быстро и легко поднимать виртуалки — вещь сложно заменимая.

Krunvm позволяет задавать количество ядер (--cpus) и памяти (--mem) виртуальной машины. Помимо этого, можно сразу же указать DNS (--dns), рабочую папку (--workdir), а также пробросить порты и каталоги (--port и --volume соответственно). В общем, довольно гибкий и простой инструмент, если не считать сложности с установкой.
Инсталл на голой Ubuntu 22 отнял прилично времени из‑за отсутствия инструкции. Расскажу, как это было, чтобы ты не тратил время.
Для начала нужен компилятор Rust, пакетный менеджер Cargo и зависимости, которые потребуются при сборке:
sudo apt install rustc cargo patchelf linux-source-5.15.0 libelf-dev bison flex curl git python3-pyelftools asciidoctor
Затем нужно скачать, скомпилировать и установить libkrunfw:
git clone https://github.com/containers/libkrunfw.git
cd libkrunfw
make
sudo make install
Теперь установи buildah:
sudo apt install buildah
После этого можно скачать и собрать libkrun:
git clone https://github.com/containers/libkrun.git
cd libkrun
make
sudo make install
Финальный аккорд — качаем и собираем krunvm:
git clone https://github.com/containers/krunvm.git
cd krunvm
cargo build --release
В target/release будет лежать готовый билд — krunvm. Можно пользоваться!
ZELLIJ
Zellij — это еще один, притом довольно интересный, мультиплексор. Если tmux тебе вдруг станет недостаточно (или просто хочется попробовать что‑то новое), то можешь приглядеться к Zellij.

Поддерживаются слои, плагины и возможность заранее описать свое окружение. Не представляю, чего тут может не хватить!
WWW
Для установки можно использовать Cargo или просто скачать и распаковать бинарный релиз.
cargo install --locked zellij
USBGUARD
Если ты не впервые открываешь «Хакер», то наверняка уже слышал про BadUSB и подобные атаки, основанные на эмуляции легитимного устройства ввода при офлайновых атаках. Но если про сам BadUSB знают все, то встроенная в ядро Linux защита от этого далеко не настолько известна.
Механизм USB Device Authorization был добавлен в ядро в далеком 2007 году и принес возможность создавать правила и черно‑белые списки USB-устройств, которым можно и нельзя подключаться к конкретной машине.
Тем не менее удобного штатного способа настройки этой защиты до недавних пор не существовало. Теперь у нас есть USBGuard — комфортный способ предотвратить атаки с USB на твою линуксовую машину.
Установка относительно проста. Сначала ставь зависимости:
sudo apt install --no-install-recommends -V \
asciidoc autoconf automake bash-completion build-essential catch2 \
docbook-xml docbook-xsl git ldap-utils libaudit-dev libcap-ng-dev \
libdbus-glib-1-dev libldap-dev libpolkit-gobject-1-dev libprotobuf-dev \
libqb-dev libseccomp-dev libsodium-dev libtool libxml2-utils \
libumockdev-dev pkg-config protobuf-compiler sudo tao-pegtl-dev xsltproc
Затем скачай исходный код из репозитория, перейди в папку с ним и выполни следующее:
./configure
make
make check
sudo make install
Перед первым запуском нужно сделать некоторую настройку, чтобы не оказаться без клавиатуры перед собственным компьютером. Сгенерируй набор правил для разрешения уже подключенных устройств:
sudo sh -c 'usbguard generate-policy > /etc/usbguard/rules.conf'
Теперь можно запускать демон.
sudo systemctl start usbguard.service
Если ничего не взорвалось и твоя клавиатура все еще работает — заряди сервис в автозагрузку:
sudo systemctl enable usbguard.service
CURL-IMPERSONATE
Известно, что при желании отличить браузер от какой‑то тулзы для скачивания можно по тому, какой именно трафик они генерируют. Например, curl будет отличаться от Chrome, даже если установить нужный заголовок User-Agent. Происходит это из‑за специфического механизма установки шифрованного соединения, который можно эксплуатировать для фингерпринтинга.
Со мной поделились проектом curl-impersonate: это специальная сборка curl, которая умеет прикидываться обычным браузером.
Утилита будет полезна, например, если работать с TLS-фингерпринтингом. Либо если просто хочется получить преднастроенный для имитации какого‑то браузера curl.
Для установки можно просто скачать релиз со страницы на GitHub, но перед этим нужно установить некоторые зависимости:
sudo apt install libnss3 nss-plugin-pem ca-certificates
Для каждого поддерживаемого браузера есть скрипт‑обертка, который запускает curl-impersonate с нужными параметрами и заголовками. Таблицу я взял из репозитория программы.

Запуск на примере Chrome 101:
curl_chrome101 https://xakep.ru
NTFY.SH
Сервис ntfy.sh позволяет удобно отправлять уведомления на телефон и компьютер прямо из скриптов.
Чтобы отправить уведомления, достаточно обычного curl. Пример:
curl \
-H "Title: XAKEP.RU alert" \
-H "Priority: high" \
-H "Tags: heavy_check_mark" \
-d "Опубликована новая статья\!" \
ntfy.sh/<your_topic>

Все заголовки необязательны, достаточно только данных (-d).
Получать уведомления на компьютере можно через браузер — на странице ntfy.sh/<your_topic>.
Для получения уведомлений на телефон нужно установить приложение. Оно есть в Google Play, на F-Droid и в App Store. Устанавливай и подписывай на свой топик.
Сервис полностью открытый, исходники доступны на GitHub. Можно поднять свой self-hosted-экземпляр, если собираешься передавать какие‑то потенциально чувствительные данные. При этом в Android-приложении нужно взвести галочку Use another server.

JQP
Последним на сегодня будет jqp (сокращение от jq playground) — это красивая TUI-песочница для обучения использованию jq.
Про сам jq мы уже писали в «Хакере», так что повторяться не буду. А вот про такой классный интерфейс к нему нужно рассказать подробнее.
Он поддерживает ввод из файла (параметр -f) или из стандартного потока ввода (curl https://url/to/your.json | jqp). В верхней части консоли есть поле для ввода запроса к jq, в левой колонке отображаются вводные данные (JSON из файла или из stdin), в правой — вывод jq на введенный запрос. Нажатием Tab можно переключаться между этими полями, стрелочками — пролистывать вверх и вниз.

В репозитории программы есть информация о горячих клавишах, но для комфортного использования jqp их знать необязательно.
Чтобы установить jqp, просто скачай и разархивируй бинарный релиз. После этого его удобно поместить в /usr/local/bin:
mv ./jqp /usr/local/bin
Читайте ещё больше платных статей бесплатно: https://t.me/hacker_frei