Содержание статьи
- Система
- Скрипты
- Сеть
- Веб
- Итоги
«Это что, матрица?!» — воскликнет кто‑то из знакомых, глядя через твое плечо на экран ноутбука. Нет, не матрица, просто ты что‑то судорожно печатаешь в терминале. В этой статье я покажу тебе больше двух десятков утилит, которые помогут работать с командной строкой Linux более эффективно, приятно и даже красиво.
СИСТЕМА
Pueue
Утилита Pueue — интересная штука для запуска долгих задач и для работы с созданной очередью задач в системе, конечно. Нужна для тех, кому вполне очевидных для таких случаев jobs/fg/bg/screen/tmux по какой‑то причине оказывается недостаточно.
Как пишут сами разработчики, Pueue нужен, когда задачи очень долгие либо их нужно выполнять параллельно, имея при этом полный контроль над ними. Лично мне утилита показалась намного более дружелюбной, чем штатный bg/fg.
INFO
Crongo — еще одна попытка создать удобный инструмент для работы с cron. Утилита делает примерно то же самое, что Pueue, так что может в некотором смысле быть альтернативой.
NQ
Nq — еще одна простая утилита, которая позволяет запускать очереди из заданий в системе. Не то чтобы без нее было невозможно жить, но порой очень сильно помогает. Выглядит куда менее привлекательно, чем Pueue, но и в работе проще.
Она настолько простая, что для ее использования достаточно просто увидеть пример:
% mkdir -p /tmp/downloads
% alias qget='NQDIR=/tmp/downloads nq wget'
% alias qwait='NQDIR=/tmp/downloads fq -q'
window1% qget http://mymirror/big1.iso
window2% qget http://mymirror/big2.iso
window3% qget http://mymirror/big3.iso
% qwait
... wait for all downloads to finish ...
Vizex
Если ты работаешь в терминале дольше недели, ты, конечно, знаешь о df и его сухом выводе. Давай разукрасим его и сделаем ближе к людям!
Vizex и vizexdf — это апгрейд df, который выполняет свою задачу куда нагляднее и приятнее внешне.
bashtop
В фильмах о хакерах люди видят огромные сводные таблицы с информацией о системе и графиками, а у тебя их до сих пор нет? Не беда! Лови bashtop — это как раз такой дашборд. Если у тебя вдруг есть свободный монитор, на который его можно повесить, — ты знаешь, как добавить +1000 к своей гиканутости в глазах посетителей.
Bashtop умеет показывать не только общую информацию, но и детали по каждому процессу. Позволяет эти процессы сортировать по различным параметрам и легко конфигурируется.
А еще есть реализация этого красавца на Python — bpytop. Выглядит не менее эффектно, да и по возможностям не отстает.
Rhit
Занятная консольная утилита для анализа логов nginx. Встречай Rhit — это, конечно, не GoAccess, но выглядит тоже интересно.
Умеет рисовать графики частоты запросов прямо в консоли.
Есть анализ трендов в запросах и удобный графический вывод этого в консоль.
Конечно же, все можно фильтровать, чтобы отслеживать только необходимое.
Lnav
Lnav — это анализатор логов, который умеет работать не только с nginx, в отличие от Rhit. Вот список его достоинств:
- может сводить все требуемые логи на один экран. Ты можешь задать мониторинг логов сразу нескольких сервисов, и он покажет все сразу;
- умеет подсвечивать текст по формату. Имеется десять встроенных форматов, в том числе один «общий», то есть подходящий почти к любому логу;
- автоматически определяет сжатые логи в форматах gzip и bzip2 и разжимает их на лету;
- умеет фильтровать на основе регулярных выражений. Если выводишь много логов сразу — можно отфильтровать лишнее;
- может строить гистограммы сообщений по времени;
- красиво выводит XML и JSON. Просто нажми Shift+P;
- к логам можно обращаться как к виртуальной SQLite БД, которая обновляется вместе с логами в реальном времени;
- lnav поддерживает разные темы оформления своего интерфейса;
- при вводе команд также есть подсветка синтаксиса и автодополнение.
Прямо на сайте есть готовые бинарники под Linux и macOS: видимо, это на случай, если твой сервер — старый макбук.
Butterfly Backup
Butterfly Backup — это такая интересная обертка вокруг rsync, которая умеет создавать и восстанавливать бэкапы. Список умений действительно внушительный:
- поддержка тихого бэкапа;
- все бэкапы аккуратно рассортированы;
- просмотр сведений о конкретном бэкапе;
- поддержка разных режимов копирования;
- можно бэкапить сразу несколько компов, причем параллельно;
- можно восстанавливать копию даже не на том компьютере, где она была создана. Теоретически, это может быть полезно при миграции на новое оборудование. Более того, можно восстановить бэкап даже на другой операционной системе;
- поддерживаются политики относительно старых бэкапов: их можно удалять по достижении лимита занятого хранилища;
- экспорт бэкапов для удобной перевозки сторонними средствами.
Установить 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 list --catalog /nas/mybackup, то можно увидеть краткое описание каждого снятого бэкапа.
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 Bible (и его родной брат 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
INFO
Было бы неправильно не упомянуть священный 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, создавая контейнер с ОС и копируя туда‑сюда файлы программы; другие создают chroot-окружение и работают в нем. Оба способа требуют большого количества шагов и наличия root, так что применять их неудобно.
Выход есть! Инструмент 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 или кустарные self-hosted-решения.
Туннелирование через 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://xakep_ru.your_domain.com будет прозрачно перенаправлен на твой локальный порт 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 — утилиту, которая позволяет к выводу traceroute добавить информацию об ASN транзитных маршрутизаторов. На примере это выглядит так:
$ traceroute -a www.bhutan.gov.bt | asroute
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, с использованием ресурсов сервера. На гифке заметна весьма значительная разница во времени выполнения.
Установить можно прямо из pip.
pip3 install outrun
Потом можно запустить требуемую команду на удаленной машине:
outrun srv4.local neofetch
Файловая система будет доступна, будто локальная, и результаты работы команды (если есть) тоже будут записаны в текущую папку на локальном компе.
ВЕБ
Webify — транслируем вывод консоли
С помощью Webify можно вывод практически любой команды транслировать как веб‑сервис. Хорошее решение для простого шеринга консоли: ты запускаешь Webify со своим сервисом, а другой человек расчехляет браузер (или curl) и взаимодействует с твоим приложением.
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 Drive, Dropbox или OneDrive. Поддерживает классические TOTP и HOTP, а еще Steam Guard и Blizzard Authenticator, на случай, если ты пользуешься этими площадками.
Free for Dev
Free for Dev — подборка бесплатных сервисов, которые могут быть полезны для разработчиков. Разумеется, не все они бесплатны, но везде указан срок или лимит бесплатного использования, которого почти всегда более чем достаточно для личного использования или тестов.
ИТОГИ
Конечно, ты можешь сказать, что легко прожить без всего этого, а рутинные задачи автоматизировать самописными скриптами. Но зачем, если есть готовые отлаженные инструменты, которые бесплатно улучшат твою работу и сэкономят время и нервы? Хакер — он на то и хакер, что может сделать свое рабочее место лучше, чем у других.