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 632 подписчиков, занимая 5 594 место в категории Технологии и приложения и 27 639 место в регионе Россия.
📊 Показатели аудитории и динамика
С момента создания невідомо проект демонстрирует стремительный рост, собрав аудиторию из 23 632 подписчиков.
Согласно последним данным от 04 ноября, 2026, канал показывает стабильную активность. За последние 30 дней изменение числа участников составило -15, а за последние 24 часа — 3, при этом общий охват остаётся высоким.
- Статус верификации: Не верифицирован
- Уровень вовлечённости (ER): Средний показатель вовлечённости аудитории составляет 22.89%. В первые 24 часа после публикации контент обычно набирает 10.70% реакций от общего числа подписчиков.
- Охват публикаций: В среднем каждый пост получает 5 409 просмотров. В течение первых суток публикация набирает 2 529 просмотров.
- Реакции и взаимодействия: Аудитория активно поддерживает контент: среднее количество реакций на один пост — 15.
- Тематические интересы: Контент сосредоточен на ключевых темах, таких как bashdays, linux, bash, docker, скрипт.
📝 Описание и контентная политика
Автор описывает ресурс как площадку для выражения субъективного мнения:
“Авторский блог от действующего девопса
Самобытно про разработку, devops, linux, скрипты, сисадминство, техдирство и за айтишную жизу.
Автор: Роман Шубин
Реклама: @maxgrue
MAX: https://max.ru/bashdays
Курс: @tormozilla_bot
Блог: https://bashdays.r...”
Благодаря высокой частоте обновлений (последние данные получены 05 ноября, 2026) канал поддерживает актуальность и высокий уровень охвата публикаций. Аналитика показывает, что аудитория активно взаимодействует с контентом, что делает его важной точкой влияния в категории Технологии и приложения.
#!/bin/bash
#8 ферзей
awk 'BEGIN{
i=8^8
while(i--){
c=sprintf("%08o",i)
j=8
while(index(c,--j)){}
if(j<0){
j=8
while(j--){q[j]=substr(c,j+1,1)}
b=1
for(m=0;m<7 && b;m++){
for(j=m+1;j<8;j++){
a=q[m]-q[j];sub(/-/,"",a)
if(a==(j-m)){b=0;break}}}
if(b){print c}
}}}'
#---
while(index(c,--j)){} - чисел всего 8(0-7), если index=0 (нет цифры j в числе с из 8 цифр, значит каких-то цифр 2).
Обратите внимание тело цикла пустое! Если цикл прошел полностью - дублей нет. Вау.
Алгоритм пермутаций без повторений методом перебора. (проверка на горизонталь).
while(j--){q[j]=substr(c,j+1,1)} - преобразовали число c в массив цифр q[]
Дальше аналогично предыдущей программе, кроме sub(/-/,"",a) - еще один аналог модуля.
Просто отбрасываем "-". Как конструкция по скорости не знаю, не проверял.
Программа отработала примерно за 41с.
Какой-то код маленький получился, и работает быстрее. Но, главное результаты совпадают.
Кто там хотел изучать bash?
Слабо реализовать на чистом bash?
Интересно было бы и время выполнения сравнить.
tags: #bash © by Tagd Tagd
—
🔔 @bashdays➡️ @gitgateБонус к «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