ru
Feedback
Bash Days | Linux | DevOps

Bash Days | Linux | DevOps

Открыть в Telegram

Авторский блог от действующего девопса Самобытно про разработку, devops, linux, скрипты, сисадминство, техдирство и за айтишную жизу. Автор: Роман Шубин Реклама: @maxgrue MAX: https://max.ru/bashdays Курс: @tormozilla_bot Блог: https://bashdays.ru

Больше

📈 Аналитический обзор Telegram-канала Bash Days | Linux | DevOps

Канал Bash Days | Linux | DevOps (@bashdays) языкового сегмента Русский является активным участником. Сейчас сообщество объединяет 23 791 подписчиков, занимая 5 701 место в категории Технологии и приложения и 28 125 место в регионе Россия.

📊 Показатели аудитории и динамика

С момента создания невідомо проект демонстрирует стремительный рост, собрав аудиторию из 23 791 подписчиков.

Согласно последним данным от 18 июня, 2026, канал показывает стабильную активность. За последние 30 дней изменение числа участников составило -216, а за последние 24 часа — -5, при этом общий охват остаётся высоким.

  • Статус верификации: Не верифицирован
  • Уровень вовлечённости (ER): Средний показатель вовлечённости аудитории составляет 22.75%. В первые 24 часа после публикации контент обычно набирает 12.90% реакций от общего числа подписчиков.
  • Охват публикаций: В среднем каждый пост получает 5 413 просмотров. В течение первых суток публикация набирает 3 068 просмотров.
  • Реакции и взаимодействия: Аудитория активно поддерживает контент: среднее количество реакций на один пост — 21.
  • Тематические интересы: Контент сосредоточен на ключевых темах, таких как bashdays, linux, bash, docker, скрипт.

📝 Описание и контентная политика

Автор описывает ресурс как площадку для выражения субъективного мнения:
Авторский блог от действующего девопса Самобытно про разработку, devops, linux, скрипты, сисадминство, техдирство и за айтишную жизу. Автор: Роман Шубин Реклама: @maxgrue MAX: https://max.ru/bashdays Курс: @tormozilla_bot Блог: https://bashdays.r...

Благодаря высокой частоте обновлений (последние данные получены 19 июня, 2026) канал поддерживает актуальность и высокий уровень охвата публикаций. Аналитика показывает, что аудитория активно взаимодействует с контентом, что делает его важной точкой влияния в категории Технологии и приложения.

23 791
Подписчики
-524 часа
-257 дней
-21630 день
Архив постов
Привет. Сегодня шифруем пиксели! Если кратко, берем png картинку и шифруем ее с помощью парольной фразы. Но самое главное, картинка останется в png формате и не превратится в какой-то бесполезный бинарник. А дальше её можно будет открыть и визуально посмотреть через любой просмотрщик файлов.
Правда в зашифрованном виде, но это не проблема если у тебя есть парольная фраза или файл-ключ.
А поможет нам в этом старый и добрый ImageMagic Для начала мне понадобится изображение, в котором я буду шифровать пиксели. Давай его сгенерим:
convert wizard: bashdays.png
Эта команда создаст изображение bashdays.png с волшебником, который хуячит живопись. Выглядит это так: bashdays.png Хорошо. Теперь нужно зашифровать это изображение. Выполняем команду:
echo 'пароль' | convert bashdays.png -encipher - -depth 8 png24:hidden.png
Получаем файл hidden.png с пикселями. Файл прекрасно открывается, но волшебника мы уже не видим. Лишь какой-то цветной шум. Выглядит это так. Шифрование делаем через опцию encipher, в качестве аргумента эта опция принимает имя файла с парольной фразой. Дефис после encipher означает - стандартный ввод, который в данном случае указывает на канал «|». Ну и дешифровка:
echo 'пароль' | convert hidden.png -decipher - restored.png
Если проебал пароль или ввел неправильно, получишь тот же набор цветных пикселей. Пароль восстановить увы не получится. Так что запиши на бумажку и повесь на монитор, как в лучших практиках ИБ. Еще есть прикол, что изображение можно зашифровать с помощью ключа, например другого изображения.
convert bashdays.png -encipher key.gif result.png
В этом примере, key.gif это ключ для шифрования. Без этого файла расшифровать изображение уже не получится. Заебись? Заебись! ✔️ А какие нюансы? Да, они есть. Некоторые форматы изображений, не поддерживают зашифрованные пиксели, например jpeg или gif. Поэтому прежде чем что-то шифровать, проверь что это получится расшифровать. ImageMagick зашифровывает только пиксели, метаданные изображения остаются нетронутыми и читабельными для любых пользователей. Поэтому если что-то скрываешь, подчищай метаданные. Шифрование идет через AES в режиме счетчика. Первая половина парольной фразы это одноразовый номер, вторая половина это ключ шифрования.
Если далёк от криптографии, то забей хуй, работает да и ладно.
Где можно применить? Каждый сам решает зачем ему это нужно. Но знаю реальный случай, когда блекхэты публиковали в twitter подобные изображения. Эти изображения можно было найти в поиске по-специальному тэгу. С помощью этих картинок, осуществлялась координация кибер-атак по всему миру. По мне так, данный способ уматно использовать в каких-нибудь онлайн квестах, где нужно найти парольную фразу, а потом расшифровать изображение. Больше на ум (из легального) ничего и не приходит. Изучай! tags: #security @ВАSНDАYS | BАSHDАYS.CОM

