Задался вопросом какая же все-таки оболочка быстрее? У меня на серверах можно встретить такой зоопарк: sh, bash, ksh, mksh, posh, zsh. Почему так много? Не знаю, сервера достались по наследству, видимо остатки от давно сгинувших девопсов по реке Стикс.
На своей локальной машине использую исключительно zsh со всякими наворотами:
🐱 Oh My Zsh - прибомбасина для zsh
🐱 autosuggestions - автокомплит
На серверах алогично Oh My Zsh + autosuggestions ну и нативный bash для скриптов, все остальное — неведомая хрень.
Автокомплит мастхев, экономит кучу времени, чтобы не тыкать стрелочку вниз вверх. Вводишь начало команды и оно тебе с хистори автоматом уже подгоняет варианты. Не надо каждый раз упарываться и писать всю команду целиком. Удобно!
Дополнительно из плагинов включаю🐱 zsh-syntax-highlighting чтобы красивенько было. Ну а чтобы каждый раз не указывать ssh ключи при подключении к серверам, использую встроенный плагин ssh-agent.
Запустим этот скрипт в bash:
После запуска получаю: 0m1.242s
Скрипт отслеживает точное время открытия шелла 1000 раз без выполнения каких-либо операций.
Ок, теперь давай запустим этот скрипт в zsh:
Не такие и большие различия. Даже можно сказать ничтожные. Но это всего лишь один тест. Чтобы получить какие-то средние значения воспользуемся утилитой:
🐱 shellbench
Устанавливаем и запускаем:
Хм, в совокупности тестов получается что zsh где-то прям намного шустрее, да даже ни где-то, а прям почти лидирует в производительности.
По большей части это писькомерство, ну работает оно и работает, какая разница насколько быстрее. Да, соглашусь, но пару раз встречал ребят которым ставили задачу на оптимизацию выполнения скриптов, где важна каждая секунда. Это как у оверклокеров, где каждый герц и фпс это уже победа.
Вывод: По результатам тестов, zsh оказался быстрее чем bash, но не везде. Опять-же тут все индивидуально.
Кстати когда запускаешь на macos midnight commander + zsh в роле оболочки, то mc запускается прям кое как, секунды три наверное. Поэтому с mc я использую bash, можно конечно этот момент отдебажить, но мне лень. Если когда-нибудь руки дойдут, напишу как пофиксил.
А вообще самая быстрая оболочка это Dash (Debian Almquist Shell). Это POSIX-совместимая реализация Bourne Shell. Она заменяет /bin/sh в скриптах по умолчанию и обеспечивает улучшенную скорость, потребляя при этом меньше ресурсов. Dash превосходит bash/zsh по производительности, но его нельзя использовать, так как он не предназначен для взаимодействия.
❓ А какую оболочку используешь ты и почему?
Кстати всем привет! Надеюсь твои выходные прошли без проишествий. Увидимся!
tags: #linux #utils
—
💩 @bashdays
На своей локальной машине использую исключительно zsh со всякими наворотами:
На серверах алогично Oh My Zsh + autosuggestions ну и нативный bash для скриптов, все остальное — неведомая хрень.
Автокомплит мастхев, экономит кучу времени, чтобы не тыкать стрелочку вниз вверх. Вводишь начало команды и оно тебе с хистори автоматом уже подгоняет варианты. Не надо каждый раз упарываться и писать всю команду целиком. Удобно!
Дополнительно из плагинов включаю
plugins=(git zsh-syntax-highlighting zsh-autosuggestions ssh-agent)
zstyle :omz:plugins:ssh-agent agent-forwarding on
zstyle :omz:plugins:ssh-agent identities home_rsa work_rsa2 her_rsa3
zstyle :omz:plugins:ssh-agent lifetime
Вернемся в теме - кто быстрее. Очевидно же что bash! Давай убедимся.Запустим этот скрипт в bash:
for i in $(seq 1 1000);
do bash -c ":" ;
done
Запускаем через time: time bash speed.sh
time - оценивает по времени производительность любой задачи, выводя после её завершения затраченное время: реальное, пользователя и системы. Через time можешь оценивать производительность по времени любых своих скриптов.После запуска получаю: 0m1.242s
Скрипт отслеживает точное время открытия шелла 1000 раз без выполнения каких-либо операций.
Ок, теперь давай запустим этот скрипт в zsh:
time zsh speed.sh
Результат: 0m1.344sНе такие и большие различия. Даже можно сказать ничтожные. Но это всего лишь один тест. Чтобы получить какие-то средние значения воспользуемся утилитой:
Устанавливаем и запускаем:
git clone https://github.com/shellspec/shellbench.git .
shellbench -s bash,zsh sample/*
По итогу получаем около 28ми тестов. На картинке можешь глянуть мои результаты. Числа в таблице это - количество выполнений в секунду.Хм, в совокупности тестов получается что zsh где-то прям намного шустрее, да даже ни где-то, а прям почти лидирует в производительности.
По большей части это писькомерство, ну работает оно и работает, какая разница насколько быстрее. Да, соглашусь, но пару раз встречал ребят которым ставили задачу на оптимизацию выполнения скриптов, где важна каждая секунда. Это как у оверклокеров, где каждый герц и фпс это уже победа.
Вывод: По результатам тестов, zsh оказался быстрее чем bash, но не везде. Опять-же тут все индивидуально.
Кстати когда запускаешь на macos midnight commander + zsh в роле оболочки, то mc запускается прям кое как, секунды три наверное. Поэтому с mc я использую bash, можно конечно этот момент отдебажить, но мне лень. Если когда-нибудь руки дойдут, напишу как пофиксил.
А вообще самая быстрая оболочка это Dash (Debian Almquist Shell). Это POSIX-совместимая реализация Bourne Shell. Она заменяет /bin/sh в скриптах по умолчанию и обеспечивает улучшенную скорость, потребляя при этом меньше ресурсов. Dash превосходит bash/zsh по производительности, но его нельзя использовать, так как он не предназначен для взаимодействия.
Кстати всем привет! Надеюсь твои выходные прошли без проишествий. Увидимся!
tags: #linux #utils
—
Please open Telegram to view this post
VIEW IN TELEGRAM
👍81
Часто люди бездумно засовывают в крон запуск долгоиграющих скриптов и потом ловят кучу багов.
К примеру некий скрипт запускается в кроне каждый час. В какой-то момент, время выполнения скрипта начинает составлять 70 и более минут. Соответственно следующий джоб через 60 минут запустит еще одну копию этого скрипта. И понеслась 3.14зда по кочкам.
Я ловил у ребят подобные перлы, когда сервер просто раком встает, а в фоне крутятся 100500 процессов, которые насилуют mysql как портовую шлюху, вдоль и поперек.
На такие случаи необходимо проверять запущен ли скрипт в данный момент. И если запущен, то при повторном запуске - ничего не делать.
Как такое реализовать? В бест-практиках это реализуется через lock файлы. Для удобства работы с lock файлами, в linux есть коробочный вариант утилиты, которая называется flock.
flock — утилита, которая позволяет использовать лок-файл для предотвращения запуска копии процесса (вашего скрипта, крона или чего-то еще). Например, используя cron нужно быть уверенным, что предыдущий запуск вашего скрипта уже завершен.
Пишем обработчик:
Как только скрипт завершит работу, ты сможешь запустить его повторно.
Сначала создается lock файл если его нет, а далее начинается магия с дескрипторами и логикой.
Вместо sleep можно вставить запуск функции типа main() где и будет основная логика скрипта. Либо вообще через source (или точку) заинклудить свой скрипт. То есть можно сделать универсальную штуку, чтобы в каждый скрипт не пихать flock.
Делаешь один обработчик и передаешь ему параметром путь до скрипта + путь до lock файла. А обработчик через source подгружает уже полезную нагрузку.
Моё решение возможно не самое изящное, но рабочее. Изучай. Слышал что такое можно провернуть каким-то образом через сокеты, но особо не вникал. Если в комментах поделишься, будет очень полезно. Спасибо!
tags: #linux #bash #utils
—
💩 @bashdays
К примеру некий скрипт запускается в кроне каждый час. В какой-то момент, время выполнения скрипта начинает составлять 70 и более минут. Соответственно следующий джоб через 60 минут запустит еще одну копию этого скрипта. И понеслась 3.14зда по кочкам.
Я ловил у ребят подобные перлы, когда сервер просто раком встает, а в фоне крутятся 100500 процессов, которые насилуют mysql как портовую шлюху, вдоль и поперек.
На такие случаи необходимо проверять запущен ли скрипт в данный момент. И если запущен, то при повторном запуске - ничего не делать.
Как такое реализовать? В бест-практиках это реализуется через lock файлы. Для удобства работы с lock файлами, в linux есть коробочный вариант утилиты, которая называется flock.
flock — утилита, которая позволяет использовать лок-файл для предотвращения запуска копии процесса (вашего скрипта, крона или чего-то еще). Например, используя cron нужно быть уверенным, что предыдущий запуск вашего скрипта уже завершен.
Пишем обработчик:
#!/bin/bashЗапускаем скрипт. Ничего полезного он не сделает, просто будет висеть 100 секунд. После того как ты запустил этот скрипт, в соседнем терминале попробуй запустить его же параллельно. В ответ ты получишь ожидаемое - Nice try.
lock="/tmp/bashdays.lock"
[[ -f "${lock}" ]] || touch "${lock}"
(
flock -n -o -x ${fd_lock} || { echo 'Nice try' >&2; exit 0; }
sleep 100
) {fd_lock}<"${lock}"
Как только скрипт завершит работу, ты сможешь запустить его повторно.
Сначала создается lock файл если его нет, а далее начинается магия с дескрипторами и логикой.
Вместо sleep можно вставить запуск функции типа main() где и будет основная логика скрипта. Либо вообще через source (или точку) заинклудить свой скрипт. То есть можно сделать универсальную штуку, чтобы в каждый скрипт не пихать flock.
Делаешь один обработчик и передаешь ему параметром путь до скрипта + путь до lock файла. А обработчик через source подгружает уже полезную нагрузку.
Моё решение возможно не самое изящное, но рабочее. Изучай. Слышал что такое можно провернуть каким-то образом через сокеты, но особо не вникал. Если в комментах поделишься, будет очень полезно. Спасибо!
tags: #linux #bash #utils
—
Please open Telegram to view this post
VIEW IN TELEGRAM
👍145
Вчера посмотрел спокойной ночи малыши и отрубился, каково было моё удивление, что в 6 утра не пришлось вставать и отвозить ребенка в школу. Каникулы же! Эхх… Ладно, а у нас бесконечные рабочие будни.
Сегодня обсудим интересную команду в bash, которая называется enable. Эта команда включает или отключает встроенные команды оболочки. Чтобы проще было понять эту шляпу, разберем на практике.
И видим выхлоп: test is a shell builtin. То есть используется команда test встроенная в оболочку. А не та что лежит на пути в test: /usr/bin/test. А как нам воспользоваться дисковой версией этой утилиты? А вот так:
Чтобы включить обратно встроенную команду test в оболочке, выполняем:
Для начала узнаем дисковую версию команды mkdir:
Теперь загружаем экстеншен в оболочку:
Теперь запускаем:
Например, ты снес все системные бинарники и у тебя есть только bash. Через подгрузку экстеншенов можно без проблем обслуживать свою операционную систему, даже если в системе пропали всякие mkdir и т.п.
Чтобы посмотреть что вообще подгружено в оболочку, воспользуйся командой:
С версии 4.4 в bash появилась переменная BASH_LOADABLES_PATH, с помощью нее ты можешь задать путь для поиска экстеншенов. Тогда при подгрузки этих модулей, не нужно будет использовать полные пути.
Ну либо в ситуации когда ты случайно снес бинарники и нужно как-то админить и восстанавливать систему. В общем тут всё рассчитано на полный полет твоей фантазии.
Развлекайся )
tags: #linux #bash #utils
—
💩 @bashdays
Сегодня обсудим интересную команду в bash, которая называется enable. Эта команда включает или отключает встроенные команды оболочки. Чтобы проще было понять эту шляпу, разберем на практике.
Отключение встроенных команды позволяет выполнить дисковую команду, имеющую то же имя, что и встроенная команда оболочки, без указания полного пути, даже если оболочка ищет встроенные команды перед дисковыми командами.Запускаем:
type test
И видим выхлоп: test is a shell builtin. То есть используется команда test встроенная в оболочку. А не та что лежит на пути в test: /usr/bin/test. А как нам воспользоваться дисковой версией этой утилиты? А вот так:
enable -n testИ мы получаем уже такое: test is /usr/bin/test. Получается мы сделали некое переключение. И по факту используем разные версии test.
type test
Чтобы включить обратно встроенную команду test в оболочке, выполняем:
enable testТак окей. Что еще можно с этим интересного сделать? А можно подгрузить расширения поставляемые с оболочкой. Некие плагины, экстеншены. Для этого эти экстеншены нужно установить (если у тебя их нет:
apt/yum install bash-builtinsВсе это дело установится в папку /usr/lib/bash/. В ней будут всякие mkdir, rm, sleep и т.п. По сути это те же дисковые команды, только экстеншены для оболочки.
Для начала узнаем дисковую версию команды mkdir:
mkdir --versionАга, есть: mkdir (GNU coreutils) 8.32
Теперь загружаем экстеншен в оболочку:
enable -f /usr/lib/bash/mkdir mkdirХе! -bash: mkdir: --: invalid option
mkdir --version
Теперь запускаем:
type mkdirИ получаем: mkdir is a shell builtin, то есть теперь mkdir используется не системный (дисковый), а тот что подгружен в оболочку bash.
Например, ты снес все системные бинарники и у тебя есть только bash. Через подгрузку экстеншенов можно без проблем обслуживать свою операционную систему, даже если в системе пропали всякие mkdir и т.п.
Чтобы посмотреть что вообще подгружено в оболочку, воспользуйся командой:
lsof +fg -p $$Получишь отчет по текущему процессу, что подгружено в данный момент в оболочку и используется.
С версии 4.4 в bash появилась переменная BASH_LOADABLES_PATH, с помощью нее ты можешь задать путь для поиска экстеншенов. Тогда при подгрузки этих модулей, не нужно будет использовать полные пути.
BASH_LOADABLES_PATH=/usr/lib/bash/Для чего это может все пригодится? Да черт его знает. Например, можешь собрать chroot окружение и не добавлять дисковые утилиты, а подгрузить только необходимые модули для встроенной оболочки.
enable -f sleep sleep
Ну либо в ситуации когда ты случайно снес бинарники и нужно как-то админить и восстанавливать систему. В общем тут всё рассчитано на полный полет твоей фантазии.
Развлекайся )
tags: #linux #bash #utils
—
Please open Telegram to view this post
VIEW IN TELEGRAM
👍89
Сегодня необычный скрипт, который позволит тебе сгенерировать пароль состоящий из пробелов и прочих невидимых символов. Что-то из оперы Шрёдингера — ты никогда не узнаешь гениально это или ужасно, пока сам не попробуешь.
От этой штуки тестировщики разбегаются в ужасе. А веб-сайты на которых ты попытаешься использовать такой пароль, просто-напросто порвутся и выпустят 500ю соплю.
Забрать и потыкать этот прекрасный скрипт можешь из нашей репы.
Не знаю где это можно применить, но идея с паролем которого не видно, очень интересная. Я попробовал сохранить то, что получилось в bitwarden, отлично сохранился. Да, пароль получается с симметричной защитой 128 бит.
tags: #linux #bash #utils
—
💩 @bashdays
От этой штуки тестировщики разбегаются в ужасе. А веб-сайты на которых ты попытаешься использовать такой пароль, просто-напросто порвутся и выпустят 500ю соплю.
Забрать и потыкать этот прекрасный скрипт можешь из нашей репы.
Не знаю где это можно применить, но идея с паролем которого не видно, очень интересная. Я попробовал сохранить то, что получилось в bitwarden, отлично сохранился. Да, пароль получается с симметричной защитой 128 бит.
tags: #linux #bash #utils
—
Please open Telegram to view this post
VIEW IN TELEGRAM
👍81
This media is not supported in your browser
VIEW IN TELEGRAM
Хеллоу май диа френдз! Я тот еще любитель интерактивных штук, особенно консольных, где чето можно стрелочками побегать, понажимать, с минимумом геморроя. Короче фетиш у меня на всякие потыкать.
Приобщился тут к утилите hstr, которая выводит историю команд в формате списка. А в этом списке уже стрелками можно перемещаться по истории. Но это не главное. Лично я использую ее исключительно в режиме фильтрации.
HSTR (HiSToRy) - это утилита командной строки, которая обеспечивает улучшенное bash/zsh выполнение команд из истории. Она направлена на то, чтобы сделать твою работу проще и эффективнее, чем Ctrl-r.
Запускаю hstr, на экран вываливается вся история, я ввожу к примеру prometheus и получаю выборку из истории, конкретно где я задрачивал prometheus. Выбираю курсором нужную мне команду и вуаля! Никаких тебе грепов и лишних телодвижений.
Рекомендую попробовать, весьма топовая штука, боюсь приживется надолго.
🐱 Страница проекта на гитхаб
💩 Лендинг по установке
tags: #linux #utils
—
💩 @bashdays
Приобщился тут к утилите hstr, которая выводит историю команд в формате списка. А в этом списке уже стрелками можно перемещаться по истории. Но это не главное. Лично я использую ее исключительно в режиме фильтрации.
HSTR (HiSToRy) - это утилита командной строки, которая обеспечивает улучшенное bash/zsh выполнение команд из истории. Она направлена на то, чтобы сделать твою работу проще и эффективнее, чем Ctrl-r.
Запускаю hstr, на экран вываливается вся история, я ввожу к примеру prometheus и получаю выборку из истории, конкретно где я задрачивал prometheus. Выбираю курсором нужную мне команду и вуаля! Никаких тебе грепов и лишних телодвижений.
Рекомендую попробовать, весьма топовая штука, боюсь приживется надолго.
tags: #linux #utils
—
Please open Telegram to view this post
VIEW IN TELEGRAM
👍94
Фух, закончились 2 часа партнерских интеграций... Недавно я делал пост по отличиям su от sudo, но есть еще одна вкусная альтернатива, которая называется doas.
doas – утилита, которая позволяет обычным пользователям выполнять задачи от имени root, так же как это делает sudo. Она была разработана проектом OpenBSD как минималистичная альтернатива sudo.
Интересно кстати звучит: do ass (делать жопу)
Утилита доступна в большинстве официальных репозиториев. Поэтому с установкой проблем не возникает.
Запускай
Так как doas не входит по умолчанию в коробочные версии linux, утилита требует немного бОльших настроек, в отличие от sudo. Но конфигурация намного проще для понимания чем sudo. Настраивается все это через файл /etc/doas.conf. Если файла нет, создай!
Цель doas - решить сложность sudo.
Давай эмитируем поведение sudo и позволим пользователю выполнять любые команды от пользователя root. Добавляем в конфиг такую херабору:
Теперь пользователь user сможет выполнять команды от root + пользователь получает льготный период, когда не нужно вводить пароль в течение нескольких минут после последовательных команд doas.
Допустим мне нужно сделать подобное, но для определенной группы, добавляем в конфиг строчку:
Теперь все кто заключен в группу wheel смогут побыть рутом. Также и с белым списком команд, которые можно выдать для запуска без пароля:
Да, конфиг более читабельный чем у sudo. И в обозримом будущем есть очень большая вероятность того, что sudo закинут в деприкейтед, а doas сделают основным рабочим инструментом. Так как sudo уже непроходимоегавно болото в плане поддержки кода, который трудно понимать и использовать.
Возьмем даже валидатор конфига visudo. Который проверяет синтаксис конфига. А это говорит о том, что синтаксис файла sudoers ну совсем фу и воняет. Требует проверки. Да и 99% пользователей используют sudo исключительно для установки софта.
Разница налицо (попахивает порнохабом):
Конфиг sudo
Конфиг «делать жопу»
Ну и с помощью doas можно запустить root shell такой командой:
Кстати был казус с портированием под FreeBSD, спустя несколько часов после публикации doas, в ней нашли критическую уязвимость. Которая позволяла выполнить привилегированные операции даже если был указан неверный пароль пользователя. Как обычно накосячил разработчик, который раздеплоился в прод без тестирования. Ну либо специально заложил бекдор, история умалчивает.
Вот такие пироги. Увидимся совсем скоро и сделаем что-нибудь полезное, например сломаем прод, ну или ногу...
tags: #linux #utils
—
💩 @bashdays
doas – утилита, которая позволяет обычным пользователям выполнять задачи от имени root, так же как это делает sudo. Она была разработана проектом OpenBSD как минималистичная альтернатива sudo.
Интересно кстати звучит: do ass (делать жопу)
Утилита доступна в большинстве официальных репозиториев. Поэтому с установкой проблем не возникает.
Запускай
apt install «делатьжопу» (или какой там у тебя пакетный менеджер) и погнали смотреть на эти булки поближе.Так как doas не входит по умолчанию в коробочные версии linux, утилита требует немного бОльших настроек, в отличие от sudo. Но конфигурация намного проще для понимания чем sudo. Настраивается все это через файл /etc/doas.conf. Если файла нет, создай!
Цель doas - решить сложность sudo.
Давай эмитируем поведение sudo и позволим пользователю выполнять любые команды от пользователя root. Добавляем в конфиг такую херабору:
permit persist user as root
Теперь пользователь user сможет выполнять команды от root + пользователь получает льготный период, когда не нужно вводить пароль в течение нескольких минут после последовательных команд doas.
Допустим мне нужно сделать подобное, но для определенной группы, добавляем в конфиг строчку:
permit persist :wheel as root
Теперь все кто заключен в группу wheel смогут побыть рутом. Также и с белым списком команд, которые можно выдать для запуска без пароля:
permit persist user as root
permit nopass :user as root cmd apt
Да, конфиг более читабельный чем у sudo. И в обозримом будущем есть очень большая вероятность того, что sudo закинут в деприкейтед, а doas сделают основным рабочим инструментом. Так как sudo уже непроходимое
Возьмем даже валидатор конфига visudo. Который проверяет синтаксис конфига. А это говорит о том, что синтаксис файла sudoers ну совсем фу и воняет. Требует проверки. Да и 99% пользователей используют sudo исключительно для установки софта.
Разница налицо (попахивает порнохабом):
Конфиг sudo
%wheel ALL=(ALL) NOPASSWD: ALL
Конфиг «делать жопу»
permit nopass :wheel as root
Ну и с помощью doas можно запустить root shell такой командой:
doas -s
Кстати был казус с портированием под FreeBSD, спустя несколько часов после публикации doas, в ней нашли критическую уязвимость. Которая позволяла выполнить привилегированные операции даже если был указан неверный пароль пользователя. Как обычно накосячил разработчик, который раздеплоился в прод без тестирования. Ну либо специально заложил бекдор, история умалчивает.
Вот такие пироги. Увидимся совсем скоро и сделаем что-нибудь полезное, например сломаем прод, ну или ногу...
tags: #linux #utils
—
Please open Telegram to view this post
VIEW IN TELEGRAM
👍93
Надо было тут провести экстренные технические работы на сервере. Сервер публичный и смотрит жопой в интернет.
Клиенты это обычные пользователи, которые заходят по ssh и пытаются на практике изучать bash и linux. Короче студенты какого-то крупного ВУЗа, а сервер выступает подопытным стендом для всяких лабораторных работ.
Клиентов дофига (человек 800) предупредить о технических работах нет никакой возможности. А если бы и была, то 99% не увидят электронных писем с важной информацией и начнут долбать саппорт.
Задача вроде тривиальная, но нужно было предварительно задропать все сессии + не разрешать повторно подключить. Ну и естественно каким-то хреном выслать уведомление всем тем, кого задропали в моменте.
На самом деле тут все просто. Создаем пустой файл /etc/nologin. Теперь только root сможет авторизоваться по ssh. Да, предварительно нужно разрешить вообще заходить под root’ом.
Часть задачи решили. Теперь нужно уведомить бедолаг, которые в данный момент что-то делают в терминале. Пусть сохраняют свои поделки и отправляются на заслуженный отдых.
Для этого воспользуемся утилитой wall.
Wall — утилита командной строки, которая отображает сообщение на терминалах всех вошедших в систему пользователей.
Запускаем команду:
Все кто был подключен к серверу, получают сообщение:
И неважно что делает человек и где находится, сообщение появится у него на экране. Через wall кстати можно спамить определенным группам пользователей.
Ну все, ответственность с себя сняли. В 10:15 запускаем ассасина:
Вот так вот грубо мы выгнали всех с сервера, кроме root’а. Вот и все, спокойно проводим технические работы, удаляем /etc/nologin и радуемся какие мы молодцы.
Wall можно заменить например на такое:
Но тут сообщение уйдет конкретному пользователю user. Конечно если по какой-то причине отсутствует wall в системе, можно и через цикл выгрести всех юзеров и через echo скормить им уведомление.
write - утилита, позволяющая отправить сообщение другому пользователю, который имеет сессию в этой же системе.
Ну либо так:
Пытался сделать так /dev/pts/[0-9]*, но чет не проканало, заорала как потерпевшая. Ну это всё костыли, в общем неважно.
Ладно, хорошо тебе провести остаток выходного, увидимся завтра.
tags: #bash #linux #utils
—
💩 @bashdays
Клиенты это обычные пользователи, которые заходят по ssh и пытаются на практике изучать bash и linux. Короче студенты какого-то крупного ВУЗа, а сервер выступает подопытным стендом для всяких лабораторных работ.
Клиентов дофига (человек 800) предупредить о технических работах нет никакой возможности. А если бы и была, то 99% не увидят электронных писем с важной информацией и начнут долбать саппорт.
Задача вроде тривиальная, но нужно было предварительно задропать все сессии + не разрешать повторно подключить. Ну и естественно каким-то хреном выслать уведомление всем тем, кого задропали в моменте.
На самом деле тут все просто. Создаем пустой файл /etc/nologin. Теперь только root сможет авторизоваться по ssh. Да, предварительно нужно разрешить вообще заходить под root’ом.
Часть задачи решили. Теперь нужно уведомить бедолаг, которые в данный момент что-то делают в терминале. Пусть сохраняют свои поделки и отправляются на заслуженный отдых.
Для этого воспользуемся утилитой wall.
Wall — утилита командной строки, которая отображает сообщение на терминалах всех вошедших в систему пользователей.
Запускаем команду:
wall "Быстренько сохраняемся и валим с сервера. В 10:15 сервер уходит в запой."
Все кто был подключен к серверу, получают сообщение:
Broadcast message from root@dev (pts/0) (Sun Dec 17 11:38:21 2023):
Быстренько сохраняемся и валим с сервера. В 10:15 сервер уходит в запой.
И неважно что делает человек и где находится, сообщение появится у него на экране. Через wall кстати можно спамить определенным группам пользователей.
Ну все, ответственность с себя сняли. В 10:15 запускаем ассасина:
pkill -9 -u `who | awk '{print $1}'| grep -v root|head -1Вот так вот грубо мы выгнали всех с сервера, кроме root’а. Вот и все, спокойно проводим технические работы, удаляем /etc/nologin и радуемся какие мы молодцы.
Wall можно заменить например на такое:
echo "Hello from BashDays" | write user
Но тут сообщение уйдет конкретному пользователю user. Конечно если по какой-то причине отсутствует wall в системе, можно и через цикл выгрести всех юзеров и через echo скормить им уведомление.
write - утилита, позволяющая отправить сообщение другому пользователю, который имеет сессию в этой же системе.
Ну либо так:
echo "Hello from BashDays" > /dev/pts/1
Пытался сделать так /dev/pts/[0-9]*, но чет не проканало, заорала как потерпевшая. Ну это всё костыли, в общем неважно.
Ладно, хорошо тебе провести остаток выходного, увидимся завтра.
tags: #bash #linux #utils
—
Please open Telegram to view this post
VIEW IN TELEGRAM
👍205 2
Привет. Утренний микропост. Короче когда перенаправляешь вывод результатов в файл, то на экране нифига не видно. Но порой это бывает критично, а нужно и в файл записать и глазками позырить в реалтайме.
На этот случай у нас есть утилита tee, которая как раз этой хераборой и занимается.
На картинке хорошо видно, откуда произошло название tee, это буква T в произношении. Вывод затекает сверху слева и вытекает в двух направлениях. Ты видишь происходящее на экране, а параллельно это происходящее записывается и в файл. Удобно.
Вот как нужно называть утилиты! Взял произношение буквы и можно в коробку упаковывать. Кстати пока писал, вспомнил что английская «H», взяло название от Eighth - то есть восьмая буква алфавита. Короче никто особо не заморачивался с неймингом.
Ну а еще есть подобная утилита, называется просто script. Она позволяет записать всё происходящее на экране сразу в файл. Работает даже в интерактивном режиме. Запустил ты ее и работаешь в консоли, а она пишет все твои действия в кабачок.
Ключей у нее много разных, если интересно можешь глянуть хелпину. Видел что её подключают в bashrc чтобы логировать все действия криворуких обезьян.
Я ни tee ни script не использую, потому что всё время про них забываю, да и особой необходимости нет.
Такие дела. Вечерком закину еще чтива, увидимся!
tags: #bash #utils
—
💩 @bashdays
На этот случай у нас есть утилита tee, которая как раз этой хераборой и занимается.
command | tee log.txt
На картинке хорошо видно, откуда произошло название tee, это буква T в произношении. Вывод затекает сверху слева и вытекает в двух направлениях. Ты видишь происходящее на экране, а параллельно это происходящее записывается и в файл. Удобно.
Вот как нужно называть утилиты! Взял произношение буквы и можно в коробку упаковывать. Кстати пока писал, вспомнил что английская «H», взяло название от Eighth - то есть восьмая буква алфавита. Короче никто особо не заморачивался с неймингом.
Ну а еще есть подобная утилита, называется просто script. Она позволяет записать всё происходящее на экране сразу в файл. Работает даже в интерактивном режиме. Запустил ты ее и работаешь в консоли, а она пишет все твои действия в кабачок.
Ключей у нее много разных, если интересно можешь глянуть хелпину. Видел что её подключают в bashrc чтобы логировать все действия криворуких обезьян.
Я ни tee ни script не использую, потому что всё время про них забываю, да и особой необходимости нет.
Такие дела. Вечерком закину еще чтива, увидимся!
tags: #bash #utils
—
Please open Telegram to view this post
VIEW IN TELEGRAM
👍150 9
Сегодня вынужденно весь день работал инженером электроником. Три компьютера собрал, винду накатил, дату перенес, господи, как это выматывает. Я лучше ELK лишний раз настрою, чем всё это железо разгребать, стар я для этого дерьма стал.
Ну и тут одно событие как-то вскользь прошло и связано оно с нативным файловым менеджером «FAR» который теперь можно без лишнего геморроя поставить на новые линуксы прям из официального репозитория.
Да, когда я начинал свой путь в айти, FAR был как правая рука для окошечников. Все активно призывали пересесть на total commander, но сколько я не делал попыток, так и не смог себя пересилить. Ну люблю я все эти консольные штуки и минимализм.
У меня знакомый большую часть жизни вообще в FAR фронтенд делал, плагинами обвешал и получилась неплохая IDE.
А вот когда я начал знакомство с linux, то второе, что я запустил (после vi), это был как раз midnight commander. Ну и все. FAR и mc стали маст-хэв штуками. Вот даже сейчас сидя на винде у меня вкорячен FAR и я даже раза два в месяц им пользуюсь.
Мой роадмеп был такой - Norton commander → Dos navigator → FAR → Midnight commander.
Короче в новых убунтах ставится так:
Кому подойдет FAR? Все просто, тому, кому не нравится midnight commander.
Я попробовал ради прикола воткнуть его на 23ю убунту (в wsl), взлетело, выглядит как FAR, даже alt+f1 работает для выбора дисков. Ну и по ssh запускается, в смысле подключаешься к серверу по ssh и запускаешь там FAR, работает.
Не знаю, но я уже точно ни на что не променяю Midnight commander. Даже в винде его использую. Мы связаны одной цепью.
А какой у тебя был путь с файловыми менеджерами? Чем нынче пользуешь?
tags: #рабочиебудни #utils #linux
—
💩 @bashdays
Ну и тут одно событие как-то вскользь прошло и связано оно с нативным файловым менеджером «FAR» который теперь можно без лишнего геморроя поставить на новые линуксы прям из официального репозитория.
Да, когда я начинал свой путь в айти, FAR был как правая рука для окошечников. Все активно призывали пересесть на total commander, но сколько я не делал попыток, так и не смог себя пересилить. Ну люблю я все эти консольные штуки и минимализм.
У меня знакомый большую часть жизни вообще в FAR фронтенд делал, плагинами обвешал и получилась неплохая IDE.
А вот когда я начал знакомство с linux, то второе, что я запустил (после vi), это был как раз midnight commander. Ну и все. FAR и mc стали маст-хэв штуками. Вот даже сейчас сидя на винде у меня вкорячен FAR и я даже раза два в месяц им пользуюсь.
Мой роадмеп был такой - Norton commander → Dos navigator → FAR → Midnight commander.
Короче в новых убунтах ставится так:
sudo apt install far2l
Кому подойдет FAR? Все просто, тому, кому не нравится midnight commander.
Я попробовал ради прикола воткнуть его на 23ю убунту (в wsl), взлетело, выглядит как FAR, даже alt+f1 работает для выбора дисков. Ну и по ssh запускается, в смысле подключаешься к серверу по ssh и запускаешь там FAR, работает.
Не знаю, но я уже точно ни на что не променяю Midnight commander. Даже в винде его использую. Мы связаны одной цепью.
А какой у тебя был путь с файловыми менеджерами? Чем нынче пользуешь?
tags: #рабочиебудни #utils #linux
—
Please open Telegram to view this post
VIEW IN TELEGRAM
С наступающим! Давным-давно я избавился от OpenVPN и сейчас активно продолжаю использовать WireGuard. Даже порой связываю продакшен сервера wg тоннелями в разных регионах, где нет возможности это сделать из коробки. Стабильно, быстро, бесплатно.
Всё было хорошо, пока я не повзрослел и непознал джаззз установил себе Windows. Ну и естественно запихал туда официальный гуёвый клиент от wg. А что могло пойти не так? А всё!
Клиент в рандомный момент показывал средний палец и работал через хуй копыто.
Приходилось его выгружать, перезапускать службы, иногда передергивать софтверно сетевую карту, чтобы не ребутить машину. Ну такое себе удовольствие… Мне блять/блядь работать надо, а я тут утехами занимаюсь.
Так я ебался с полгода, но в этот понедельник меня это окончательно заебало! Пошел искать альтернативы, конкретно гуишного клиента. Потому что сама технология wg меня устраивает, не устраивают эти постоянные глюки.
И да, я много гуглил про эти проблемы, они имеются и фиксятся именно, так как я их и фиксил, перезагрузками, службами и другими костылями.
Короче перебрал я разные клиенты, всё шлак, ну и наткнулся на гитхабе на что-то приличное, простое и даже с фичами.
Называется эта штука TunnlTo. Работает в коллаборации с WireSock. По бенчмаркам обгоняет даже официальный WG клиент. На странице проекта там все подробно описано, можешь самостоятельно ознакомиться.
Чо понравилось:
1. Не глючит, шустрый, не виснет
2. Поддержка импорта тоннелей из официального wg клиента
3. При загрузки ОС можно автоматом подключать/не подключать VPN
4. Разделение приложений, кто идет через VPN, а кто нет
5. Ну и конечно другие фичи, какие хз, мне 4х хватает
В общем мне пока нравится. Заточено под винду, но у маководов и линукс-гиков и так всё хорошо, мой личный пруф.
💻 Страница проекта на github
Неделька выдалась продуктивная и очень нервная, в плане работы, в плане домашней рутины, в плане партнерских интеграций. Надо уже новых коллег к нам приводить, а я всё фигнёй какой-то занимаюсь. Исправлюсь! На выходные сделаем небольшую паузу, буду готовить контент план, чтобы уж совсем из пальца темы не высасывать. Да и ты отдохнешь.
Ну а тебе и твоим близким желаю хороших предстоящих выходных, берегите себя ребят. Увидимся!
tags: #utils #windows #networks
—
💩 @bashdays
Всё было хорошо, пока я не повзрослел и не
Клиент в рандомный момент показывал средний палец и работал через хуй копыто.
Приходилось его выгружать, перезапускать службы, иногда передергивать софтверно сетевую карту, чтобы не ребутить машину. Ну такое себе удовольствие… Мне блять/блядь работать надо, а я тут утехами занимаюсь.
Так я ебался с полгода, но в этот понедельник меня это окончательно заебало! Пошел искать альтернативы, конкретно гуишного клиента. Потому что сама технология wg меня устраивает, не устраивают эти постоянные глюки.
И да, я много гуглил про эти проблемы, они имеются и фиксятся именно, так как я их и фиксил, перезагрузками, службами и другими костылями.
Короче перебрал я разные клиенты, всё шлак, ну и наткнулся на гитхабе на что-то приличное, простое и даже с фичами.
Называется эта штука TunnlTo. Работает в коллаборации с WireSock. По бенчмаркам обгоняет даже официальный WG клиент. На странице проекта там все подробно описано, можешь самостоятельно ознакомиться.
Чо понравилось:
1. Не глючит, шустрый, не виснет
2. Поддержка импорта тоннелей из официального wg клиента
3. При загрузки ОС можно автоматом подключать/не подключать VPN
4. Разделение приложений, кто идет через VPN, а кто нет
5. Ну и конечно другие фичи, какие хз, мне 4х хватает
В общем мне пока нравится. Заточено под винду, но у маководов и линукс-гиков и так всё хорошо, мой личный пруф.
Неделька выдалась продуктивная и очень нервная, в плане работы, в плане домашней рутины, в плане партнерских интеграций. Надо уже новых коллег к нам приводить, а я всё фигнёй какой-то занимаюсь. Исправлюсь! На выходные сделаем небольшую паузу, буду готовить контент план, чтобы уж совсем из пальца темы не высасывать. Да и ты отдохнешь.
Ну а тебе и твоим близким желаю хороших предстоящих выходных, берегите себя ребят. Увидимся!
tags: #utils #windows #networks
—
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Если пишешь говнокод, неважно куда он попадет, в GIT репозиторий или унитаз. Суть одна.
Привет отдыхающим. Нашел на github неплохую пепяку «config-file-validator», которая из консольки валидирует файлы в форматах:
Работает на всём, линуксы, винда, макоська, малина. Надо только установить. В репах увы её нет. Написано на golang.
✔️ Репа с рейтингом, люди пользуются, форкают.
Я качнул с репозитория zip’ник и закинул в
А если любишь docker, то можно прям контейнер подтянуть с этим валидатором.
Теперь в каталоге с файлами запускаем: validator и смотрим:
Отличное решение, когда лень или нет возможности запускать IDE. Быстро, просто, бесплатно.
Люблю такие тулзы, вроде нихера не делают, но пользу приносят. Взял к себе на вооружение. Рекомендую.
🌐 Страница проекта на github
tags: #utils
@BАSHDАYS | BАSHDАYS.CОM
Привет отдыхающим. Нашел на github неплохую пепяку «config-file-validator», которая из консольки валидирует файлы в форматах:
Apple PList XML, CSV, ENV, HCL, HOCON, INI, JSON, Properties, TOML, XML, YAML
Работает на всём, линуксы, винда, макоська, малина. Надо только установить. В репах увы её нет. Написано на golang.
Я качнул с репозитория zip’ник и закинул в
/usr/local/sbincd /tmp
wget https://github.com/Boeing/config-file-validator/releases/download/v1.6.0/validator-v1.6.0-linux-amd64.tar.gz
tar -xf validator-v1.6.0-linux-amd64.tar.gz
mv validator /usr/local/sbin
А если любишь docker, то можно прям контейнер подтянуть с этим валидатором.
Теперь в каталоге с файлами запускаем: validator и смотрим:
root@dev:# validator
× bashdays.json
error: Error at line 3 column 2: invalid character '"' after object key:value pair
✓ bashdays.yml
Summary: 1 succeeded, 1 failed
Отличное решение, когда лень или нет возможности запускать IDE. Быстро, просто, бесплатно.
Люблю такие тулзы, вроде нихера не делают, но пользу приносят. Взял к себе на вооружение. Рекомендую.
tags: #utils
@BАSHDАYS | BАSHDАYS.CОM
Please open Telegram to view this post
VIEW IN TELEGRAM
Открытие костыльного цеха
Привет. Все бэкапы, как и полагается я сжимаю через tar + gzip. Ну повелось так. Можно сказать это устоявшийся стандарт.
Но моя ебанца покоя не даёт, вот и в этот раз сижу, думаю — а хули так долго все сжимается, у меня 32 ядра на сервере с репликой, диск не самый плохой. А оно еле ворочается.
Пошел ковырять кишочки, оказывается у меня gzip хуярит на одном ядре. Не понял. Так и есть. Говорят что с версии 1.7 все изменилось и оно само подстраивается под железо. НИХУЯ, у меня 1.10. Из коробки работает одно ядро.
Хм, может для gzip есть какой-то ключ? Бегло пробежался, в хелпах про threads ничего нет.
Ну раз так. Расчехляем свиней. PIGZ!
Ставится из репы:
Давай затестим. Создаем 10ти гигабайтный файл.
Запускаем тесты:
Хуясе да! PIGZ сжал 10гигабайт за 8 секунд. А gzip понадобилось аж 46 секунд. Разница ОЩУТИМА! Понятно тесты синтетические, но мне их достаточно.
Ради интереса открыл htop, всё верно. Gzip усирается на одном ядрышке. А «свиньи» сразу жрут всё с костями. Прекрасно!
✔️ Теперь pigz нужно подружить с tar
С этим все просто, через пайп:
Либо как вариант через ключ
Но мне первый больше нравится. А чтобы видеть прогресс, можешь запустить так:
Тут используется утилита pv, про нее писал в этом посте.
Короче pigz прям тема и гибко конфигуряется. Я в восторге. Например, можешь сказать ей чтобы использовала только 2 ядра и 2 потока. Почитай хелпину если интересно. Основное я тебе рассказал. Изучай.
Увидимся! Пойду адаптировать под свои бэкапы.
tags: #linux #utils
@ВАSНDАYS | BАSHDАYS.CОM
Привет. Все бэкапы, как и полагается я сжимаю через tar + gzip. Ну повелось так. Можно сказать это устоявшийся стандарт.
Но моя ебанца покоя не даёт, вот и в этот раз сижу, думаю — а хули так долго все сжимается, у меня 32 ядра на сервере с репликой, диск не самый плохой. А оно еле ворочается.
Пошел ковырять кишочки, оказывается у меня gzip хуярит на одном ядре. Не понял. Так и есть. Говорят что с версии 1.7 все изменилось и оно само подстраивается под железо. НИХУЯ, у меня 1.10. Из коробки работает одно ядро.
Хм, может для gzip есть какой-то ключ? Бегло пробежался, в хелпах про threads ничего нет.
Ну раз так. Расчехляем свиней. PIGZ!
PIGZ (Parallel Implementation of GZIP) - это утилита для сжатия файлов, которая использует параллельные вычисления для ускорения процесса сжатия данных.
Ставится из репы:
apt install pigz, а где-то уже сразу установлен.Давай затестим. Создаем 10ти гигабайтный файл.
truncate -s 10G bashdays
Запускаем тесты:
time gzip -k -c bashdays > /dev/null
real 0m46.590s
time pigz -k -c bashdays > /dev/null
real 0m8.535s
Хуясе да! PIGZ сжал 10гигабайт за 8 секунд. А gzip понадобилось аж 46 секунд. Разница ОЩУТИМА! Понятно тесты синтетические, но мне их достаточно.
Ради интереса открыл htop, всё верно. Gzip усирается на одном ядрышке. А «свиньи» сразу жрут всё с костями. Прекрасно!
С этим все просто, через пайп:
tar cf - bashdays | pigz -k -c > bashdays.tar.gz
Либо как вариант через ключ
--use-compress-programtar --use-compress-program="pigz --best --recursive" -cf bashdays.tar.gz bashdays
Но мне первый больше нравится. А чтобы видеть прогресс, можешь запустить так:
tar cf - bashdays | pigz -k -c | pv > bashdays.tar.gz
Тут используется утилита pv, про нее писал в этом посте.
Короче pigz прям тема и гибко конфигуряется. Я в восторге. Например, можешь сказать ей чтобы использовала только 2 ядра и 2 потока. Почитай хелпину если интересно. Основное я тебе рассказал. Изучай.
Увидимся! Пойду адаптировать под свои бэкапы.
tags: #linux #utils
@ВАSНDАYS | BАSHDАYS.CОM
Please open Telegram to view this post
VIEW IN TELEGRAM
Лишаем Linux девственности
Доброе утро друзья. Сейчас покажу как попасть в секретный каталог в Linux. И в 99%, ты никогда раньше в нём не был.
Для этого тебе понадобится портал, который уже есть в твоем дистрибутиве.
Запускам Bash и вводим:
Опа-опа, нихуя!
Видишь два слеша в промте? Поздравляю, дефлорация прошла успешно. Даже не нужно было вводить IDDQD, чтобы активировать «годмод».
И где это мы?В пизде! Ну а чо гадать, давай посмотрим:
Хм, понятнее не стало… Давай посмотрим что находится у нас в этом каталоге, делаем
И что же мы видим? А видим мы содержимое корневой директории. Для чистоты эксперимента можешь запустить так
Получается никакого секретного каталога нет? Получается так. Нас наебали?Расходимся. Не совсем.
✔️ Почему так? Откуда берется второй слэш?
POSIX в своём описании, говорит, что три и более слешей могут быть заменены на один слеш. Нужно это для канонизации текущего рабочего каталога.
И сделано это для исторической совместимости. Некоторые версии Unix во времена динозавров использовали пути вида:
Короче вся ответственность по двум слешам ложится на плечи дистрибутивов. И каждый дистрибутив в праве делать с ними всё что захочет.
Пример: если в Cygwin выполнить
Потому что Cygwin использует корень из
А все что более 2х слешей, должно рерайтиться на один слеш. Такие дела!
Всех с пятницей и хороших выходных! Да и на выходные будут посты. На связи!
tags: #linux #utils
@ВАSНDАYS | BАSHDАYS.CОM
Доброе утро друзья. Сейчас покажу как попасть в секретный каталог в Linux. И в 99%, ты никогда раньше в нём не был.
Для этого тебе понадобится портал, который уже есть в твоем дистрибутиве.
Запускам Bash и вводим:
cd //
Опа-опа, нихуя!
user@server:/$ cd //
user@server://$
Видишь два слеша в промте? Поздравляю, дефлорация прошла успешно. Даже не нужно было вводить IDDQD, чтобы активировать «годмод».
И где это мы?
user@server:/$ cd //
user@server://$
user@server:/$ pwd
//
Хм, понятнее не стало… Давай посмотрим что находится у нас в этом каталоге, делаем
ls -la. И что же мы видим? А видим мы содержимое корневой директории. Для чистоты эксперимента можешь запустить так
ls -la /////// и получишь такой же результат.Получается никакого секретного каталога нет? Получается так. Нас наебали?
POSIX в своём описании, говорит, что три и более слешей могут быть заменены на один слеш. Нужно это для канонизации текущего рабочего каталога.
Что такое POSIX, писал в этом посте.
И сделано это для исторической совместимости. Некоторые версии Unix во времена динозавров использовали пути вида:
//hostname/path для доступа к path на сервере //hostname.Короче вся ответственность по двум слешам ложится на плечи дистрибутивов. И каждый дистрибутив в праве делать с ними всё что захочет.
Пример: если в Cygwin выполнить
cd // а затем ls, получишь ошибку: ls: reading directory '.': Permission denied
Потому что Cygwin использует корень из
// для определения //имени хоста/пути. А убунта с этим нормально уживается и выводит содержимое корневой директории.А все что более 2х слешей, должно рерайтиться на один слеш. Такие дела!
Всех с пятницей и хороших выходных! Да и на выходные будут посты. На связи!
tags: #linux #utils
@ВАSНDАYS | BАSHDАYS.CОM
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡️ 14-летний школьник из Москвы сошел с ума собирая KDE из исходников
Сижу в потоке, правлю
Запускаюпохерены отсутствуют.
Почесываю свою лысую кабину. Ага, значит какой-нибудь puppet агент тут крутится или ансибл.
Смотрю процессы, паппета нет, смотрю логи auth на момент подключения ансибла. Да блядь. Пусто! Смотрю логи крона и сам крон, ничо нет. В логах нет — нихуя!
Списываю всё на глюки симуляции этого мира и магнитные бури. Добавляю еще раз локейшены, перезапускаю nginx, сука! Локейшенов нет ))
Курю, бегаю по каталогам, размеренно думаю. Ииии замечаю забавнейшую вещь. В корне каталога etc есть директория .git!!! Вот и сложился пазл. Картина маслом.
Как я и думал, здесь установлен ETCKeeper.
Эта такая херабора, которая отслеживает изменения в каталоге etc. Если что-то изменилось, оно это откатывает из git репозитория.
А чтобы поправить nginx конфиг, предварительно нужно запушить в репу актуальные правки иии только потом оно останется на сервере.
Штука довольно интересная, в своё время я ее втыкал где только можно. Очень полезна от криворуких разработчиков/тестировщиков с рутом. Которые ломают и потом утверждают, что они ничего не делали.
А ты просто смотришь диффы в git и тыкаешь их носом как нагадивших в макбук котяток.
Ставится эта штука очень просто, через apt, ну а дальше почти из коробки работает, достаточно сказать с каким репозиторием ей взаимодействовать и по желанию добавить всякие конфиденциальные файлы в .gitignore.
Давай позабавимся:
В git репе в разделе Deploy Keys, добавляем public root ключик с галочкой Allow write access.
А затем применяем бест практику и пушим в мастер:
Всё Initial Commit почти со всем содержимым, запушен в репу. Красотища!
✔️ Но перед пушем не забываем поправить файлик .gitignore и добавить в него например всякие shadows и т.п.
Ну а теперь пробуем отредактировать какой-нибудь fstab и добавить новую строчку. Добавил? Ок, запускай!
Всё! Правки в git репе. Ну и по желанию всё это дело можно откатить, либо пачкой, либо один файл.
Делается так, смотрим список коммитов:
Теперь откатываем правленый fstab:
Ееее! Откатилось. Ну и не забываем, что после отката нужно зафиксировать все изменения.
Вот и всё! Функционал etckeeper намного шире, я рассказал про основное и саму концепцию. А если будет интересно думаю ты и сам найдешь всю нужную информацию в гугле.
Вообще можно и через Bash скрипт такое размутить, не устанавливая никакой софт, но иногда проще сделать
Отслеживать изменения можно через incron и автоматически коммитить:
Incron запускает таски не по временным меткам, а по событиям.
Добавить больше нечего. Хорошего тебе дня!
tags: #linux #utils
@ВАSНDАYS | BАSHDАYS.CОM
Сижу в потоке, правлю
nginx.conf, птички поют, коты ебутся, весна! Запускаю
nginx reload, хм, ничего не изменилось… Лезу в nginx.conf, а в нем все мои локейшены, которые я добавил — Почесываю свою лысую кабину. Ага, значит какой-нибудь puppet агент тут крутится или ансибл.
Смотрю процессы, паппета нет, смотрю логи auth на момент подключения ансибла. Да блядь. Пусто! Смотрю логи крона и сам крон, ничо нет. В логах нет — нихуя!
Списываю всё на глюки симуляции этого мира и магнитные бури. Добавляю еще раз локейшены, перезапускаю nginx, сука! Локейшенов нет ))
Курю, бегаю по каталогам, размеренно думаю. Ииии замечаю забавнейшую вещь. В корне каталога etc есть директория .git!!! Вот и сложился пазл. Картина маслом.
Как я и думал, здесь установлен ETCKeeper.
Эта такая херабора, которая отслеживает изменения в каталоге etc. Если что-то изменилось, оно это откатывает из git репозитория.
А чтобы поправить nginx конфиг, предварительно нужно запушить в репу актуальные правки иии только потом оно останется на сервере.
Штука довольно интересная, в своё время я ее втыкал где только можно. Очень полезна от криворуких разработчиков/тестировщиков с рутом. Которые ломают и потом утверждают, что они ничего не делали.
А ты просто смотришь диффы в git и тыкаешь их носом как нагадивших в макбук котяток.
Ставится эта штука очень просто, через apt, ну а дальше почти из коробки работает, достаточно сказать с каким репозиторием ей взаимодействовать и по желанию добавить всякие конфиденциальные файлы в .gitignore.
Давай позабавимся:
apt install etckeeper git
cd /etc
git remote add origin git@github.com:bashdays/etc.git
В git репе в разделе Deploy Keys, добавляем public root ключик с галочкой Allow write access.
А затем применяем бест практику и пушим в мастер:
git push -u origin master
Всё Initial Commit почти со всем содержимым, запушен в репу. Красотища!
Я этой хуйнёй не занимаюсь, ну спиздят у меня хеши паролей, да ради бога. Репа приватная. Да и на серваке у меня вход по паролям всегда отключен, только ключи.
Ну а теперь пробуем отредактировать какой-нибудь fstab и добавить новую строчку. Добавил? Ок, запускай!
etckeeper commit "поправил fstab" && git push
Всё! Правки в git репе. Ну и по желанию всё это дело можно откатить, либо пачкой, либо один файл.
Делается так, смотрим список коммитов:
etckeeper vcs log --pretty=oneline
e36f279 (HEAD -> master, origin/master)
9c24a66 поправил fstab
c1ee020 Initial commit
Теперь откатываем правленый fstab:
etckeeper vcs checkout 9c24a66 /etc/fstab
Ееее! Откатилось. Ну и не забываем, что после отката нужно зафиксировать все изменения.
etckeeper commit "вернул как было"
git push
Вот и всё! Функционал etckeeper намного шире, я рассказал про основное и саму концепцию. А если будет интересно думаю ты и сам найдешь всю нужную информацию в гугле.
Вообще можно и через Bash скрипт такое размутить, не устанавливая никакой софт, но иногда проще сделать
apt install чем отлаживать баги в своем коде.Я как-то на коленке изобретал нечто подобное для nginx, писал в этом посте.
Отслеживать изменения можно через incron и автоматически коммитить:
incrontab -e
/etc IN_MODIFY /usr/bin/etckeeper commit "modified $@/$#"
Incron запускает таски не по временным меткам, а по событиям.
Добавить больше нечего. Хорошего тебе дня!
tags: #linux #utils
@ВАSНDАYS | BАSHDАYS.CОM
Please open Telegram to view this post
VIEW IN TELEGRAM
Linux всем надоел?
Привет. Сегодня поговорим про полезную утилиту, которой я лично пользуюсь для поиска всякого говна на Linux серверах.
В контексте говна выступает всё то, что не должно быть на серваке. К примеру собранные их исходников древние артефакты и т.п.
Короче софтина ищет все файлы, которые попали на сервак в обход пакетного менеджера. Ну и которые были установлены из левых источников, либо созданные самими пользователями.
✔️ Называется Сruft, ставится через апт, или чего там у тебя.
А дальше запускаем. НО из коробки она будет въедливо и долго шуршать. Поэтому заранее сообщаем ей, какие директории нужно проигнорировать.
Например, я знаю что установлен docker и мне в отчете это видеть не обязательно. Справедливо и для всяких mysql и т.п.
Тем самым ты уменьшишь свой отчет и потратишь меньше времени на анализ.
Отчет выглядит примерно так:
В отчете ты найдешь ОЧЕНЬ много интересного, особенно если это сервак клиента или ты устроился на новую работу и нужно въехать в инфраструктуру. А может найдешь какую-нибудь хитро запрятанную малварю.
Из отчета выше я вижу какой-то Bash скрипт
Короче очень удобно искать подобные вещи, о которых ты не подозреваешь или забыл.
У утилиты достаточно много ключей, но я ими не пользуюсь, максимум загоняю в игнор жирные пользовательские папки, докеры и подобную хероту.
Советую присмотреться, ни раз мою жопу выручал во время миграций со старых серваков на новые.
Давай! Не смею больше отвлекать🥳
tags: #linux #utils
@ВАSНDАYS | BАSHDАYS.CОM
Привет. Сегодня поговорим про полезную утилиту, которой я лично пользуюсь для поиска всякого говна на Linux серверах.
В контексте говна выступает всё то, что не должно быть на серваке. К примеру собранные их исходников древние артефакты и т.п.
Короче софтина ищет все файлы, которые попали на сервак в обход пакетного менеджера. Ну и которые были установлены из левых источников, либо созданные самими пользователями.
apt install cruft
cruft - Check the filesystem for cruft (missing and unexplained files)
А дальше запускаем. НО из коробки она будет въедливо и долго шуршать. Поэтому заранее сообщаем ей, какие директории нужно проигнорировать.
Например, я знаю что установлен docker и мне в отчете это видеть не обязательно. Справедливо и для всяких mysql и т.п.
cruft --ignore /boot --ignore /sys --ignore /home --ignore /var/lib/docker -r ~/bashdays-report.txt
Тем самым ты уменьшишь свой отчет и потратишь меньше времени на анализ.
Отчет выглядит примерно так:
cruft report: Fri Apr 19 10:00:07 UTC 2024
---- unexplained: / ----
/usr/local/sbin/fuck.sh
/usr/local/sbin/growroot
/usr/local/sbin/ttyd
/usr/local/sbin/validator
/usr/local/share/fonts/.uuid
В отчете ты найдешь ОЧЕНЬ много интересного, особенно если это сервак клиента или ты устроился на новую работу и нужно въехать в инфраструктуру. А может найдешь какую-нибудь хитро запрятанную малварю.
Из отчета выше я вижу какой-то Bash скрипт
/usr/local/sbin/fuck.sh о котором не знал. А оказывается я его писал очень давно и совсем про него забыл. Опа. А если я бы похерил сервер, то и скрипт бы похерился. Обидно. А еще вон какой-то validator затесался, явно тоже самописная приблудина.Короче очень удобно искать подобные вещи, о которых ты не подозреваешь или забыл.
У утилиты достаточно много ключей, но я ими не пользуюсь, максимум загоняю в игнор жирные пользовательские папки, докеры и подобную хероту.
Советую присмотреться, ни раз мою жопу выручал во время миграций со старых серваков на новые.
Давай! Не смею больше отвлекать
tags: #linux #utils
@ВАSНDАYS | BАSHDАYS.CОM
Please open Telegram to view this post
VIEW IN TELEGRAM
Почему 99% девопсов жирные?
Ну ясно понятно, из-за стресса, а не из-за того, что много жрут и ведут сидячий образ жизни.
Далеко ходить не будем. Вчера мы с тобой тёрли за cruft, поэтому делюсь еще одной штукой, которую также применяю.
✔️ Утилита называется — debsums
Она предназначена для проверки целостности файлов, которые установлены пакетным менеджером. Вроде хуйня, а НЕТ! Инструмент — мастхэв.
Из названия уже понятно, что проверка целостности пакетов будет проходить на основе контрольных хэш сумм.
Откуда берутся эталонные хэши?
При установке пакетов и т.п. все эталонные, контрольные суммы попадают в «базу данных», которая находится тут:
В ней содержатся файлы с данными, которые и использует debsums для проверки.
Например,
Ну дак вот. Debsums либо идет сразу в коробке, либо ставится через пакетный менеджер.
У меня в Селектел на убунте 22 уже была предустановлена, хотя локально её не было. Имей это ввиду.
Запускаем так
В этом случае, будут проверяться все хэш суммы, всех файлов. Это дохуя долго, но иногда полезно если разбираешься с сервером, на который через php залили крипто-майнер или нечто подобное.
Если нужно проверить только измененные:
Опять же очень полезно при миграциях с сервера на сервер.
А для проверки только конфигов:
Например, я в душе не ебал что файл php.ini кто-то правил, а debsum мне это подсказал. И я не зафакапил.
После отработки команды, имеем список измененных файлов:
Ну а дальше включаем в себе подозрительного аналитика и разбираемся с полученной информацией. Также можно быстро визуально понять, какой софт устанавливался и какими внешними пакетами напичкан сервер.
Указав ключ -x весь её высер можно сразу выгрузить в файл. В отчет попадут только измененные файлы.
Из минусов — пиздец долго всё ищет (при полной проверке). Запускаем и идем пить кофе/смотреть мультики. Но это приятное ожидание, плюсы покрывают минусы.
Рекомендую взять на вооружение, утилита довольно пиздатая и достойна твоего внимания.
Подобных утилит много, из тех что я знаю: AIDE, Tripwire, rkhunter, chkrootkit, ossec, Lynis. Присмотрись и к ним, возможно найдешь среди них что-то интересное под свои задачи.
Ну вот и всё. Пойдука я чайку хапну. Хорошего тебе дня!
tags: #linux #utils
@ВАSНDАYS | BАSHDАYS.CОM
Ну ясно понятно, из-за стресса, а не из-за того, что много жрут и ведут сидячий образ жизни.
Далеко ходить не будем. Вчера мы с тобой тёрли за cruft, поэтому делюсь еще одной штукой, которую также применяю.
Она предназначена для проверки целостности файлов, которые установлены пакетным менеджером. Вроде хуйня, а НЕТ! Инструмент — мастхэв.
Из названия уже понятно, что проверка целостности пакетов будет проходить на основе контрольных хэш сумм.
Откуда берутся эталонные хэши?
При установке пакетов и т.п. все эталонные, контрольные суммы попадают в «базу данных», которая находится тут:
/var/lib/dpkg/info.В ней содержатся файлы с данными, которые и использует debsums для проверки.
Например,
nginx-common.md5sumsdba41b system/nginx.service
17d6d7 package-hooks/source_nginx.py
9e33ba nginx-common/NEWS.Debian.gz
6c278a nginx-common/README.Debian
Ну дак вот. Debsums либо идет сразу в коробке, либо ставится через пакетный менеджер.
У меня в Селектел на убунте 22 уже была предустановлена, хотя локально её не было. Имей это ввиду.
Запускаем так
debsums -a
В этом случае, будут проверяться все хэш суммы, всех файлов. Это дохуя долго, но иногда полезно если разбираешься с сервером, на который через php залили крипто-майнер или нечто подобное.
Если нужно проверить только измененные:
debsums -ac
Опять же очень полезно при миграциях с сервера на сервер.
А для проверки только конфигов:
debsums -ae
Например, я в душе не ебал что файл php.ini кто-то правил, а debsum мне это подсказал. И я не зафакапил.
После отработки команды, имеем список измененных файлов:
/etc/crontab
/sbin/start-stop-daemon
/etc/modprobe.d/blacklist.conf
/etc/nginx/sites-available/default
/etc/php/8.1/fpm/pool.d/www.conf
/etc/sysctl.conf
/etc/sudoers
/etc/pam.d/sudo
/etc/systemd/zram-generator.conf
Ну а дальше включаем в себе подозрительного аналитика и разбираемся с полученной информацией. Также можно быстро визуально понять, какой софт устанавливался и какими внешними пакетами напичкан сервер.
Указав ключ -x весь её высер можно сразу выгрузить в файл. В отчет попадут только измененные файлы.
Из минусов — пиздец долго всё ищет (при полной проверке). Запускаем и идем пить кофе/смотреть мультики. Но это приятное ожидание, плюсы покрывают минусы.
Рекомендую взять на вооружение, утилита довольно пиздатая и достойна твоего внимания.
Подобных утилит много, из тех что я знаю: AIDE, Tripwire, rkhunter, chkrootkit, ossec, Lynis. Присмотрись и к ним, возможно найдешь среди них что-то интересное под свои задачи.
Ну вот и всё. Пойдука я чайку хапну. Хорошего тебе дня!
tags: #linux #utils
@ВАSНDАYS | BАSHDАYS.CОM
Please open Telegram to view this post
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Привет отдыхающим. Продолжим тему с повышением прав. Искать suid биты через find конечно мастхев, но есть пиздатый инструмент под названием LinPEAS.
Изобрел его некий пентестер - Карлсон (Carlson P), который держит проект HackTricks, возможно ты про него когда-нибудь слышал.
Короче штука написана на sh. Чувствуешь уровень? То есть будет работать хоть на чайнике.
При запуске LinPEAS сканирует Linux машину, на всякие дырки и криворукость админов.
Один из тестов, как раз показывает файлы с suid битами, которые можно использовать для повышения привилегий.
Скрипт заточен как раз под поиск всякой хуйни, которая может помочь злоумышленникам надругаться над твоим серваком.
Работает самодостаточно, не нужен root, ничего не пишет на диск, не требует каких-то библиотек, запустил и получил на экране отчет. Заплакал, сделал выводы, закрыл дырки/оставил как есть.
Запускается одной командой и не требует установки:
Но можно и через змеюку:
Поддерживает различные ключи запуска и всякие навороты, тут уже читай мануал. Мне обычно хватает запуска по дефолту.
Да, утилита раньше входила в состав Kali Linux, сейчас хз, не проверял, но скорее всего там и осталась.
Короче достойная пепяка! Рекомендую потыкать, по крайней мере на своих сервачках с пет проектами. Найдешь много интересного.
🌐 Страница проекта на github
tags: #linux #security #utils
@ВАSНDАYS | BАSHDАYS.CОM
LinPEAS - Linux Privilege Escalation Awesome Script
Изобрел его некий пентестер - Карлсон (Carlson P), который держит проект HackTricks, возможно ты про него когда-нибудь слышал.
Короче штука написана на sh. Чувствуешь уровень? То есть будет работать хоть на чайнике.
При запуске LinPEAS сканирует Linux машину, на всякие дырки и криворукость админов.
Один из тестов, как раз показывает файлы с suid битами, которые можно использовать для повышения привилегий.
Скрипт заточен как раз под поиск всякой хуйни, которая может помочь злоумышленникам надругаться над твоим серваком.
Работает самодостаточно, не нужен root, ничего не пишет на диск, не требует каких-то библиотек, запустил и получил на экране отчет. Заплакал, сделал выводы, закрыл дырки/оставил как есть.
Запускается одной командой и не требует установки:
curl -L https://github.com/peass-ng/PEASS-ng/releases/latest/download/linpeas.sh | sh
Но можно и через змеюку:
python -c "import urllib.request; urllib.request.urlretrieve('https://github.com/peass-ng/PEASS-ng/releases/latest/download/linpeas.sh', 'linpeas.sh')"
python3 -c "import urllib.request; urllib.request.urlretrieve('https://github.com/peass-ng/PEASS-ng/releases/latest/download/linpeas.sh', 'linpeas.sh')"Поддерживает различные ключи запуска и всякие навороты, тут уже читай мануал. Мне обычно хватает запуска по дефолту.
Да, утилита раньше входила в состав Kali Linux, сейчас хз, не проверял, но скорее всего там и осталась.
Короче достойная пепяка! Рекомендую потыкать, по крайней мере на своих сервачках с пет проектами. Найдешь много интересного.
tags: #linux #security #utils
@ВАSНDАYS | BАSHDАYS.CОM
Please open Telegram to view this post
VIEW IN TELEGRAM