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 814 подписчиков, занимая 5 718 место в категории Технологии и приложения и 28 110 место в регионе Россия.
📊 Показатели аудитории и динамика
С момента создания невідомо проект демонстрирует стремительный рост, собрав аудиторию из 23 814 подписчиков.
Согласно последним данным от 14 июня, 2026, канал показывает стабильную активность. За последние 30 дней изменение числа участников составило -182, а за последние 24 часа — 1, при этом общий охват остаётся высоким.
- Статус верификации: Не верифицирован
- Уровень вовлечённости (ER): Средний показатель вовлечённости аудитории составляет 23.05%. В первые 24 часа после публикации контент обычно набирает 11.52% реакций от общего числа подписчиков.
- Охват публикаций: В среднем каждый пост получает 5 492 просмотров. В течение первых суток публикация набирает 2 744 просмотров.
- Реакции и взаимодействия: Аудитория активно поддерживает контент: среднее количество реакций на один пост — 25.
- Тематические интересы: Контент сосредоточен на ключевых темах, таких как bashdays, linux, bash, docker, скрипт.
📝 Описание и контентная политика
Автор описывает ресурс как площадку для выражения субъективного мнения:
“Авторский блог от действующего девопса
Самобытно про разработку, devops, linux, скрипты, сисадминство, техдирство и за айтишную жизу.
Автор: Роман Шубин
Реклама: @maxgrue
MAX: https://max.ru/bashdays
Курс: @tormozilla_bot
Блог: https://bashdays.r...”
Благодаря высокой частоте обновлений (последние данные получены 15 июня, 2026) канал поддерживает актуальность и высокий уровень охвата публикаций. Аналитика показывает, что аудитория активно взаимодействует с контентом, что делает его важной точкой влияния в категории Технологии и приложения.
TL;DR Всё оказалось просто и я справился.Перенос доменов это не про «попробовать ради опыта», а про оптимизацию. Когда все домены в одном месте, проще контролировать сроки, бюджеты и доступы. Становится меньше хаоса, меньше рисков, быстрее продление. И всё это без перебоев в работе проектов во время миграции. Это я к чему. Ты можешь перенести все свои домены в Selectel и продлевать их за один рубль. Миграция проходит прозрачно, бесшовно и без даунтаймов при переносе. Отличный способ сократить бюджет и остаться в плюсе. Помимо переноса, ты получаешь бесплатный DNS хостинг, SSL сертификаты с автоматическим обновлением и более 50ти инфраструктурных продуктов. Всё собрано в одном месте, в одной коробке — готовая экосистема для развития твоих IT проектов. Перенеси и продли → https://slc.tl/2kkec Реклама. ООО «АО Селектел», erid: 2W5zFJuL4tq
Первая статья: https://t.me/bashdays/1356 Вторая статья: https://t.me/bashdays/1360Началось с того, что я тупанул. Я знал, что pfSense и opnSense основаны на BSD, и знал, что обычно там отсутствует bash. ㅤ И почему-то подумал, что придется писать скрипт на csh (tsch). Я не знаю csh, но принципиальных отличий нет. Ну, скрипт и скрипт. Небольшие отличия в синтаксисе.
if и while присутствуют, значит проблем нет. Это действительно так. Самой большой проблемой стал перенос длинных строк даже в константах:
#!/bin/bash
echo '1
2
3'
#!/bin/csh
echo '1 \
2 \
3'
Это делает однострочники (в моем случае awk) крайне уродливыми. Когда скрипт уже работал, я решил проверить, какие там есть оболочки cat /etc/shells , и с изумлением обнаружил /bin/sh.
Ладно, потратил лишних пару дней, но приобрел опыт. Винить некого. Но плюс в том, что если знаешь bash - в случае крайней необходимости можешь написать скрипт и для другой оболочки.
Были небольшие затыки с программами. Вроде date, как date, но ключики немного не совпадают. Я думал там gawk, но нет, awk. (не нашел разделы BEGINFILE{...} ENDFILE{...}). Но, при большом желании можно обойтись и без них.
Что порадовало, так это наличие man в opnSense. В pfSense его не было. И это очень круто.
Очень жаль, что не нашел ramdisk /dev/shm (в Linux он обычно есть и под него выделено половину оперативки).
Ну, и еще одной проблемой стал редактор vi, который оказался единственным в системе!!!
ed, red, sed не в счет, хотя, если припрет... В pfSense был еще nano.
Я в последнее время использую vim (который начал изучать после рекомендаций Дмитрия Малинина здесь, на BashDays. За что ему спасибо.) Кто еще не начал - ставьте vim, и запускайте vimtutor. Этого будет достаточно, чтобы как-то работать в vi и vim.
Вывод из всего этого - nix это круто. И не важно - Linux или BSD. Они очень похожи, по крайней мере, если знаешь что-то одно - разобраться не проблема. Принципы одинаковые.
Холиваров прошу не устраивать. Просто решил поделиться опытом. Если где-то ошибся - поправьте.
🛠 #networks #linux #bash
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 BlogОчень удобно, если ты умер и хочешь чтобы твой отпрыск получил по наследству пароли от золотой коллекции прона, который ты собирал 30 лет. Но ларчик должен открыться строго в 18 лет.Для реализации желаемого, воспользуемся утилитой под названием
tlock.
TLock — это шифрование с отложенным доступом, которое опирается на доверенную аппаратную среду (TEE, чаще всего Intel SGX). Идея всего этого безумия до безобразия простая и красивая:
— данные шифруются сейчас
— ключ не существует в открытом виде
— расшифровка после определённого времени
— даже владелец не может ускорить процесс
ㅤ
Есть TEE (Trusted Execution Environment), это что-то вроде маленького «бункера» внутри процессора, куда нельзя залезть, отдебажить, подменить время. Дада, Artmoney тут тебе не поможет. Внутри TEE генерируется секрет, считается время, вычисляется ключ.
Ключ == f(секрет, время)Пока время не наступило, ключ не вычисляется, не извлекается, не брутфорсится. Даже если ты владелец и у тебя есть дампы памяти, у тебя нихуя не получится ничего дешифровать. Короче это нифига не cron + sleep, timestamp и т.п. Это прям технолоджи! Устанавливаем: 1. Качаем бинарник для своей ОС: https://github.com/drand/tlock/releases/ 2. Кидаем куда удобно, я закинул в
/usr/local/sbin
Создаем условный файл:
cd /tmp
echo "hello bashdays" >> bashdays.txt
Шифруем:
tle -e -D 10d -o bashdays.tlock bashdays.txt
Этот файл можно будет расшифровать только через 10 дней. Если сейчас посмотреть файл bashdays.tlock то увидим кучу мусора:
age-encryption.org/v1
-> tlock 26260588 52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971
jhUpzCk/LXUTkwghwKbyGH1gZ2BEy3p47X4yf+8qrv7+BIhJvEUK6QsVZNnZupxK
CsP1d2kGQAsy6GfEc544aZURB3zK3999bQbXzuhA0u4JV0J27ZqnjKBdtx2az603
tF54aRojO3OmwC2JNTkO/ObQID2xJTTidpgP8K1AEac
--- pN0y6uBfL8KOcoXKp1U6T0gbrWrgDoCmwJxBZ7LHspw
#�4x�&V����S�&e`�S�`���
z��? �A��%
Попробуем расшифровать:
tle -d -o bashdays.txt bashdays.tlock
И получаем: too early to decrypt: expected round 26260588 > 25972610 current round. Файл можно будет расшифровать только через 10 мать его дней. И пофигу root ты или супер ксакеп, нихуя у тебя не получится проникнуть в эту капсулу времени.
Пример в псевдокоде:
# encryption
ciphertext = TLock.encrypt(
data=plaintext,
unlock_time=TIMESTAMP
)
# decryption
if now() >= TIMESTAMP:
plaintext = TLock.decrypt(ciphertext)
else:
raise Nope("слишком рано")
- key нигде не лежит
- key нельзя украсть
- key нельзя вычислить заранее
Ключей и опций у этой штуковины дофига и больше, поэтому если интересно можешь сам их поизучать. Я принес тебе интересный инструмент, а дальше ты уж сам найди ему применение.
Век живи, век учись. Кстати эта технология применяется в крипте, насколько знаю в Ethereum.
🛠 #security #privacy
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 BlogПервая часть тут: https://t.me/bashdays/1356У меня три подсети
192.168.0.0 = DMZ 192.168.1.0 = LAN, 192.168.1.2 = WIFI. Что творится в сети WIFI, меня не очень интересует, поскольку доступа из неё нет не только к LAN, но и к DMZ. Поэтому наблюдать будем две последние.
ㅤ
И да, у меня там статика. Есть конечно и DHCP, но буквально на пару адресов, на всякий случай.
Скрипт пришлось разбить на две части, потому что у csh не очень красивые переносы очень длинных строк.
#!/bin/csh
#checkarp.sh
set dt=`date "+%s"`
set bot_id=0000000000:AAAAAAAAA1_aaaaaaaaaaaaaaaaaaaaaaa1
set chat_id=1111111111
set text="GATE: Есть изменения arp $dt"
arp -an| \
awk -v dt=$dt -f "$0.awk" /dev/stdin "$0.spr" >>"$0.spr"
if ( $status != 0 ) then
curl -s -X POST https://api.telegram.org/bot$bot_id/sendMessage \
-F chat_id="$chat_id" -F text="$text" >/dev/null
endif
Этот скрипт сравнивает значения текущих IP и mac, со значениями, сохраненными в файле checkarp.sh.spr.
Если появилась новая связка — отправляется сообщение в телеграм о ВРЕМЕНИ появления(контроля) новых данных в формате UNIXTIME, и новая связка IP-MAC сразу дописываются в справочник spr.
Сами данные в телегу не отправляются — чтобы узнать, что появилось, придется залезть на машину и посмотреть grep/tail. Сделано это специально, чтобы лишний раз не светить инфраструктуру.
Ставим его на cron */15, потому что время жизни arp 20 минут (видно из вывода arp). Работает под обычным пользователем.
#checkarp.sh.awk
/[0-9a-f]{2}(:[0-9a-f]{2}){5}/{
if(NF==3){spr[$2 " " $3]}
else{ if( NF>3 && $0~/192\.168\.[01]\./){gsub(/[()]/, "", $0); arp[$2 " " $4]}}
}
END{
ret=0
for(i in arp){
seek=0
for(j in spr){
if(i==j){
seek=1; break
}
}
if(seek==0){ret=1; print dt, i}
}
exit ret
}
Основная часть на awk.
1. Анализируем только строки, в которых есть mac.
2. Файлы справочника и вывод arp разделяем по числу полей (в справочнике их три: unixtime ip mac).
3. Из вывода arp убираем все, что не относится к подсетям DMZ и LAN.
4. Тупо сравниваем связки каждый с каждым. (осторожно на больших подсетях, поскольку N^2).
5. Если что-то нашлось - errorlevel=1.
Все можно было бы сделать быстрее и проще, но очень хотелось:
6. Отказаться от временных файлов.(в opnSense нет /dev/shm).
7. Данные дописываются в тот же справочник, из которого читаются. Это можно сделать, потому что на момент анализа (блок END) данные из справочника уже считаны и файл закрыт.
Вопросы и предложения приветствуются.
man arp awk(gawk)В следующей статье попробую описать впечатления и с какими проблемами пришлось столкнуться. 🛠 #networks #linux — 💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
ssh-keygen -t ed25519-sk -O resident -C "shuba@bashdays"
Оно запросит у тебя PIN который мы впендюрили в самом начале. Жмем несколько раз Enter и радуемся жизни. Новый приватный ключ создан, записан на Yubikey, публичная же часть ключа упала в ~/.ssh/id_ed25519_sk.pub.
ㅤ
Да, рядом будем лежать файл id_ed25519_sk, но это ничего не меняет, это не приватный ключ, приватный ключ НЕ хранится на диске, он сразу записывается в Yubikey. А то что ты видишь у себя на диске, это дескриптор (handle). Этот файл содержит идентификатор Yubikey ключа, параметры и ссылку на resident key. Приватный ключ физически находится внутри YubiKey и не может быть извлечён.А дальше по классике. Закидываем публичную часть ключа на нужный сервер и пробуем подключиться:
ssh root@bashdays.ru
Confirm user presence for key ED25519-SK
Опа, прикасаемся своим обрубком к Yubikey и успешно подключаемся к серверу. Также можно сгенерить ключ, который не требует прикосновений, либо вообще сгенерить одноразовые пины, но это уже оверхед безопасность.
Про SSH ключи я подробно расписывал в серии постов по тегу #linuxfactory нажми на тег, получишь список всех этих постов. Настоятельно рекомендую ознакомиться, такому в школах не учат. По крайней мере не рассказывают нюансы.Фиксим баги: После того как ты достанешь ключ из USB и затем воткнешь обратно. Всё к хуям сломается. Вот такая особенность винды и WSL2. Поэтому делаем финт ушами. Пишем powershell скрипт, который будет это фиксить. Создаем файл
YubiKeyAttachToWSL.ps1
$yubiKeyBusId = (usbipd list | Select-String "1050:0407" |
ForEach-Object { $_.Line.Split()[0] })
if ($yubiKeyBusId) {
usbipd attach --wsl --busid $yubiKeyBusId
Write-Host "YubiKey attached…"
} else {
Write-Host "YubiKey not found."
}
Не забываем изменить ID вендора и продукта. Закидываем скрипт в виндовый планировщик с параметрами:
Триггер:
- At log on (при входе в систему)
- On Event (событие USB)
- Log: System, Source: WudfUsbccidDrv, Event ID: 104
Действие:
- Запуск powershell.exe с аргументами -ExecutionPolicy Bypass -File "C:\YubiKeyAttachToWSL.ps1"
Теперь этот скрипт будет запускать при входе в систему ну и если ты будешь тыркать Yubikey туда-сюда в USB портах. Автоматизация ёпта!
Всё! Поставленная задача успешно решена. Что важно, тут не только потыкали Yubikey + SSH, но и научились прокидывать USB устройства в WSL2.
Всё остальное поищешь сам, информации полно. Я показал тебе лишь неочевидные штуки, которые могут загнать в тупик и свести с ума.
Изучай!
🛠 #security #privacy
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 BlogTL:DR Настраиваем подключение по ssh к серверам с yubikey, без паролей, физических приватных ключей и смс. Заодно покажу как с помощью хака прокидывать физические USB устройства в WSL машину, авось захочется тебе что-то другое прокинуть и поковырять.Ставим YubiKey Manager, оно есть под все ОС, я буду ставить на винду и прокидывать ключ в WSL2. Под линукс это все работает из коробки, а вот с виндой + wsl 2— есть проблемы. ㅤ Вставляем Yubikey в USB, открываем Manager и проверяем, если всё ок, то ключ появляется. Дополнительно можно проверить в консоли командой:
ykman info в ответ получен:
Device type: YubiKey 5 NFC
Serial number: 12345678
Firmware version: 5.7.4
Form factor: Keychain (USB-A)
Enabled USB interfaces: OTP, FIDO, CCID
NFC transport is enabled.
Предварительно в ключ нужно зашить PIN, делается это через тот же Yubikey Manager в разделе Application → FIDO2 → FIDO2 PIN. Забиваем PIN.
PIN можно установить из консоли винды, командой: ykman fido access change-pin. Но если есть морда, то быстрее и приятнее сделать это через морду.Едем дальше. Прокинуть физический USB в WSL2 не так просто, но есть решение. Называется оно usbipd-win и позволяет прокинуть любую USB железяку внутрь пресловутого WSL2. Скачиваем установщик в разделе Releases и устанавливаем. Рутина. Дальше еще интереснее. Открываем консоль PowerShell и запускаем:
usbipd list
И видим кучу устройств. Среди всего нужно найти Yubikey, у меня это:
3-2 1050:0407 USB-устройство ввода, Устройство чтения смарт-карт Micros...
Как я это понял? Да банально выткнул ключ из USB, прогнал команду, воткнул и снова прогнал, сравнил что появилось. А появилось именно это устройство, нам нужен его ID, у меня это 1050:0407.
usbipd bind --busid 3-2
usbipd attach --wsl --busid 3-2
Если вылезет ошибка, в большинстве случаев это виндовый фаервол. У меня установлена морда TinyWall, я его на время отключаю. Позже уже добавлю нужные правила.
Нахуя мне фаервол? Хочу держать под контролем софт, который у меня установлен, ну не нравится мне когда что-то утекает без моего ведома, тем более после «гугл приключений».Так, теперь идем в WSL машину и выполняем
sudo lsusb, если всё ок то увидим:
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 1050:0407 Yubico.com Yubikey 4/5
Кайф! Что-то прокинулось. Но что? Терпение!
У меня в WSL живет ubuntu 24, доставляем необходимые пакеты:
sudo apt install -y yubikey-manager fido2-tools
Проверяем:
sudo ykman info Device type: YubiKey 5 NFC Serial number: 12345678 Firmware version: 5.7.4 Form factor: Keychain (USB-A) Enabled USB interfaces: OTP, FIDO, CCID NFC transport is enabled. sudo fido2-token -L /dev/hidraw1: vendor=0x1050, product=0x0407 (Yubico YubiKey)Да сучка! Поздравляю, мы успешно прокинули USB железяку в WSL2. Нюансы! Кудаж без них. Сейчас ключ виден только руту, а нам надо обычному юзеру. Хакаем систему! В WSL машине создаем файл
/etc/udev/rules.d/99-yubikey.rules:
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="1050", ATTRS{idProduct}=="0407", MODE="0660", GROUP="plugdev", TAG+="uaccess"
Не забываем вставить ID вендора и продукта, мы их выше уже получили и знаем.
Применяем:
sudo usermod -aG plugdev $USER
sudo udevadm control --reload-rules
sudo udevadm trigger
Всё, для чистоты эксперимента можешь открыть новую консоль и убедиться что рядовой юзер теперь в деле.
Теперь можем генерить ключ и подключаться к серверам.
Продолжение будет завтра, всё в один пост не влезло. Завтра рассмотрим генерацию SSH ключей и как пофиксить баги при фрикциях с USB.
🛠 #security #privacy
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 BlogХотя сейчас большинство давно уже переехали в ИИ и задают поисковые вопросы именно там, но все же иногда рука тянется поискать самостоятельно. Сливать в ИИ теже запросы, тоже такое себе, хотя всем плевать.Композ файл выглядит так:
services:
searxng:
image: searxng/searxng:latest
container_name: searxng
restart: unless-stopped
networks:
- searxng_net
ports:
- "8080:8080"
volumes:
- ./searxng:/etc/searxng
environment:
- SEARXNG_SECRET_KEY=1234567890
read_only: true
tmpfs:
- /tmp
- /etc/ssl/certs
cap_drop:
- ALL
cap_add:
- CHOWN
- SETGID
- SETUID
security_opt:
- no-new-privileges:true
networks:
searxng_net:
driver: bridge
Конфиг ./searchxng/settings.yml:
use_default_settings: true
server:
bind_address: 0.0.0.0
port: 8080
limiter: false
secret_key: "1234567890"
public_instance: false
outgoing:
request_timeout: 3.0
proxies:
http: socks5h://user:password@127.0.0.1:9050
https: socks5h://user:password@127.0.0.1:9050
engines:
- name: ahmia
disabled: true
- name: torch
disabled: true
- name: duckduckgo
disabled: true
- name: startpage
disabled: true
Обращаем внимание на SEARXNG_SECRET_KEY и secret_key они должны быть одинаковыми. Остальное интуитивно понятно. Да, еще если не нужна прокся, можешь закомментировать блок proxies, но рекомендую оставить, воткнуть луковицу либо приобрести быстрые socks5, либо поднять свои.
Запускаем по классике. Заходим в браузере <IP>:8080 и наслаждаемся. Через морду можно покрутить настройки, которых там жопой ешь. Следом прикручивается домен, SSL, basic auth. И по итогу имеешь свой независимый поисковик, без телеметрии и слежки.
Для рядового пользователя это скорее игрушка, но у кого повышенная тревожность вполне зайдёт, тем более с поставленными задачами SearXNG отлично справляется.
Из минусов, не все поисковики лояльны, кто-то может запрашивать капчу, но на это есть официальное решение. Я его не пробовал, мне пока достаточно тех что у меня подключены сейчас.
И да если думаешь что DuckDuckGo панацея — неа, это компания в мудацкой стране под названием США, которая по первому запросу, сольет про тебя всё что на тебя есть, без зазрения совести. Потому что любая компания в США (CLOUD Act) по запросу суда, должна предоставить такие данные.
Если вы ищете что-то через DuckDuckGo, у компании нет вашего IP + истории запросов, чтобы связать эти запросы с вашей личностью. И поэтому даже если есть официальный запрос от ФБР, DuckDuckGo не сможет передать то, чего не хранит.Не ведись на такое, это ПИЗДЁШЬ! Всё у них есть, не так много как у гугла, но есть, чтобы тебе смогли подвести писю к носу. Век живи, век учись! 🛠 #security #privacy — 💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Не путать с mkcert, это совсем другое.Единственный момент, такой серт будет валиден несколько дней (160 часов), поэтому придется почаще его выпускать, сейчас ставят 5 дней для обновления, как золотую середину. НЕ рекомендуется ставить 6, иначе можешь словить граблю. Вообще acme сам всё в кроне должен прописать, но это не точно. Пока это может делать только acme, все остальные (certbot, angie) совсем скоро к этому придут. Да, для домаших айпишников увы, такая чача не проканает, при попытке получить такой серт, получаем ошибку:
Cannot issue for \"192.168.10.91\": IP address is in a reserved address block: [RFC1918]: Private-Use"
Ну оно и логично, спецификации никто не отменял.
Я буду генерить для 178.72.129.181 на котором у меня установлен nginx. Виртуалка прерываемая, так что денег практически не жрет, для тестов в настоящем облаке — милое дело.
Приступим:
Не забудь подставить своё мыло, а то меня спамом завалит и я буду материться на кота.
curl https://get.acme.sh | sh -s email=shubkin@bashdayz.ru
Конфигурируем default в nginx:
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
location ~ ^/.well-known/(acme-challenge|pki-validation)/ {
add_header Content-Type text/plain;
root /var/www/letsencrypt;
}
location / {
return 301 https://$host$request_uri;
}
}
Создаем структуру папок и релоадим:
mkdir -p /var/www/letsencrypt
mkdir -p /etc/nginx/ssl
nginx -t
nginx -s reload
Выписываем acme.sh --issue --server letsencrypt -d 178.72.129.181 -w /var/www/letsencrypt --certificate-profile shortlived --days 3
Отлично, сертификат получили, устанавливаем:
acme.sh --install-cert -d 178.72.129.181 --key-file /etc/nginx/ssl/ip.key --fullchain-file /etc/nginx/ssl/ip.crt --ca-file /etc/nginx/ssl/ip.ca.crt --reloadcmd "systemctl restart nginx"
Добавляем дополнительный блок в default в nginx:
server {
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
server_name _;
return 403;
ssl_certificate /etc/nginx/ssl/ip.crt;
ssl_certificate_key /etc/nginx/ssl/ip.key;
}
Перезапускаем:
nginx -t
nginx -s reload
И радуемся, теперь у тебя есть валидный SSL на голом айпишнике:
Общее имя (ЦС) YE1
Организация Let's Encrypt
Дата выдачи: 29 января 2026 г.
Срок действия: 5 февраля 2026 г.
Дело в шляпе, что сказать? Пиздато! Порой ОЧЕНЬ не хочется привязывать домен, чтобы обзавестись SSL сертификатом, теперь выход есть. Глядишь найдется хак, чтобы сгенерить подобное для 192.168.0.1, но наверное это из оперы моих влажных фантазий.
🛠 #linux #devops #ssl
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 BlogТак же я писал серию постов про эту ОС, было разжевано большинство нюансов. Ознакомиться с полным «старт-паком» можешь по этим ссылкам: - Пробуем SelectOS - SelectOS в деле - Ставим SelectOS в облако Реклама. ООО "Селектел-Лаб". erid:2W5zFG1ryvQ
Этот способ в основном используют спец-люди, которые в результате blackbox вектора проникли на север и им нужно утащить жирненькую базу данных. Всё элементарно.Заходим в любую папку с файлами и запускаем:
python -m http.server 2977
Если питон старый, потрёпанный и сморщенный как хуй, делаем так:
python -m SimpleHTTPServer 2977
Затем курлим файл и скачиваем его к себе на машину:
curl -O http://linuxfactory.ru:2977/bashdays_db.zip
А можем прям в браузере открыть URL и увидеть список всех файлов, кликаем мышкой и скачиваем необходимое.
Еще бывают случаи когда curl не установлен, но wget есть из коробки:
wget -O bashdays_db.zip http://linuxfactory.ru:2977/bashdays_db.zip
Ну и в конце, когда получил желаемое, не забывай остановить такой веб-сервер. Изучай!
🛠 #security #linux #tricks
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 BlogЕсли ты залогинен в гугле и гуляешь в этом же браузере по другим сайтам — гугл это знает. Мало того, при любом звоночке, он без раздумий передаст эту информацию «малдерам». Звучит как сказка, но у гугла есть статистика сколько они слили данных по таким запросам. И да, когда ты с закрытыми глазами принимал «лицензионное соглашение», в нём все это оговаривалось.Что же такое fonts fingerprint? Это как тест ДНК, который даёт до 99% совпадения. Шрифт это как паспорт. У каждого пользователя свой, уникальный набор шрифтов. Даже если ты отключишь кукисы, у гугла есть другие инструменты для слежки: разрешение экранов, шрифты, webgl, canvas, timezone, ip + поведение. Кстати «режим инкогнито» не спасёт, это — миф. В этом режиме браузер не сохраняет историю, не сохраняет кукисы после закрытия. ВСЁ! Куки это верхушка айсберга, все остальные методы скрыты под капотом.
Fingerprint это корреляция десятков сигналов во времени.Как работает классический font fingerprint: Я подготовил страничку, в ней содержится как раз такой детект по шрифтам и канвасу. Открой её в браузере, а потом открой в «инкогнито» и ты сильно удивишься. Шрифты и хеш канваса будут идентичные. Даже если открыть страницу в другом браузере, Canvas Hash в большинстве случаев будет идентичен. Для чистоты эксперимента, открой страничку в ТОR браузере и ты увидишь, что набор шрифтов поменялся, да и canvas hash протух. Идея метода: берем текст, рисуем его с базовым шрифтом (serif / sans-serif), тестируемым шрифтом + fallback, сравниваем размеры, если размеры изменились — шрифт установлен в системе. И по итогу мы имеем паспорт пользователя: шрифты = ОС + язык + софт. Шрифты меняются редко, уникальность очень высокая, не ломаются при включении VPN / Инкогнито.
fonts + canvas + webgl ≈ уникальность > 99%А чё делать? Использовать разные браузеры под разные задачи. Один браузер чисто для гугла (но рекомендую вообще снести учетку и сделать чисто под ютуб), второй для сёрфинга, третий для просмотра порнушки. На рынке много антидетект браузеров, один из лидеров это LibreWolf. Этот браузер (Firefox на стероидах приватности) подсовывает одинаковый виртуальный набор, ломает измерения, возвращает одинаковые размеры, добавляешь шум.
Отключает webgl fingerprint, режет canvas, нормализует timezone, screen size, locale, отключает webrtc leak, блокирует third-party cookies, выключает телеметрию Mozilla, ломает high-entropy сигналы, всегда врёт одинаково.LibreWolf не делает «рандом», он делает массовую «одинаковость». То есть условно у 100 пользователей, которые пользуются этим браузером, будут идентичные данные. А среди 100 таких пользователей, тебя сложно идентифицировать — ты одинаковый. Чем больше уникальности, тем легче тебя узнать. Но ты всё равно спалишься, если залогинишься в гугле, либо будешь использовать этот браузер под разные задачи в рамках одной сессии. Чтобы скрыться, одного браузера мало, приватность это комплексная мера. По мере моей лени, буду накидывать подобные темы и снимать с тебя розовые очки. Ну а ты пока переваривай весь этот пиздец. Дальше затрем за Cloudflare и его приколы. 🛠 #security #privacy — 💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
docker-compose.yaml. Так вот, в современных дистрибутивах не обязательно называть так файл, достаточно обозвать его compose.yaml и всё будет работать. Но при условии если у тебя не допотопная ОС со старой версией docker’a.
Современный docker давно перешел на compose.yaml.
docker-compose — это отдельный python-инструмент docker compose — встроенный плагин docker cliТеперь docker в приоритете ищет файл
compose.yaml и только потом старый docker-compose.yaml. И так и так все будет работать. Оно пока на это не ругается, но рано или поздно к этому придут.
Наверное ты уже замечал, что если в yaml указать version: 3.9 оно скажет — ты ебанутый? Я пожалуй это проигнорирую.
Это нужно было указывать раньше, чтобы docker понимал какие поля разрешены и как вообще интерпретировать файл. Теперь это легаси и docker автоматически определяет версию, чтобы избавиться от зоопарка версий: v2, v2, v3.7, v3.9. Получаем один формат → одна логика → меньше гемора.
Кстати аналогичная хуйня в кубере, где версию апихи указываешь в манифестах. Если ты не знаешь как с этим работать, будет тебе боль и страдания. За эту тему поговорим отдельно.Но опять же если у тебя древняя ОС, выбора особо не будет, придется прописывать версии и поддерживать это наследие. Пример с version или подстава. Создавалась это не для docker compose, а для docker swarm. В
version:3 Docker Compose просто молча игнорировал: mem_limit, cpu_shares, cpus, restart_policy, depends_on. Не было ни ошибок, ни предупреждений. Просто ничего не происходило. Контейнер запускался, но не как ожидалось.
version: "3"
mem_limit: 512m
Хм… 512 говоришь, хуй те! Эй OOM давай к нам, у нас тут пациент!
version:3 — Swarm-спека
Ну и про yaml и yml пару строк. Можно писать так и так, оба варианта равноправны. Но всё же рекомендуется yaml, потому что это полное официальное расширение, так пишется в спецификациях и документациях. Плюсом это единый стиль Kubernetes, GitHub Actions, Helm и т.п.
На сколько помню yml пошел со старых систем, когда было ограничение в 3 символа, опять же наследие прошлого.
Возможно ошибаюсь, поправьте в комментах.
🛠 #docker #linux #devops
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 BlogКак говорил мой знакомый — да кому мы нужны, все наши данные давно уже гуляют по сети. Но когда он узнал, что гугол взял его учетку (со всем содержимым и метаданными) и просто отдал третьим лицам на изучение — начинаешь задумываться, причем становится по настоящему жутковато.Возможно кто-то из вас получал подобные письма (Google received and responded to a legal process issued by the…) и знает это ощущение безысходности. Да, похоже на фейк (2018 года) и фишинг, но увы всё по настоящему. Поищи в сети если интересно, много таких случаев как оказалось. Ебала рыба озеро! 😲 Лишь только по этим причинам я полностью выпилился из гугла и его сервисов. Про этот большой пиздец-переезд я запилю отдельный пост, было очень познавательно и увлекательно, особенно со смартфоном. Ладно, теперь по теме поста. Сегодня речь про Privacy Sexy. Кроссплатформенная забияка, с открытым git репозиторием и возможностью установить на машину как отдельное приложение либо использовать через веб.
Этот проект помогает включать/отключать privacy и security настройки в Windows / macOS / Linux с помощью готовых «твиков» и скриптов.Ты просто выбираешь нужные галочки, а справа получаешь готовые скрипты, которые нужно запустить. Да, под Linux и Mac это будут именно Bash скрипты. Это отличная возможность посмотреть в кишочки и забрать какие-то идеи в свои проекты. Что внутри: - Больше 5 сотен скриптов/настроек, которые уменьшают телеметрию, отключают лишние сервисы, усиливают безопасность и приватность. - Есть графическое приложение (desktop) и веб-версия. - Всё прозрачно — видно, что именно делает каждый твик/скрипт. - Обратимость — можно откатить изменения (revert). - Полный open-source, лицензия AGPL-3.0. Важно и ценно — в отличие от рандомных «батников» из интернета, privacy.sexy показывает, какие именно изменения будут сделаны и генерирует скрипты прозрачно. Пользуйся на здоровье, это лучше всяких бинарных твиков!
Ну и не храни на гугол драйве своё хоум-видео с пылесос-отсосом, неровен час сам станешь звездой такого эпизода на которую однажды будут дрочить малдеры с дикого запада.🛠 #security #privacy — 💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Уже доступно! Исследование Telegram 2025 — ключевые инсайты года 