✨ Курс «Быстрый старт в DevOps» бесплатно. Как забрать? Меня зовут Марсель Ибраев, и на своем канале я делюсь фишками, которы
✨ Курс «Быстрый старт в DevOps» бесплатно. Как забрать? Меня зовут Марсель Ибраев, и на своем канале я делюсь фишками, которые помогут вам начать путь в DevOps. 2 апреля стартовал курс, созданный на основе ваших пожеланий. Мы с командой учебного центра Слёрм ответили на самые актуальные вопросы начинающих девопсеров: ⚡️ что такое DevOps, и как выстроить работу команды в рамках этой методологии; ⚡️ Kubernetes, Docker и т.д.: как базовые инструменты выстраивают работу в DevOps; ⚡️ DevOps и компания: как состыковать критерии успеха. 1 неделя = 1 открытый модуль. В первом модуле разберем как быстро и эффективно освоить профессию с высокой зарплатой, с каких инструментов начинать, и какую роль в девопсе играют софт-скиллы. 🔗 ЗАБРАТЬ КУРС erid: 2Vtzqv8A2ek

Как в 20 выглядеть на 40? Правильно! Установить Linux! Я всегда обходил стороной команду find, наверное потому что я никогда не умел ее готовить. Мне всегда было проще находить нужное в midnight commander.
У меня кстати даже постов про find не было в этом канале.
Но для bash скриптов mc это не панацея, поэтому изредка приходилось гуглить про find и что-то лепить. Сегодня затрём как раз про find. Но не за Базу, а за его скорость и бест-практики. С помощью find мы ищем по разным паттернам и условиям. Порой необходимо совершить какие-то действия с найденными результатами. И find не может нас этим порадовать. Приходится передавать данные внешним утилитам. У find есть пару опций: exec = запускает утилиту и передает в неё аргументы execdir = перед запуском утилиты, переходит в каталог с найденным Синтаксис этих штук такой:
-exec команда {} суффикс
команда = утилита, которую запускаем {} = развернется в найденные файлы ; = суффикс, на каждый файл запускается команда + = суффикс, команда запускается с группой файлов
Символ ; обязательно нужно экранировать либо поместить в кавычки.
Хорош с теорией, погнали в практику:
find ~/ -type f -exec sh -c 'echo $$' {} \;
Эта команда будет искать обычные файлы в домашнем каталоге пользователя. Утилитой для обработки, у нас будет интерпретатор, который выведет на экран идентификатор процесса. Интерпретатор используем чисто в лабораторных целях. По итогу на экран я получил 100500 строчек такого вида:
26719
26720
26721
Это список процессов, которые были задействованы в результате поиска. Чёто прям дохуя. Если надоело ждать результата, жми CTRL+C. ✔️ А теперь давай оптимизируем!
find ~/ -type f -exec sh -c 'echo $$' {} +
По итогу я получаю одну цифру 27413, один идентификатор процесса, в отличие от предыдущего варианта. Круто? Да охуеть не встать! Но что произошло? Ща объясню. В оптимизированном варианте, имена файлов разбиваются на максимально большие группы и затем передаются в утилиту. Вот в этом и есть разница. Ведь, чтобы запустить внешнюю утилиту, нужно совершить кучу лишний телодвижений. Если запускать на каждый найденный файл отдельный процесс, то тратится куча ресурсов, причем зря. Естественно это прилично влияет на скорость. Проще ведь сразу скормить утилите группу найденных файлов и никому не ебать мозги. Стопэ. Это еще не всё, можно еще больше разогнать 👇 Включаем режим оверклоакинга! Будем использовать утилиту xargs, она как раз входит в пакет с find. Утилита xargs запускает процессы параллельно. Уже понимаешь чо щас будет?
find ~/ -type f -print0 | xargs -0 -n4 -P2 команда
Xargs читает стандартный ввод и разбивает его на группы аргументов. А после этого запускает команду с данной группой аргументов. По ключам: 0 = аргументы разделяются символами NUL ASCII. А спецсимволы косой черты \ и кавычками, воспринимаются как обычные. n = максимально количество аргументов переданных за один раз P = максимально количество процессов запущенных одновременно. Если указать 0, запустится как можно больше таких процессов. команда = внешняя команда которая будет запущена. Если ничего не указывать, на экран выведутся группы аргументов, удобная фича для отладки. А еще если во время работы xargs, ей послать сигнал SIGUSR1 (kill), то количество одновременно запускаемых процессов будет увеличено. А для SIGUSR2, будет уменьшено.
SIGUSR1 и SIGUSR2 могут быть использованы программой для произвольных нужд, например для межпроцессной (или межпоточной) синхронизации, управления фоновыми процессами (демонами) и т. п. По умолчанию, сигналы SIGUSR1 и SIGUSR2 завершают выполнение процесса.
Это базовая команда для правильной работы find + xargs:
find -print0 | xargs -0 command
Но учти, если command у тебя будет оболочкой sh/bash, тогда нужно правильно обработать аргументы и учесть всякие splitting, globbing и т.п. Ладно чо. Всем хорошего отдыха и заебатых шашлычков. На 01.05 я возьму отгул, а там дальше уже всё по плану: за кишочки подергаем, да на страусе (strace) покатаемся. Будет охуенно! tags: #bash #linux @ВАSНDАYS | BАSHDАYS.CОM

