Хакер - Мастерская хакера. 13 утилит для Linux, которые пригодятся админу

Хакер - Мастерская хакера. 13 утилит для Linux, которые пригодятся админу

hacker_frei

https://t.me/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 — ИИ‑генера­тор регуляр­ных выраже­ний из обыч­ных челове­кочи­таемых опи­саний на англий­ском.

Match if email is on gmail

Внут­ри у это­го сер­виса — 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, которая до десяти раз быс­трее стан­дар­тной реали­зации, что дела­ет его каким‑то ано­маль­но быс­трым, по мень­шей мере субъ­ективно.

Тест модуля http.server из Python 3

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/nullCatp — это ути­лита, которая поз­воля­ет перех­ватить такой вывод и вывес­ти его на экран.

Ни­какой магии в работе 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 мож­но перек­лючать­ся меж­ду эти­ми полями, стре­лоч­ками — про­лис­тывать вверх и вниз.

Выб­рать все поля timestamp

В репози­тории прог­раммы есть информа­ция о горячих кла­вишах, но для ком­фор­тно­го исполь­зования jqp их знать необя­затель­но.

Что­бы уста­новить jqp, прос­то ска­чай и разар­хивируй бинарный релиз. Пос­ле это­го его удоб­но помес­тить в /usr/local/bin:

mv ./jqp /usr/local/bin

Читайте ещё больше платных статей бесплатно: https://t.me/hacker_frei

 





Report Page