По поводу утилит для Linux (в основном консольных) стоит упомянуть. Я имею ввиду, что многие люди не пользуются мощностью консоли на 100%. В большинстве своем, они ограничиваются только созданием файлов, а затем их переключением между каталогами, работая с консоли. Так же мне кажется,что это следствие того факта,что на просторах Рунета мало источников,где можно было бы чаще говорить об утилитах,о том,как с ними работать и чем они полезны. И сегодня мы рассмотрим утилиты для работы с командной строкой Linux.
Система
Pueue
Утилита Pueue — интересная вещь для выполнения длинных задач и, конечно же, для работы с очередью задач, созданной в системе. Это необходимо тем, кому для таких случаев вполне очевидны jobs / fg / bg / screen / tmux почему-то не хватает.
Демо из репозитория
Как пишет разработчик проекта Pueue нужен, когда задачи очень длинные либо их нужно выполнять в параллельном режиме, имея полный контроль над ними. Лично мне она показалась более дружелюбной, чем штатный bg/fg.
Еще одна попытка создать удобный инструмент cron — это Crongo. Она также выполняет ту же работу, что и Pueue, но в некоторых отношениях ее можно считать альтернативой.
NQ
Nq – это еще одна простая утилита, которая может запускать очереди из заданий в системе. . Не то чтобы без нее невозможно было жить, но иногда это очень помогает. На вид она более невзрачная по сравнению с Pueue, но зато с ним гораздо проще.
Это настолько просто, что вам просто нужно увидеть пример, чтобы использовать его:
%
%
%
window1% qget http://mymirror/big1.iso
window2% qget http://mymirror/big2.iso
window3% qget http://mymirror/big3.iso
%
… wait for all downloads to finish …
Vizex
Если вы работали в терминале больше недели, то наверняка знаете, что такое df и его сухой вывод. Vizex и vizexdf – это обновления df, которые делают свою работу гораздо четче и приятнее для глаз.
Как выглядит vizex
bashtop
Если вам приходится думать об хакерах или программистах, то вы представляете себе огромные сводные таблицы с системной информации и диаграммами, но вы пока этим не пользуетесь? Без проблем! Bashtop Capture — это как раз такая приборная панель. При наличии бесплатного монитора, вы можете увеличить свой уровень в глазах посетителей.
Работает
Помимо общей информации о каждом процессе Bashtop может отображать и подробную информацию о каждом процессе. Благодаря этому, он может быть настроен на сортировку этих процессов по различным параметрам и легко настраивается.
В качестве примера можно привести bpytop, который является реализацией Python этой утилиты. Не уступает в возможностях, но выглядит более эффектно.
Rhit
Очень интересная консольная утилита, которая позволяет анализировать логи nginx. Знакомьтесь, Rhit: Это, конечно, не GoAccess, но тоже звучит интересно.
Также он может создавать диаграммы частот запроса, которые можно увидеть в консоли.
Скрины с сайта программы
Есть анализ трендов в запросах и удобный графический вывод этого в консоль.
Конечно же, все можно фильтровать, чтобы отслеживать только необходимое.
Lnav
Lnav — это анализатор логов, который умеет работать не только с nginx, в отличи от Rhit. Это список его достоинств:
- можно переместить все необходимые журналы на один экран. Вы можете настроить мониторинг логов нескольких сервисов одновременно, и он будет показывать все сразу;
- может выделять текст в зависимости от формата. Имеется десять встроенных форматов, в том числе «общий», который подходит практически для любого журнала;
- Автозамена задает сжатые логи в формате gzip и bzip2 и разжимает их на лету;
- умеет фильтровать по регулярным выражениям. Если вы просматриваете большое количество журналов одновременно, вы можете отфильтровать ненужные;
- может строить гистограммы сообщений по времени;
- красиво выводит XML и JSON. Просто нажми Shift+P;
- журналы доступны в виде виртуальной базы данных SQLite, которая обновляется журналами в реальном времени;
- lnav поддерживает разные темы оформления своего интерфейса;
- при вводе команд также есть подсветка синтаксиса и автодополнение.
lnav разбирает логи sshd
Там же на сайте можно найти готовые бинарники для Linux или macOS: видимо, для того, чтобы вы могли работать если у вас на сервере старый MacBook.
Butterfly Backup
А еще есть такая интересная оболочка вокруг rsync.
, как Butterfly Backup, которая позволяет создавать и восстанавливать резервные копии данных. Этот список навыков просто впечатляет:
- поддержка тихого бэкапа;
- все бэкапы аккуратно рассортированы;
- просмотр сведений о конкретном бэкапе;
- поддержка разных режимов копирования;
- можно бэкапить сразу несколько компов, причем параллельно;можно восстанавливать копию даже не на том компьютере, где она была создана. Теоретически, это может быть полезно при миграции на новое оборудование. Более того, можно восстановить бэкап даже на другой операционной системе;
- поддерживаются политики относительно старых бэкапов: их можно удалять по достижении лимита занятого хранилища;
- экспорт бэкапов для удобной перевозки сторонними средствами.
Установить Butterfly Backup можно всего в три команды
git
clone https://github.com/MatteoGuadrini/Butterfly-Backup.git
cd Butterfly-Backup
sudo python3 setup.py
Пример использования от автора утилиты:
# Полная копия
bb backup --computer pc1 --destination /nas/mybackup --data User Config --type MacOS --mode Full
# Инкрементальная копия
bb backup --computer pc1 --destination /nas/mybackup --data User Config --type MacOS
Если просмотреть список копий командой bb
, то можно увидеть краткое описание каждого снятого бэкапа
BUTTERFLY BACKUP CATALOG
Backup id: f65e5afe-9734-11e8-b0bb-005056a664e0
Hostname or ip: pc1
Timestamp: 2018-08-03 17:50:36
Backup id: 4f2b5f6e-9939-11e8-9ab6-005056a664e0
Hostname or ip: pc1
Timestamp: 2018-08-06 07:26:46
Backup id: cc6e2744-9944-11e8-b82a-005056a664e0
Hostname or ip: pc1
Timestamp: 2018-08-06 08:49:00
Тут отсутствуют некоторые важные детали, так что давай посмотрим на один из них поближе.
bb list --catalog /nas/mybackup --backup-id f65e5afe-9734-11e8-b0bb-005056a664e0
Backup id: f65e5afe-9734-11e8-b0bb-005056a664e0
Hostname or ip: pc1
Type: Full
Timestamp: 2018-08-03 17:50:36
Start: 2018-08-03 17:50:36
Finish: 2018-08-03 18:02:32
OS: MacOS
ExitCode: 0
Path: /nas/mybackup/pc1/2018_08_03__17_50
List: etc
Users
И наконец, восстановление:
bb restore --computer pc1 --catalog /nas/mybackup --backup-id f65e5afe-9734-11e8-b0bb-005056a664e0
Скрипты
Bash Bible
Если вы являетесь новичком или продвинутым пользователем консоли — то вам будет доступен сервис Bash (и его родственник sh bible): есть примеры реализации различных заданий в скриптах, написанных исключительно с использованием Bash (или sh).
Чтобы далеко не ходить — вот тебе парочка примеров обхода всех файлов и папок в директории на чистом Bash без использования ls
.
# Greedy example.
for file in *; do
printf '%s\n' "$file"
done
# PNG files in dir.
for file in ~/Pictures/*.png; do
printf '%s\n' "$file"
done
# Iterate over directories.
for dir in ~/Downloads/*/; do
printf '%s\n' "$dir"
done
# Brace Expansion.
for file in /path/to/parentdir/{file1,file2,subdir/file3}; do
printf '%s\n' "$file"
done
# Iterate recursively.
shopt -s globstar
for file in ~/Pictures/**/*; do
printf '%s\n' "$file"
done
shopt -u globstar
Было бы неправильно не упомянуть священный zsh с плагином oh-my-zsh и кастомными темами. Ничего удобнее для терминала так и не придумали/
Полезные однострочники
Очень интересный и полезный ресурс с разными однострочниками – это библиотека команд на все случаи жизни.
Вот, например, как смонтировать NTFS раздел из виртуального диска VirtualBox (VDI):
$ mount -t ntfs-3g -o ro,loop,uid=user,gid=group,umask=0007,fmask=0117,offset=0x$(hd -n 1000000 IMAGE.vdi | grep "eb 52 90 4e 54 46 53" | cut -c 1-8) IMAGE.vdi /mnt/vdi-ntfs
Conty
А если ты работаешь в терминале, то тебе часто нужны излированные песочниц. Некоторые используют Docker, создавая контейнер операционной системе и копируя программные файлы туда-сюда; другие же создают и работают в изолированной среде. Оба метода требуют от пользователя больших усилий и рута, поэтому пользоваться ими не очень удобно.
Инструмент Conty позволяет быстро и легко запустить песочницу. Для запуска контейнера не требуется root, и файлы сохраняются после выхода из песочницы.
Преимуществ можно выделить несколько:
- всего один исполняемый файл. Никакой обвязки — скачал и работаешь;
- собран на базе Arch Linux, то есть сразу содержит актуальные версии драйверов;
- не требует root-прав для запуска;
- содержит Vulkan и OpenGL, то есть подходит для игр;
- работает без оверхеда — это тебе не виртуальная машина;
- изолирует ФС хоста, но обеспечивает удобное взаимодействие песочницы с хостом.
Для работы необходимо всего ничего: tar
, fuse2
, coreutils
и bash
.
Пример запуска от автора:
./conty.sh steam
./conty.sh lutris
./conty.sh playonlinux
./conty.sh wine app.exe
Сеть
SX Network Scanner
По заверениям разработчиков, SX Scanner — это чуть ли не на голову лучшая альтернатива Nmap. Вот список предлагаемых фич:
- в 30 раз быстрее Nmap;
- ARP-сканирование для поиска живых хостов в локальных сетях;
- ICMP-сканирование для детекта правил файрвола;
- классическое TCP SYN сканирование (сканирование с помощью полуоткрытых соединений) для поиска портов;
- сканирование для обхода некоторых файрволов с использованием TCP FIN, NULL и Xmas пакетов. То же самое умеет и Nmap, как ты помнишь;
- можно вручную установить какие угодно флаги в пакетах сканирования, а в отчете получить флаги ответов. Довольно интересная фича, которую я больше нигде не встречал, но и ни разу в ней не нуждался, если честно;
- поиск даже UDP-портов. Надежность поиска, само собой, оставляет желать лучшего, но использование ICMP для уточнения результата — однозначный плюс;
- сканирование некоторых приложений: сюда входит Docker, Elasticsearch и Socks5. Для Docker ищется открытый Docker API, через который читается информация о ноде; для Elasticsearch выгружается информация о кластере и его индексах. С Socks5 все совсем просто — sx сообщает только факт работы Socks5 без каких‑либо подробностей;
- результаты выводит в JSON — все как у людей! Конечно, и для автоматической обработки это куда удобнее.
Sx работает с терминала (как и большинство рассмотренных сегодня программ) и полностью написан на Go, что объясняет, как это работает.
Gping
Еще один красивый инструмент в твою копилку «псевдографических свистоперделок» — ping с визуализацией прямо в окне терминала.
Демо из репозитория
grepcidr — анализ IP-адресов
Утилита для тех, кто устал писать регулярки для поиска IP-адресов с помощью grep. Он работает немного быстрее, чем grep, но вам действительно придется много работать с IP-адресами, чтобы иметь отдельную утилиту.
sish
Когда вам нужно перенаправить какой-либо сервис в Интернете, не имея честного «белого» IP, вы можете использовать такие сервисы, как Ngrok или Serveo. В общем, альтернатив не так много: простой SSH или самостоятельные решения для самостоятельного размещения.
Туннелирование через SSH
Вы, конечно, знаете о возможности проброса портов через SSH. А как насчет полноценного VPN? На Хабре и на Robotmoon есть отличный материал по этой теме, если вы знаете английский. Однако текст сдобрен картинками со схемами команд, и вы можете безболезненно запустить все примеры дома и опробовать их в действии.
К таким самоделкам можно отнести и sish — красивую и удобную альтернативу Ngrok, построенную на обычном SSH.
Sish — это не просто набор скриптов для запуска SSH-пересылки. Это полноценная реализация SSH-сервера, который знает только пересылку, но делает это намного лучше, чем официально распространяемая версия. В частности, sish может прослушивать и мультиплексировать HTTP и HTTPS-трафик с поддержкой WebSocket (включая зашифрованный), если вы укажете удаленный порт 80 или 443 при запуске пересылки. В противном случае TCP-порт будет перенаправлен, если он не занят на сервере.
Официальная инструкция по установке состоит всего из двух команд:
docker pull antoniomika/sish:latest
docker run -itd --name sish \
-v ~/sish/ssl:/ssl \
-v ~/sish/keys:/keys \
-v ~/sish/pubkeys:/pubkeys \
--net=host antoniomika/sish:latest \
--ssh-address=:22 \
--http-address=:80 \
--https-address=:443 \
--https=true \
--https-certificate-directory=/ssl \
--authentication-keys-directory=/pubkeys \
--private-key-location=/keys/ssh_key \
--bind-random-ports=false
После этого вы можете просто перенаправить порты как через обычный SSH. Но это можно было сделать и так, но лучше посмотреть, что произойдет, если вы сделаете некоторые настройки в соответствии с инструкциями в репозитории:
ssh -R xakep_ru:80:localhost:8080 your_domain.com
Оп — и http://
будет прозрачно перенаправлен на твой локальный порт 8080! Само собой, одновременно может жить сколько угодно сессий.
Termshark
Termshark — это консольный интерфейс для tshark. Может, например, читать pcap или захватывать трафик в реальном времени, как «взрослый» Wireshark.
Демо из репозитория
Есть поддержка фильтров, можно автоматически собирать TCP-потоки из отдельных пакетов, просматривать содержимое пакетов в соответствии с протоколом.
Termshark написан на Go и собран для любой платформы — готовые версии уже доступны для Linux, Windows, BSD, Android (поверх Termux) и даже для macOS!
Скрипты для SSH
Для SSH мы собрали сразу несколько полезных, да и просто интересных инструментов.
Для начала — уведомления в Telegram при SSH-авторизации.
Установка проста как два рубля: загрузите скрипт в /usr/local/bin/ssh2tg.sh (или любую другую подходящую папку), измените настройки в скрипте (токен API бота и ID чата на Отправка уведомлений), установите его атрибут выполнения и напишите следующую строку в конце /etc/pam.d/sshd:
session optional pam_exec.so type=open_session seteuid /usr/local/bin/ssh2tg.sh
Второе — покажем вам небольшой агент SSH Attack Stats, который показывает оперативную сводку атак на ваш сервер.
Скрин из репозитория с программой
После установки вы можете немного настроить вывод. Например, следующая команда покажет не более пяти записей из журналов SSH:
/usr/local/bin/log-stats ssh -c 5
Все пояснения есть в репозитории с программой.
asroute
Если вы инженер какого-то оператора связи, вам придется регулярно возиться с большими трассировками, пингами и роутерами. Для вас они написали asroute, утилиту, которая позволяет вам добавлять информацию о ASN транзитных маршрутизаторов к выходным данным traceroute. Например, это выглядит так:
$
traceroute
traceroute to bhutan.gov.bt (202.144.128.217), 64 hops max, 52 byte packets
-> AS0 (Reserved)
-> *
-> BRESNAN-33588, US
-> LIGHTOWER, US
-> BRESNAN-33588, US
-> CHARTER-20115, US
-> TELIANET Telia Carrier, EU
-> *
-> NTT-COMMUNICATIONS-2914, US
-> DRUKNET-AS DrukNet ISP, BT
-> BTTELECOM-AS-AP Bhutan Telecom Ltd, BT
Установка пока доступна только для macOS, но зато делается одной командой.
$ brew install asroute
Asroute написан на Rust, поэтому теоретически его можно без проблем скомпилировать для любой другой платформы, но на момент написания этой статьи у меня с собой был только один компьютер с Windows, который испытывал трудности с компиляцией нетрадиционного кода.
Outrun
Изюминкой программы является сценарий outrun, который позволяет легко переносить вычисления за пределы слабого тонкого клиента на мощный удаленный сервер, а наличие необходимой утилиты на удаленном хосте вовсе не обязательно. Единственное, что нужно для работы, — это установить outrun на обоих хостах (как локальном, так и удаленном) и с присутствующими правами root (используется chroot).
Демо от авторов программы
В качестве наиболее очевидного примера (даже приведенного авторами outrun) вы можете запустить локальный видео конвертер, такой как FFmpeg, используя ресурсы сервера. GIF показывает очень существенную разницу во времени выполнения.
Установить можно прямо из pip
pip3 install outrun
Потом можно запустить требуемую команду на удаленной машине:
outrun srv4.local neofetch
Файловая система будет доступна, будто локальная, и результаты работы команды (если есть) тоже будут записаны в текущую папку на локальном компе.
Веб
Webify — трансляция вывода консоли
С помощью Webify вы можете переводить вывод практически любой команды, например веб-службы. Хорошее решение для простого совместного использования консоли: вы запускаете Webify со своей службой, а другой человек обнаруживает браузер (или curl) и взаимодействует с вашим приложением.
Официальное демо Webify
tmpmail
Этот скрипт- отличный способ получить временный почтовый ящик прямо из терминала. Если вы интеесуетесь ИБ — мне, очевидно, не нужно объяснять, что это такое и зачем он вам нужен, так что приступим сразу к установке.
$ sudo dnf install jq curl w3m
$ wget https://raw.githubusercontent.com/sdushantha/tmpmail/master/tmpmail
$ chmod +x tmpmail
Генерируем ящик:
$ ./tmpmail --generate
qpasixkauet@1secmail.net
Проверяем почту:
./tmpmail --recent
ZeroSSL
Вы тоже думали, что бесплатные SSL-сертификаты можно получить только в Let’s Encrypt?. Ребята из ZeroSSL представили альтернативный сервис, где вы можете получить те же сертификаты в течение тех же 90 дней. Вы можете использовать старый добрый ACME. Если я по каким-то причинам искал замену старичке Let’s Encrypt — вот она.
Процедура выпуска довольно проста: просто введите свой адрес электронной почты и пароль и подтвердите право собственности на домен через DNS или загрузив указанный файл. Через несколько минут сайт сгенерирует ваш сертификат и предложит его скачать, а что делать дальше — не мне вас учить
TestTLS
testtls.com — это очередной сервис для проверки SSL/TLS, аналог SSLLabs.
Результат проверки
С его помощью можно легко проверить, правильно ли настроен HTTPS на твоем (или чужом) сайте.
Полезные сайты и сервисы
Вот еще несколько ссылок, которые не входят в категорию утилит командной строки, но могут оказаться полезными.
Public API
Public API — сайт, на котором собрана информация о публичных интерфейсах самых разных сервисов и ссылки на документацию. Может пригодиться в самых разных случаях — от маркетинга до OSINT.
GitExplorer
GitExplorer — хорошая интерактивная шпаргалка по Git.
Пример
Grep.app
Теперь вы можете связать нужную нам запись на GitHub прямо из браузера. Это полезно, например, для поиска секретов во время тестов на проникновение (или в программе bug bounty) или флагов CTF.
Authenticator
Если вы используете двухфакторную аутентификацию, вам явно будет приятно иметь ключи для ввода под рукой, а не в телефоне, который еще нужно найти. Плагин Authenticator для Chrome, Firefox и Microsoft Edge может генерировать коды для 2FA прямо в браузере. Также делает зашифрованную резервную копию на Google Диск, Dropbox или OneDrive. Поддерживает классические TOTP и HOTP, а также Steam Guard и Blizzard Authenticator, если вы используете эти сайты.
Free for Dev
Free for Dev — это набор бесплатных сервисов, которые могут быть полезны разработчикам. Конечно, не все бесплатные, но везде есть период бесплатного использования или лимит, которого почти всегда более чем достаточно для личного использования или тестирования.
Заключение
Конечно, вы можете сказать, что легко отказаться от всего этого и автоматизировать рутинные задачи с помощью сценариев, которые вы написали сами. Но зачем, когда есть готовые инструменты для отладки, которые бесплатно улучшают вашу работу и экономят время и нервы? Хакер — это хакер, потому что он может делать свою работу лучше других.