Яндекс приглашает начинающих DevOps-инженеров на летнюю стажировку в формате «Технолето» Студентов ждет насыщенная и яркая пр
Яндекс приглашает начинающих DevOps-инженеров на летнюю стажировку в формате «Технолето» Студентов ждет насыщенная и яркая программа стажировки. Участники смогут пообщаться с топовыми специалистами компании, познакомиться с передовыми технологиями Яндекса, а также зажечь под диджей-сеты и на Алгорейв-вечеринках. Во время обучения начинающие DevOps-специалисты научатся развивать инфраструктуру и мониторинг компонентов сервиса, улучшать процессы разработок и CI/СD, разбираться в архитектуре высоконагруженных распределенных систем и многое другое. А если хочется погрузиться в другую сферу, то на стажировке есть возможность освоить бэкенд, фронтенд, машинное обучение, QA, DevOps и другие IT-направления. Стажировка оплачивается, кроме того, студенты могут выбрать для себя удобный график обучения — в течение 3, 4 или 6 месяцев. По итогам у стажеров есть все шансы получить оффер в Яндексе. По статистике, больше половины стажеров переходят в штат компании. Оставляй заявку на участие и проведи лето ярко.

⚡️⚡️⚡️⚡️⚡️⚡️ Linux умер! Все из вас хоть раз в жизни запускали fork бомбу. Но если ты, тот единственный и неповторимый, то советую взять и прям сейчас это сделать. Это как впервые поссать в море. Открывай консоль и запускай:
:(){ :|:& };:
После запуска, перезагружай свой компьютер и продолжай читать этот пост.
Концепция, лежащая в основе форк-бомбы — процессы постоянно воспроизводят сами себя, потенциально вызывая отказ в обслуживании.
✔️ Что это за странная регулярка? Ну да, похожа на язык брейнфака. Давай теперь эту непонятную строчку, сделаем более понятной.
forkbomb()
{
    forkbomb | forkbomb &
};
forkbomb
Опа, теперь всё на своих местах. Все наглядно и прозрачно. Каждый экземпляр запускает два новых экземпляра и так до бесконечности. От этой заразы можно защитится с помощью ulimit, ограничив количество запускаемых процессов. Делается так:
ulimit -u 30
Ну либо прописать эти ограничения /etc/security/limits.conf
* hard nproc 30
hard = максимальное количество процессов nproc * = для всех пользователей равным 30 Жесткое ограничение позволяет зафиксировать лимиты, чтобы пользователи ненароком через ulimit их не сняли. Еще был вопрос: а почему вместо | не использовать && ? Ну логично же, && выполняет команды последовательно. А вертикальная палка выполняет команды одновременно, при этом дескрипторы файлов перенаправляются в канал. Вот бы с регулярками так, развернул их и наглядно стало понятно, что они делают и как. Но увы. Ладно, чо, вроде пятница, а организм уже бунтует против субботнего рабочего дня. Ну ничего, зато потом 4 дня можно будет отдохнуть. Давай, увидимся! tags: #bash #linux @ВАSНDАYS | BАSHDАYS.CОM

