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
现已上线!2025 年 Telegram 研究 — 年度关键洞察 
