Bash Days | Linux | DevOps
Авторский блог от действующего девопса Самобытно про разработку, devops, linux, скрипты, сисадминство, техдирство и за айтишную жизу. Автор: Роман Шубин Реклама: @maxgrue MAX: https://max.ru/bashdays Курс: @tormozilla_bot Блог: https://bashdays.ru
Больше📈 Аналитический обзор Telegram-канала Bash Days | Linux | DevOps
Канал Bash Days | Linux | DevOps (@bashdays) языкового сегмента Русский является активным участником. Сейчас сообщество объединяет 23 794 подписчиков, занимая 5 701 место в категории Технологии и приложения и 28 128 место в регионе Россия.
📊 Показатели аудитории и динамика
С момента создания невідомо проект демонстрирует стремительный рост, собрав аудиторию из 23 794 подписчиков.
Согласно последним данным от 17 июня, 2026, канал показывает стабильную активность. За последние 30 дней изменение числа участников составило -202, а за последние 24 часа — -5, при этом общий охват остаётся высоким.
- Статус верификации: Не верифицирован
- Уровень вовлечённости (ER): Средний показатель вовлечённости аудитории составляет 21.91%. В первые 24 часа после публикации контент обычно набирает 12.48% реакций от общего числа подписчиков.
- Охват публикаций: В среднем каждый пост получает 5 213 просмотров. В течение первых суток публикация набирает 2 971 просмотров.
- Реакции и взаимодействия: Аудитория активно поддерживает контент: среднее количество реакций на один пост — 21.
- Тематические интересы: Контент сосредоточен на ключевых темах, таких как bashdays, linux, bash, docker, скрипт.
📝 Описание и контентная политика
Автор описывает ресурс как площадку для выражения субъективного мнения:
“Авторский блог от действующего девопса
Самобытно про разработку, devops, linux, скрипты, сисадминство, техдирство и за айтишную жизу.
Автор: Роман Шубин
Реклама: @maxgrue
MAX: https://max.ru/bashdays
Курс: @tormozilla_bot
Блог: https://bashdays.r...”
Благодаря высокой частоте обновлений (последние данные получены 18 июня, 2026) канал поддерживает актуальность и высокий уровень охвата публикаций. Аналитика показывает, что аудитория активно взаимодействует с контентом, что делает его важной точкой влияния в категории Технологии и приложения.
Бонус к «Kubernetes Мега» 🔥Видеокурс «Kubernetes База» в подарок 100 000 ₽ (вместо 150000 ₽) Промокод на скидку — в боте. Ограниченное кол-во местОБНОВИЛИ ВЕСЬ КУРС в сентябре 2024: ✅78 часов практики ✅7 встреч со спикерами Промокод и подробности курса — в боте 👈 Реклама ООО «Слёрм» ИНН 3652901451
awk недооцененным. Большинство примеров сводится к тому, чтобы убрать лишние колонки из отчета.
ㅤ
А между тем, AWK, практически полноценный язык программирования.
Сегодня я Вам это постараюсь показать. Будем решать задачу о расстановке 8 ферзей на шахматной доске, так, чтобы они не били друг-друга.
Решать будем методом перебора. Ну, не полного перебора, немного включим голову.
Напомню, ферзь бъет по вертикали, горизонтали, диагонали. Поэтому для начала расставим каждого ферзя на свою вертикаль и будем двигать, проверяя условия боя.
Таких будет два - горизонталь и диагональ. Для удобства клеточки буду нумеровать с 0.
Итого - получаем 10 вложенных циклов (8 двигают ферзей, 2 - проверка условий боя) ха, тут всего-то 8^8=16777216 вариантов.
#!/bin/bash
#8 ферзей
awk 'BEGIN{
for(c[0]=8;c[0]--;){
for(c[1]=8;c[1]--;){
for(c[2]=8;c[2]--;){
for(c[3]=8;c[3]--;){
for(c[4]=8;c[4]--;){
for(c[5]=8;c[5]--;){
for(c[6]=8;c[6]--;){
for(c[7]=8;c[7]--;){
b=1
for(i=0;i<7 && b;i++){
for(j=i+1;j<8;j++){
if(c[i]==c[j]){b=0;break}
a=c[i]-c[j];n=j-i
if(a==n || a==-n){b=0;break}}}
if(b){print c[0]c[1]c[2]c[3]c[4]c[5]c[6]c[7] }
}}}}}}}}
}'
Пояснения:
c[i]==c[j]) - проверка на горизонталь.
a=c[i]-c[j];n=j-i - проверка на диагональ.
Вообщето-то тут должен быть abs(c[i]-c[j]), но в awk нет модуля, поэтому if(a==n || a==-n)
Да, и в awk оператор break выходит из одного цикла, поэтому пришлось немного извращаться. (&& b), но задача решена.
Примечание я знаю про алгоритмы пермутаций, но тут лобовое решение.
Вариантов всего 92.
Приведу последний: 04752613 Время выполнения на моем дохлом ноуте ~1.5 минуты.
Продолжение следует...
tags: #bash © by Tagd Tagd
—
🔔 @bashdays➡️ @gitgatestrace и как применять инъекции. Если пропустил, то читай тут и тут.
Ниже скрипт который автоматически пронумерует системные вызовы для последующих инъекций.
#!/usr/bin/perl
use strict;
use warnings;
my %numbs;
select STDERR;
while(<STDIN>) {
if( /^[0-9]++\s++([a-z0-9_]++(?=\())/ ) {
my $t = ++$numbs{$1};
s/\s+/ \e[31m$t\e[m /;
die $! if( keys %numbs == 1000 );
}
print;
}
exit(0);
Сохраняем это безобразие в файл num_syscalls и делаем chmod +x, ну а дальше запускаем в связке с strace:
strace -o'|./num_syscalls' -yf sh -c 'ls|cat'
Теперь получаем такой выхлоп:
456107 48 close(3</usr/) = 0
456107 52 rt_sigreturn({mask=[]})
456107 63 openat(AT_FDCWD</usr/local/sbin>)
456107 53 newfstatat(3)
456107 64 openat(AT_FDCWD</usr/local/sbin>)
Смотрим второй столбик, включаем логику и видим, что системные вызовы нумеруются.
Например, возьмем системный вызов openat, видим 63, 64. Это значит что openat был вызван 64 раза. А newfstatat 53.
ㅤ
Теперь берем нужный номер системного вызова и применяем инъекцию. Как это сделать и для чего, опять же показывал на примерах (ссылки в начале этого поста).
Тема крутая, не нужно ебаться и считать руками.
Весь вывод strace отправляется в stderr, чтобы иметь возможность разделять вывод трассировки и вывод исследуемой программы.
А чтобы получить только трассировку, можно сделать так:
strace -o'|./num_syscalls' -yf ls > /dev/null
Если бесит подсветка, выпили из перловского скрипта управляющий символ «\e[31m\[em».
Такие дела, изучай!
tags: #linux #debug
—
🔔 @bashdays➡️ @gitgateapt update && apt upgrade && apt install mc.
Но несколько раз видел как люди первым делом отключали selinux и отправляли машину в ребут. А потом уже всё остальное.
А как делаешь ты? Камон в комменты обсудим, интересно на твои паттерны посмотреть.
tags: #linux #рабочиебудни
—
🔔 @bashdays➡️ @gitgate1. Подсказки на картинке к посту 2. Точка входа https://pizza.bashdays.ru 3. Макс запросит у победителя шаги с решениемУдачи в поисках! PS: 🔥 Пицца разыграна, квест больше не актуален! Самый находчивый — Александр! Красавчик! #pizza
ps: по секрету, сегодня залетит очередная пицца, не проеби!tags: #utilites #security #рабочиебудни — 🔔 @bashdays➡️ @gitgate
asdfbgroot, но попытки перебора фиксировать, когда совпадает первая часть.
Кстати, из этого можно было бы извлечь и пользу. Если первые части для разных групп пользователей разные - сразу становится видна группа, из которой идет утечка. Может это и бред, а может кому-то пригодится.
tags: #linux #security © by Tagd Tagd
—
🔔 @bashdays➡️ @gitgatehttp:// https:// ftp://.
Тут на @gitgate недавно проскакивала тема про Консольные онлайн Telnet/SSH игры.
Посмотрим на это глазами параноика: Что происходит, когда вы подключаетесь к ссылке вида ssh user@addr.dom. Ну, ничего страшного.
Просто в логах сервера отобразится ваш IP. Ситуация усугубляется, когда вы заходите на ссылку вида ssh addr.dom.
В этом случае в логах отобразится не только адрес, но и логин текущего пользователя.
Прикиньте, есть ip и уже есть логин. Осталось подобрать пароль. Я бы на месте малышей-плохишей специально рыскал бы по github в поисках всякой прикольной фигни и собирал пары ip/login.
Да и логин, не какой-то там test, а реально используемый - сам по себе ценный ресурс.
Поэтому не ходите по ссылкам с рабочих машин, а если видите ссылку ssh addr.dom не поленитесь и добавьте пользователя test@addr.dom, чтобы не светить свой реальный логин.
Прошу прощениt за тему, которая и так всех задолбала.
tags: #linux #security © by Tagd Tagd
—
🔔 @bashdays➡️ @gitgateВсе ошибки невыдуманные, с подробным разбором анализа, что происходило и как нашли первопричину.Советы, как превратить ваш кластер из катастрофы в более-менее стабильную штуку, которая может прожить без падений хотя бы 2 дня, тоже будут😉 ⚡Спикеры: - Виталий Лихачев. SRE в bооking.соm - Всеволод Севостьянов. Staff engineer в Lokalise ➡ Когда вебинар: 23 октября в 19:00 мск ➡ Регистрация — через бот Реклама ООО «Слёрм» ИНН 3652901451
Напоминаю: БЕЗДУМНАЯ ПРАВКА СИСТЕМНЫХ ФАЙЛОВ МОЖЕТ ПРИВЕСТИ НЕРАБОТОСПОСОБНОСТИ СЕРВЕРА.Все знают, что для блокировки пользователя нужно использовать команду:
sudo usermod -L username
Эта команда добавляет знак «!» перед полем пароля, что делает его недопустимым, тем самым блокируя.
Все это дело происходит в файле /etc/shadow, где хранятся зашифрованные пароли пользователей.
Читаем man shadow:
Если поле пароля содержит строку, которая не удовлетворяет требованиям crypt(3), например содержит «!» или, то пользователь не сможет использовать этот пароль unix для входа (но может войти в систему под другими паролями).Ахренеть. Я тут пользователя блокернул, а он войти может. Проверяем. Точно, по ssh, через ключ, входит и выходит. Замечательно выходит! Лирическое отступление: В мане
shadow также написано, что пароль вообще может быть пустым, но некоторые программы могут запретить его использование.
Понимаете для чего нужна опция PermitEmptyPasswords в файле /etc/ssh/sshd_config?
Напоминаю, что если установить пользователю оболочку /usr/sbin/nologin, то иногда этот пользователь может получить доступ к файлам через sftp (при установленной подсистеме internal-sftp).
➡️ Что делать для полной блокировки пользователя?
Воспользоваться "оболочкой /usr/bin/false" Она просто возвращает код ошибки.
Резюмирую:
При блокировке пароля возможен доступ по ключу.
/usr/sbin/nologin иногда дает доступ к файлам
/usr/bin/false не дает, стерва.
man usermod shadow sshd_configtags: #linux #security © by Tagd Tagd — 🔔 @bashdays➡️ @gitgate
Напоминаю: БЕЗДУМНАЯ ПРАВКА СИСТЕМНЫХ ФАЙЛОВ МОЖЕТ ПРИВЕСТИ НЕРАБОТОСПОСОБНОСТИ СЕРВЕРА.Итак: если пользователю прописать оболочкой
/usr/sbin/nologin
sudo usermod -s /usr/sbin/nologin user
Это вовсе не означает, что пользователь не может получить доступ к системе.
Да, он не может залогиниться с клавиатуры и зайти по ssh. Но он вполне МОЖЕТ ПОЛУЧИТЬ ДОСТУП К ФАЙЛАМ по sftp при условии, что в файле /etc/ssh/sshd_config есть строка Subsystem sftp internal-sftp, не знаю как сейчас, а раньше эта подсистема была установлена по-умолчанию.
Логика разработчиков вполне понятна. Работал человек, работал, доступ ему закрыли, но результат работы забрать может. Это, похоже на то, как жена выставляет чемодан у двери гулящему мужу.
Заткнуть эту дырку очень просто. В файле /etc/ssh/sshd_config заменим подсистему sftp:
#Subsystem sftp internal-sftp
Subsystem sftp /usr/lib/openssh/sftp-server
Теперь проверка правильности конфигурации и перезапуск службы в случае успеха.
sudo sshd -t && sudo systemctl restart sshd
В этом случае при попытке входа по sftp получим сообщение:
ㅤ
Received message too long 1416128883 Ensure the remote shell produces no output for non-interactive sessions.
Резюмирую: При оболочке nologin можно получить доступ к файлам если sftp internal-sftp.
Сможешь спать спокойно, не заглянув в /etc/ssh/sshd_config ? :-)
tags: #linux #security © by Tagd Tagd
—
🔔 @bashdays➡️ @gitgate /etc/networks
auto ens3
iface ens3 inet static
address 62.60.238.33
netmask 255.255.255.255
gateway 10.0.0.1
dns-nameservers 1.1.1.1 8.8.8.8
auto ens3:0
iface ens3:0 inet static
address 62.60.238.133
netmask 255.255.255.255
dns-nameservers 1.1.1.1 8.8.8.8
Всё логично и красиво. Айпишники прописаны статично, никакого dhcp и плавающих адресов с выходом на роутере.
Если я сделаю так:
curl ifconfig.me
То в выхлопе получу первый IP адрес (62.60.238.33).
Про сервисы вроде ifconfig писал в этом посте.Но как мне выходить в интернет с конкретного IP адреса? Можно курлыкнуть так:
curl --interface 62.60.238.133 ifconfig.me
curl --interface ens3:0 ifconfig.me
Пошли дальше. Давай настроим маршрутизацию, чтобы 50% трафика выходило через первый айпишник, а 50% через второй.
Открываем /etc/networks и комментим блок со вторым IP адресом:
auto lo
iface lo inet loopback
auto ens3
iface ens3 inet static
address 62.60.238.33
netmask 255.255.255.255
gateway 10.0.0.1
dns-nameservers 1.1.1.1 8.8.8.8
# auto ens3:0
# iface ens3:0 inet static
# address 62.60.238.133
# netmask 255.255.255.255
# dns-nameservers 1.1.1.1 8.8.8.8
Далее хуячим в терминале:
ip addr add 62.60.238.133/32 dev ens3
iptables -t nat -A POSTROUTING -o ens3 -m statistic --mode random --probability 0.5 -j SNAT --to-source 62.60.238.33
iptables -t nat -A POSTROUTING -o ens3 -m statistic --mode random --probability 0.5 -j SNAT --to-source 62.60.238.133
ip route flush cache
Добавляем второй айпишник на тот-же интерфейс где уже присвоен айпишник. А правила iptables изменяют исходный IP на с вероятностью 50%, когда пакеты проходят через интерфейс ens3.Проверяем:
for i in {1..5}; do curl https://ifconfig.me; echo ""; sleep 5; done
62.60.238.33
62.60.238.133
62.60.238.133
62.60.238.33
62.60.238.33
ЗАЕБИСЬ! Теперь наш сервер выходит в интернеты с разных IP адресов.
Что с этим делать дальше? Хуй знает, я показал тебе концепт работы с двумя айпишниками, а ты уже дальше прикидывай где и как это можешь использовать.
В идеале запустить какойнить wireguard и ходить по сайтикам светя то одним адресом, то другим. Короче не знаю, накидывай в комменты, где это можно применить.
Всем спасибо и увидимся!
tags: #networks
—
🔔 @bashdays➡️ @gitgate
Уже доступно! Исследование Telegram 2025 — ключевые инсайты года 