Онлайн-хакатон по детектированию уязвимостей 13 мая – 16 июня Positive Technologies запускает хакатон для тех, кто хочет прим
Онлайн-хакатон по детектированию уязвимостей 13 мая – 16 июня Positive Technologies запускает хакатон для тех, кто хочет примерить на себя роль специалиста по разработке сканера уязвимостей, работает с Linux/Windows на продвинутом уровне, умеет писать на Python. Участников ждут три этапа: 📍Стендирование 📍Обнаружение ПО 📍Обнаружение уязвимостей Сомневаешься в своих силах? Эксперты будут поддерживать всех участников и отвечать на вопросы в специальном чате. А еще в начале хакатона мы пришлем тебе видео, которое поможет разобраться в выполнении заданий. Участвуй и забирай денежные призы. Самые лучшие получат шанс присоединиться к команде Positive Technologies. Заявку можно отправить до 8 мая. Участвовать в хакатоне

Алиасы штука удобная, со временем они становятся зоной комфорта, экономят время, особенно на локальной машине. Но как использовать готовые алиасы в своих bash скриптах? Сегодня про это и поговорим. Смотри, есть у тебя алиас в .bashrc:
alias glist="ls -la"
Тут понятно, вводим glist а оно по умолчанию интерпретируется как ls -la. А теперь напишем простой bash скрипт:
#!/bin/bash

alias
echo "hello bashdays"
glist
И вот незадача. Получаем ошибку: glist: command not found Ну оно и ежу понятно. Алиасы тут никаким боком к скрипту не привязаны. Команда alias по идее должна была вывести все алиасы, которые прописаны, но она этого не сделала. И как быть? Городить в самом скрипте всё необходимое? Ну можно и так, но есть способ изящнее. Изменяем скрипт:
#!/bin/bash -i

alias
echo "hello bashdays"
glist
Добавился ключик -i, с помощью него мы запускаем оболочку bash в интерактивном режиме. Само собой подтягиваются всякие bashrc и т.п. как при обычно логине. ✔️ Теперь при запуске скрипта: 1. Выведется список всех алиасов 2. Выведется строка из echo 3. Отработает алиас glist == ls -la Можно конечно еще и через source, shopt -s expand_aliases и прочие велосипеды подобное сделать, но через ключик -i более нативнее что-ли получается. Если же нет возможности поправить скрипт, как вариант, прописываем в bashrc такую строчку:
function glist () { command ls -la "$@"; }; export -f glist
Теперь даже без ключа -i функция glist будет работать в любом скрипте без вмешательства в него. Короче везде свои нюансы. Но вообще как совет — не нужно привязываться к алиасам, если нужно сделать ls -la, так и пиши в скрипте, нахер эти спагетти, оставь их для ансибла. Чем меньше привязок, тем меньше багов и стабильнее твой скрипт. Пусть он будет самодостаточный и независимый от всякой хуйни. Изучай. tags: #bash #linux @ВАSНDАYS | BАSHDАYS.CОM

Высокопроизводительные базы данных от @Selectel А вы знали, что облачные базы данных Selectel — одни из самых производительны
Высокопроизводительные базы данных от @Selectel А вы знали, что облачные базы данных Selectel — одни из самых производительных на диком западе рынке? Все потому, что они работают на действительно мощном железе: процессорах Intel® Xeon® Gold 6454 и AMD EPYC™, высокочастотных планках оперативной памяти, а также NVMe локальных дисках в конфигурации RAID10. Чтобы вы могли выжать максимум из облачных баз данных, коллеги прокачали их еще сильнее, а именно: увеличили параметры производительности дисковой подсистемы IOPS в 3,5 раза (до 90 000 IOPS) и пропускной способности — в 2,5 раза (до 1000 МБ/c). Главные преимущества DBaaS в Selectel: ▫️В Selectel большой выбор систем управления базами данных: PostgreSQL, MySQL, TimeScaleDB, Apache Kafka и даже Redis. ▫️ Развернуть отказоустойчивый кластер можно всего в пару кликов в панели управления. ▫️ Облачные базы данных Selectel соответствуют основным стандартам безопасности, включая 152-ФЗ, PCI DSS 3.2.1, ISO 27001, ISO 27017, ISO 27018. Переходите по ссылке и создайте высокопроизводительный кластер облачных баз данных за минуту: https://slc.tl/6a5zi Реклама ООО «Селектел» erid 2Vtzqv8bqmJ

Возможно ты когда-нибудь замечал, что при вводе команды history, иногда рядом с командой отображается какая-то звездочка. Выглядит это примерно так:
 1990 htop
 1991* ls -la
 1992 uptime
Смущает? Неа! Но доебаться стоит, откуда она вообще взялась и что она означает. Не просто же так она там появилась. Вводим в терминале:
gavno
free
bashdays
history
Видим такое:
 1997  gavno
 1998  free
 1999  bashdays
 2000  history
✔️ Делаем финт ушами: 1. Жмем в консоли ctrl+r 2. Вводим команду bashdays 3. Нажимаем стрелку вверх 4. Отображается предыдущая команда free 5. Удаляем через backspace команду free 6. Нажимаем стрелку вниз 7. Видим появилась строка bashdays 8. Выполняем history
 1997  gavno
 1998*
 1999  bashdays
 2000  history
Видим что команда free пропала и вместо нее появилась какая-то всратая звездочка. Это всё потому что мы отредактировали команду free через backspace. Если backspace заменить и не стирать free, а добавить несколько букв: freezer, то выхлоп будет таким:
 1997  gavno
 1998* freezer
 1999  bashdays
 2000  history
Тут нагляднее получилось, видно, что реально было редактирование команды free. Хуй знает как это можно применить, тут больше интерес к этой звездочке, что это такое и при каком кейсе она появляется в history. А еще есть хак. Если нажать ctrl + r, ввести команду, которая помечена звездочкой, а затем нажать ctrl + shift + -. То редактирование откатится и звездочка пропадёт.
Еще есть легенда, что звездочка может появляться при запуске команд из другого сеанса. То есть если открыть 2 терминала и в одном вводить команды, то в другом терминале в history эти команды будут со звездочками.
Я проверил, воспроизвести не получилось. История команд обновляется, только после того как сессия закрыта. В официальной документации по Bash по этому поводу есть лишь такое упоминание: Lines prefixed with a * have been modified. Скудненько. Такие дела. tags: #bash #linux @ВАSНDАYS | BАSHDАYS.CОM

💥 Онлайн-встреча: «Закулисье: инсайдерская информация про будущее профессии DevOps в условиях AI» Я Марсель Ибраев, и на сво
💥 Онлайн-встреча: «Закулисье: инсайдерская информация про будущее профессии DevOps в условиях AI» Я Марсель Ибраев, и на своем канале я делюсь инсайдерской инфой об индустрии DevOps 25 апреля мы вместе с Александром Крыловым, TeamLead DevOps в компании Bimeister, проведем бесплатный вебинар, в программе которого: ✅ ТОП-3 непробиваемых профессий, которые выстоят против ИИ; ✅ какие профессии умрут в ближайшие 1-2 года; ✅ какие скиллы прокачивать, чтобы ИИ не смогла вас заменить. 🔗 ЧАТ-БОТ ДЛЯ РЕГИСТРАЦИИ @DevOpsUpgradeBot

Про вербальный секс Здрасти. Вот вам еще одна задачка из моего загашника, которую я скидываю на собесах, размять так сказать мозги кандидату.
Задачка придумана инженерами NASA, специально для будущих разработчиков. Которым в будущем предстоит писать прошивки для их невзъебенных спейс шаттлов и AI гавноходов.
Хм, а ты думал они ни СИська пишут? Нет конечно, там чистый Bash! Ладно, это пена, задача основана на реальных кейсах. Сейчас будет что-то из оперы Javascript, но касаемо Bash. Устраиваемся поудобнее, наливаем чаёк/кофеёк. Поехали!
true
echo $?

false
echo $?

echo $((true == false))
Первый блок возвращает 0, второй соответственно 1. А что вернет третий? Очевидно 0? А вот и хуй там плавал! Вернет 1. Знаешь почему? Потому что ты мыслишь шаблонами, да true = 0, false = 1, но ты упустил саму суть. Операция == внутри $(()) не является равенством возвращаемых СТАТУСОВ в Bash. Она выполняет проверку равенства двух чисел. True и False обрабатываются как переменные, но этим переменным не присвоены никакие значения. Поэтому они интерпретируются как 0.
echo $((true))
echo $((false))
В обоих случаях ты получишь 0. Получается так:
echo $((0 == 0))
Оба числа равны, возвращается истина, то есть та самая единица. ✔️ А как сделать правильно? Ну например так:
true
TRUE=$?
false
FALSE=$?
if (( $TRUE == $FALSE )); then echo TRUE; else echo FALSE; fi
Теперь всё встало на свои места. Мы объявили переменные и задали им значения. А потом уже сравниваем СТАТУСЫ и не РАВЕНСТВО двух чисел. Такие дела. Вроде безобидная штука, а на логику пиздец как влияет.
Поэтому всегда будь внимателен. И заранее проверяй такие штуки перед деплоем в продакшен. Хотя совет дурацкий, согласен. Проще раздеплоиться и потом уже на проде пофиксить. Бест практики ёпта!
Ладно, не болей, увидимся! tags: #bash @ВАSНDАYS | BАSHDАYS.CОM

Ждём крутых Ops-инженеров от уровня Junior+ до Senior на One Day Offer в Екатеринбурге 👌 Всего за один день вы познакомитесь
Ждём крутых Ops-инженеров от уровня Junior+ до Senior на One Day Offer в Екатеринбурге 👌 Всего за один день вы познакомитесь с нашим продуктом — Кредитной Машиной (КМ) — и даже сможете получить оффер в крутую IT-команду Сбера. КМ работает в режиме 24х7 и обрабатывает все заявки на кредиты физических лиц: это до 2 000 000 кредитных запросов в сутки и до 100 запросов в секунду. Что ждём от кандидатов: ✔️ понимание принципов микросервисной архитектуры ✔️ опыт работы с *nix-системами, реляционными СУБД, серверами приложений, прикладным ПО ✔️ навыки написания несложных запросов с использованием SQL ✔️ опыт работы с системами мониторинга ELK/Zabbix/Grafana и т. п. ✔️ знание технологии контейнеризации Опыт работы с Openshift и Kubernetes будет большим плюсом! Если вам интересна работа с микросервисной архитектурой и большим количеством интеграций с источниками данных, регистрируйтесь по ссылке 😉

Привет друзья. Готовы поработать в субботу и потом отдохнуть 4 дня? Жаль что подобные графики справедливы для рядовых айтишников. А нам инженерам приходится держать оборону 24/7/365. Но в этом есть и свои плюсы. Теперь по делу. Иногда клиент очень хочет оставить авторизацию на Linux сервера по ssh по паролю. Я таких никогда не уговариваю использовать ключи, ну хочет человек, ради бога. Возможно когда его забрутфорсят, мозги встанут на место. Ладно. Как жить с паролями? Обычно! Я выполняю 3 действия: 1. При первом логине запрашиваем смену пароля 2. Пароль должен отвечать заданному шаблону 3. Ну и естественно втыкаю fail2ban Давай теперь по каждому пункту. Чтобы при первом логине был запрос на смену пароля, делаем так:
adduser newuser
chage -d0 newuser
Сначала заводим пользователя, а потом ставим на него черную метку. Через ключ -d говорим через сколько дней запросить смену пароля. У меня это 0, то есть поменять при первом логине. В chage есть еще много гибких штук для накладывая ограничений. Ознакомься на досуге с его хелпом. Иногда бывает полезно нарулить запретов и насовать палок в ноздри. Теперь как сделать шаблон пароля. Шаблон это штука, которая запретит использовать пароли если они не соответствуют ожидаемому результату. Потребует от тебя ввести спецсимволы и прочие непотребности. Тут посложнее. Будем использовать модуль libpam-pwquality.
apt install libpam-pwquality
Открываем файл /etc/security/pwquality.conf и настраиваем под свои хотелки:
minlen  = 16
dcredit = -1
ucredit = -1
lcredit = -1
ocredit = -1
Длина пароля, маленькие и большие буковки, спецсимволы и т.п. Да, нужно включить этот модуль в файле /etc/pam.d/common-password
password requisite pam_pwquality.so retry=3
Теперь при смене паролей, будут ошибки:
The password contains less than 1 uppercase letters
The password contains less than 1 non-alphanumeric characters
The password is shorter than 16 characters
Пока пароль не будет соответствовать заданному шаблону. Ну а дальше настраиваешь fail2ban по мануалам из гугла или ютуба и радуешься. Но вообще не рекомендую подобной херней заниматься и делать сразу всё на ключах + по возможности настраивать iptables. ✔️ Стоит ли менять 22 порт на другой? А зачем? Если у тебя логин по ключам и fail2ban, да ради бога, пусть стучатся головой об стенку. Единственное забьюся логи, да похер, логи надо в сразу на лог сервер заворачивать. Как отключить логи я писал в этом посте.
А вообще всегда помни, если твою инфраструктуру захотят поиметь, а еще и денег за это кому-то заплатят, то ничего не поможет. Максимум можешь перевести свой сервер в оффлайн и то не факт что это как-то тебя защитит. Лично знаю много подобных случаев, да и ты всяко про такое слушал.
Ну и для прикола можешь Port knocking настроить, если уж совсем делать нехуй. Всем котиков и бородатых мужиков! 🥳😲 tags: #linux @ВАSНDАYS | BАSHDАYS.CОM

Увлекаетесь компьютерными науками и ищете, где можно интенсивно прокачаться в одном из актуальных IT-направлений? Тогда идеал
Увлекаетесь компьютерными науками и ищете, где можно интенсивно прокачаться в одном из актуальных IT-направлений? Тогда идеальный вариант — короткие образовательные программы, которые ведут эксперты-практики. Плюсы таких форматов — дают только полезную информацию, включают в реальные проекты, а ещё предлагают активный нетворкинг и обмен идеями. Такие интенсивы проводит Яндекс Образование: в июне у них стартует новый студенческий кемп по промышленной разработке ПО на базе питерского ИТМО. За две недели вы сможете погрузиться в тему разработки высоконагруженных систем и углубить знания в области DevOps или информационной безопасности. На программе ждут студентов профильных направлений. Чтобы подать заявку, заполните анкету участника до 1 мая. Всем, кто успешно пройдёт отбор, Яндекс Образование оплатит дорогу и проживание. Участие также будет бесплатным. Поторопитесь, количество мест ограничено.

Почему 99% девопсов жирные? Ну ясно понятно, из-за стресса, а не из-за того, что много жрут и ведут сидячий образ жизни. Далеко ходить не будем. Вчера мы с тобой тёрли за cruft, поэтому делюсь еще одной штукой, которую также применяю. ✔️ Утилита называется — debsums Она предназначена для проверки целостности файлов, которые установлены пакетным менеджером. Вроде хуйня, а НЕТ! Инструмент — мастхэв. Из названия уже понятно, что проверка целостности пакетов будет проходить на основе контрольных хэш сумм. Откуда берутся эталонные хэши? При установке пакетов и т.п. все эталонные, контрольные суммы попадают в «базу данных», которая находится тут: /var/lib/dpkg/info. В ней содержатся файлы с данными, которые и использует debsums для проверки. Например, nginx-common.md5sums
dba41b  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

25 апреля, 19:00 Selectel Admin Meetup. Дискутируем про terraform, эволюцию ОС и выбор специальности Админ/DevOps Ребята из @
25 апреля, 19:00 Selectel Admin Meetup. Дискутируем про terraform, эволюцию ОС и выбор специальности Админ/DevOps Ребята из @SelectelCareers проводят митап для системных администраторов и DevOps. На мероприятии обсудят: применение IAC для тестирования облачной платформы, расскажут про эволюцию установщиков ОС и устроят дискуссию о том, кем становиться в 2024 году — DevOps-инженером или системным администратором. Основные темы: ◽️ Альтернативы terraform и сравнение с ansible ◽️ Эволюция и автоматизация установщиков ОС ◽️ Выбор между DevOps и системным администрированием Подключайтесь онлайн или приходите в офис в Санкт-Петербурге: https://slc.tl/zj5v5 Реклама ООО «Селектел» erid 2VtzqwZ4Avk

Linux всем надоел? Привет. Сегодня поговорим про полезную утилиту, которой я лично пользуюсь для поиска всякого говна на Linux серверах. В контексте говна выступает всё то, что не должно быть на серваке. К примеру собранные их исходников древние артефакты и т.п. Короче софтина ищет все файлы, которые попали на сервак в обход пакетного менеджера. Ну и которые были установлены из левых источников, либо созданные самими пользователями. ✔️ Называется Сruft, ставится через апт, или чего там у тебя.
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

По данным исследования Red Hat, 94% ИT-специалистов сталкивались хотя бы с одним инцидентом безопасности, затронувшем Kuberne
По данным исследования Red Hat, 94% ИT-специалистов сталкивались хотя бы с одним инцидентом безопасности, затронувшем Kubernetes и его окружение. На вебинаре «Container Security: обеспечиваем безопасную среду разработки» практикующие эксперты Центра кибербезопасности УЦСБ и Orion soft расскажут про подходы к безопасности в Kubernetes, а также рассмотрят существующие средства защиты среды контейнеризации. Вы узнаете: 🔸Какие угрозы и риски ИБ существуют для контейнерных инфраструктур 🔸Что такое Container Security и почему об этом все говорят 🔸Какие концепции безопасности контейнерных сред используются в рамках подхода DevSecOps 🔸Что такое Nova Container Platform и какие инструменты находятся под капотом платформы 🔸Какие собственные возможности и интеграции со сторонними решениями для Container Security предлагает Nova Container Platform Дата проведения: 23 апреля | вторник | 12:00 (мск) Подробности и регистрация #УЦСБ #Orion_soft #Container_Security Реклама. ООО "УЦСБ", ИНН: 6672235068, erid: 2Vtzqw25yFm

Как говорится: «Дай человеку рыбу — он будет сыт целый день. Научи его пользоваться Linux и он будет сыт этим дерьмом всю оставшуюся жизнь» Привет друзья. Давай разберем очередную башболячку, с которой многие сталкиваются. Нет, это не условные хреновины eq/gt, но очень похожи. Есть Bash скрипт:
#!/bin/bash

case $1 in
    3)
        echo "Уровень 3"
        ;&
    2)
        echo "Уровень 2"
        ;&
    1)
        echo "Уровень 1"
        ;;
    a)
        echo "Уровень A"
        ;&
    b)
        echo "Уровень B"
        ;&
    c)
        echo "Уровень C"
        ;;
esac
Что непонятного в этом скрипте? Правильно, где-то используется конструкция «;&», где-то «;;» а еще может быть «;;&». ✔️ Ватафак? Поехали разбираться. Все эти конструкции влияют на логику работы оператора case. И, как обычно, этот синтаксис вводит в заблуждение, а порой даже разрывает жопы у бывалых инженеров. Но на самом деле все просто. Запускаем скрипт с параметрами:
./bashdays.sh 3
Получаем:
Уровень 3
Уровень 2
Уровень 1
Понял что произошло? Скрипт нашел тройку в параметре и отработал до символа «;;», выведя на экран все 3 кейса. То есть получается символ «;&» отработал как «ДАВАЙ ДАЛЬШЕ», а символ «;;» как BREAK. Аналогично если запустим так:
./bashdays.sh a
То получим второй кусок кейса, который выведет:
Уровень A
Уровень B
Уровень C
Просто? Просто! Погнали дальше. Если забить хуй в параметре например «двойку», то получим такое:
Уровень 2
Уровень 1
Уровень 3 уже пролетает как фанера над Парижем. С этими кейсами нужно быть особо аккуратным, так как это тонкий лед и нужно не запутаться в логике. Есть еще «;;&» но он почти идентичен «;&», про него чуть ниже.
У меня с этим вечная проблема, но я нашел годный лайкфак — сначала рисую логику на бумажке и потом по ней уже пишу скрипт. Работает кстати хорошо и для всяких ИФов.
Получается так: ;; - Обозначение конца блока для текущего случая case. Когда интерпретатор bash встречает «;;» он завершает выполнение текущего блока и переходит к следующему ветвлению (если оно есть). ;& - Обозначение «проваливания» (fallthrough) в case операторе. Когда интерпретатор bash встречает «;&», он продолжает выполнение следующего блока кода без остановки, даже если условие не соответствует. ;;& - аналогично «;&», за исключением того, что после выполнения кода текущего случая, интерпретатор также завершает текущий блок кода и продолжает выполнение следующего случая. ;) а это просто подмигивающий смайлик. Можно кстати еще аналог wildcard использовать в case:
case $1 in
    ba*)
        echo "все что начинается на ba"
    ;&
Так, чисто для развития, мож пригодится когда-нибудь. С пятницей, всем хороших предстоящих выходных, берегите себя! tags: #linux #bash @ВАSНDАYS | BАSHDАYS.CОM

Самара, ждём вас 25 апреля на технологический митап для IT Support специалистов 👨‍💻 Поговорим об инженерных процессах, улуч
Самара, ждём вас 25 апреля на технологический митап для IT Support специалистов 👨‍💻 Поговорим об инженерных процессах, улучшении качества IT-поддержки и процессах автоматизации работы с помощью программных решений. Рассмотрим лучшие практики и успешные кейсы адаптации новичков, которые помогают IT-специалистам получить необходимые знания и навыки для эффективной работы в компании и в команде. Спикеры и темы: ✔️ Антон Осипов, Senior-инженер по сопровождению — «Как НЕ сломать банк? IT-поддержка и автоматизация» ✔️ Ирина Баюсова, исполнительный директор, и Юрий Логинов, старший инженер по сопровождению — «Использование ML в системах мониторинга банка» ✔️ Алексей Рылов, эксперт Центра компетенции IT on-boarding — «Адаптация IT-специалистов: прошлое и настоящее on-boarding» Время: 18:30 – 21:40. Локация: Бенке Холл Центра труда и отдыха «Станкозавод» — г. Самара, ул. Куйбышева, 128/1. Регистрируйтесь по ссылке 👌