LinuxSkill - Сводки с прода и Шпаргалки (@LinuxSkill) — Telegram-канал | Telegram Dialogs
Все каналы
LinuxSkill - Сводки с прода и Шпаргалки

LinuxSkill - Сводки с прода и Шпаргалки

@LinuxSkill

10.9K подписчиков технологии 💬 Комментарии открыты ✓ Зарегистрирован в РКН

Следим за новостями Linux, DevOps и ИБ, чтобы быть готовым к любым факапам. Бонусом — плотные шпаргалки и чеклисты для ежедневной работы в терминале. 📩 По всем вопросам: @chorapov Зеркало в MAX: https://max.ru/LinuxSkill РКН https://vk.cc/cMUwm4

Последние публикации

LinuxSkill - Сводки с прода и Шпаргалки
17.07.2026 05:57 · 👁 506
☠️ Забыл флаг -a в usermod и сломал доступ? Учимся управлять группами Создание учёток кажется банальщиной, пока кто-то не затрёт списки групп кривым ключом или не оставит доступ уволенному подрядчику. Держи 15 команд для тотального контроля пользователей на проде. Создание и системные учётки # 1. Эталонное создание пользователя (папка, оболочка, доп. группы). # ВАЖНО: 'wheel' есть в RHEL/Fedora/Arch; в Debian/Ubuntu для sudo используй группу 'sudo'. # Группа 'docker' появляется только после установки Docker — иначе useradd упадёт. sudo useradd -m -s /bin/bash -G docker,sudo ivanov # 2. Системный демон (без входа; -r не создаёт каталог, home лучше задать явно). sudo useradd -r -s /usr/sbin/nologin -d /nonexistent nginx_worker # 3. Дефолтные скелеты: содержимое /etc/skel копируется в /home новичку при -m. ls -la /etc/skel/ Опасные игры с группами # 4. Безопасное добавление в группу (-a обязательно, иначе -G затрёт все старые группы!) sudo usermod -aG developers petrov # 5. Исключение пользователя из одной конкретной группы (порядок: сначала USER, потом GROUP) sudo gpasswd -d petrov developers # 6. Запустить НОВЫЙ шелл с другой основной группой (выход — exit). Группу указывать обязательно. newgrp developers # 7. Создание системной группы с кастомным GID sudo groupadd -r -g 555 appgroup Пароли и жёсткие блокировки # 8. Заставить сменить пароль при первом входе (last change = 0 => пароль просрочен). sudo chage -d 0 ivanov # 9. Жёсткая блокировка учётки (ставит ! перед хешем в /etc/shadow). sudo usermod -L ivanov # 10. Быстрая разблокировка (убирает ! из /etc/shadow). sudo usermod -U ivanov # 11. Отключение учётки по дате YYYY-MM-DD (идеально для внешних подрядчиков). sudo usermod -e 2026-12-31 contract_user Аудит и чистое удаление # 12. Проверка passwd/shadow на синтаксис. Флаг -r = только чтение (ничего не меняет). sudo pwck -r # 13. Проверка файла групп на целостность (тоже -r для безопасного аудита). sudo grpck -r # 14. Чтение учёток через NSS (видит и локальных, и LDAP/AD пользователей). getent passwd petrov # 15. Полное удаление юзера вместе с домашней директорией и почтовым спулом. sudo userdel -r ivanov Никогда не забывай -a в связке с -G и прогоняй pwck после ручной правки системных файлов. ❗️❗️❗️ Нравится формат? Ставь 👍 👉 Рубрика: #шпаргалка@LinuxSkill #Linux #Security #SysAdmin #DevOps #Bash
LinuxSkill - Сводки с прода и Шпаргалки
16.07.2026 08:57 · 👁 696
📹Вебинар: Выбор между Serverless и Kubernetes для AI-ворклоадов: как определить оптимальную платформу под задачу На открытом уроке рассмотрим: - В чем различаются Serverless-подходы и Kubernetes при работе с AI-ворклоадами; - Какие преимущества и ограничения есть у каждого подхода с точки зрения масштабируемости, стоимости и сложности эксплуатации; - Какие трейдоффы нужно учитывать при выборе платформы: холодный старт, управление состоянием, поддержка GPU; - Как обосновывать выбор архитектуры для разных AI-сценариев на практическом воркшопе. После занятия вы будете знать: - Как сравнивать Serverless и Kubernetes для различных AI-задач; - Как выбирать платформу оркестрации в зависимости от требований к нагрузке, бюджету и архитектуре решения; - Как учитывать ключевые технические ограничения при проектировании AI-инфраструктуры; - Как аргументированно обосновывать выбор платформы для задач масштабирования, потоковой обработки данных и построения гибридных сред. ⚠ Открытый урок проходит в преддверии старта курса «ИИ-архитектор». 👉 Для участия зарегистрируйтесь: https://vk.cc/cZyYcZ Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
LinuxSkill - Сводки с прода и Шпаргалки
15.07.2026 05:57 · 👁 762
💣 Контейнер остался без сети? Дебажим трафик прямо с хоста Старый ifconfig давно устарел, а Docker строит сети поверх абстракций ядра, скрывая интерфейсы контейнеров. Понимание iproute2 и неймспейсов netns — граница между джуном и профи. Держи шпаргалку по управлению скрытыми сетями оркестраторов. Базовое управление интерфейсами хоста Пакет iproute2 заменяет зоопарк старых сетевых утилит. # Показать все IP-адреса и интерфейсы (сокращение от 'ip address show'). # Флаг -c включает цветной вывод для удобного чтения. ip -c a # Погасить или поднять интерфейс (замена 'ifconfig eth0 down/up'). sudo ip link set dev eth0 down sudo ip link set dev eth0 up # Добавить дополнительный IP (алиас) на интерфейс на лету. sudo ip addr add 10.0.0.5/24 dev eth0 # Удалить IP с интерфейса. sudo ip addr del 10.0.0.5/24 dev eth0 Маршрутизация и таблица соседей # Таблица маршрутизации ядра (замена 'route -n'). ip r # Прописать шлюз по умолчанию. sudo ip route add default via 192.168.1.1 dev eth0 # Таблица соседей: ARP для IPv4 и NDP для IPv6 (замена 'arp -n'). ip neigh show Инспекция сетей Docker На дефолтном bridge контейнеры получают адреса из подсети docker0. Достаём IP без входа внутрь. # ВАЖНО: .NetworkSettings.IPAddress пуст для user-defined сетей (docker-compose и т.п.). # Надёжный способ — итерировать по .Networks (работает для ЛЮБОГО типа сети): docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' my_container # IP всех работающих контейнеров с именами и именем сети: docker ps -q | while read id; do name=$(docker inspect -f '{{.Name}}' "$id" | tr -d '/') ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}} {{end}}' "$id") echo "$name: $ip" done Дебаг неймспейсов: команды ip внутри контейнера с хоста Docker создаёт netns для каждого контейнера, но не кладёт симлинк в /var/run/netns, откуда его читает ip netns. Восстанавливаем симлинк вручную, чтобы дебажить сеть контейнера прямо с хоста. # 1. Достаём главный PID контейнера. export CPID=$(docker inspect -f '{{.State.Pid}}' my_container) # 2. Создаём стандартный каталог для неймспейсов, если его нет. sudo mkdir -p /var/run/netns # 3. Пробрасываем netns контейнера туда, где его найдёт 'ip netns'. sudo ln -s /proc/$CPID/ns/net /var/run/netns/my_container_ns # 4. Теперь любые ip-команды выполняются В КОНТЕКСТЕ сети контейнера. sudo ip netns exec my_container_ns ip a # интерфейсы внутри контейнера sudo ip netns exec my_container_ns ip r # маршруты внутри контейнера # 5. Убираем симлинк после отладки (rm, НЕ 'ip netns del' — иначе снесёт сам netns!). sudo rm /var/run/netns/my_container_ns Используй iproute2 в связке с сетевыми неймспейсами, чтобы траблшутить аномалии на самом низком уровне. ❗️❗️❗️ Нравится формат? Ставь 👍 👉 Рубрика: #шпаргалка@LinuxSkill #Linux #Docker #Networking #DevOps #SysAdmin
LinuxSkill - Сводки с прода и Шпаргалки
13.07.2026 05:57 · 👁 1.1K
🔧 Хватит писать как джун. 15 хардкорных идиом Bash для профи Bash-скрипты кажутся простыми, пока не начинают молча ломать серверы из-за неэкранированных пробелов или проигнорированных ошибок в конвейерах. Держи 15 идиом, которые выведут твои скрипты на уровень Senior. Жёсткая защита и отладка # 1. Неофициальный строгий режим bash. # Падение при первой ошибке (-e), при обращении к необъявленной переменной (-u), и ошибка внутри конвейера не проглатывается (pipefail). set -euo pipefail # 2. Массив PIPESTATUS. # В конвейере обычный $? покажет статус только ПОСЛЕДНЕЙ команды. # PIPESTATUS хранит коды всех команд — ОБРАЩАЙСЯ ПО ИНДЕКСУ: ${PIPESTATUS[0]}, [1]... cat /etc/passwd | grep -q root echo "Статус cat: ${PIPESTATUS[0]}, статус grep: ${PIPESTATUS[1]}" # 3. Безопасная очистка через trap. # Временные файлы удалятся при любом выходе, включая Ctrl+C. TMP_FILE=$(mktemp) trap 'rm -f "$TMP_FILE"' EXIT Подстановки переменных (без sed и awk) # 4. Значение по умолчанию, если TARGET не задана или пуста. cd "${TARGET:-/tmp}" # 5. Глобальная замена подстрок в памяти (все вхождения). LOG="system error, network error" echo "${LOG//error/warning}" # 6. Косвенные ссылки: читаем переменную, имя которой лежит в другой переменной. REAL_VAR="SecretData" POINTER="REAL_VAR" echo "${!POINTER}" # 7. Обрезка префикса/суффикса (замена basename и dirname). FILEPATH="/var/log/syslog.tar.gz" echo "${FILEPATH##*/}" # всё до последнего слеша срезано: syslog.tar.gz echo "${FILEPATH%/*}" # всё после последнего слеша срезано: /var/log Логика и структуры # 8. Регулярки прямо в условии (только в [[ ... ]], регулярку справа НЕ кавычим). if [[ $1 =~ ^[0-9]+$ ]]; then echo "Аргумент состоит только из цифр" fi # 9. Группировка команд в ТЕКУЩЕМ процессе через { ... } (переменные сохраняются). [[ -d /tmp/app ]] || { echo "Каталог не найден"; exit 1; } # 10. Встроенная арифметика вместо мёртвого expr. # ОСТОРОЖНО: под 'set -e' выражение (( x++ )) возвращает код 1, когда старое значение 0, и убивает скрипт. Используй префиксную форму ++COUNT или добавляй '|| true'. COUNT=5 (( ++COUNT )) (( REMAINING = 100 - COUNT )) Потоки и дескрипторы # 11. Подстановка процессов: вывод команд туда, где ждут ИМЕНА файлов. diff -u <(ls -l /dir1) <(ls -l /dir2) # 12. Here String: строка на stdin без лишнего процесса echo. grep "critical" <<< "$LOG_DATA" # 13. Правильное построчное чтение. # -r запрещает трактовать бэкслеши, пустой IFS= сохраняет ведущие пробелы. while IFS= read -r line; do echo "Прочитана строка: $line" done < config.txt # 14. Парсинг строки с локальной подменой IFS (только для этой команды read). USER_INFO="root:x:0:0:root:/root:/bin/bash" IFS=":" read -r user pass uid gid desc home shell <<< "$USER_INFO" # 15. Совместное перенаправление stdout и stderr одним оператором. /opt/scripts/backup.sh &> /var/log/backup.log Внедряй эти идиомы, чтобы скрипты не зависели от внешних утилит и не падали на пустом месте. ❗️❗️❗️ Нравится формат? Ставь 👍 👉 Рубрика: #шпаргалка@LinuxSkill #Linux #Bash #DevOps #Scripting #SysAdmin
LinuxSkill - Сводки с прода и Шпаргалки
08.07.2026 05:57 · 👁 1.6K
🔪 Режем права контейнеров: 10 неочевидных команд безопасности Docker Дефолтные настройки Docker оставляют большую поверхность атаки. Взлом приложения внутри контейнера без ограничений легко ведёт к компрометации хоста. Держи 10 параметров, которые жёстко изолируют продакшен. Контроль привилегий и эскалации # 1. Тотальный сброс привилегий ядра (Capabilities). # Сбрасываем все и выдаём только нужную для bind на порты <1024. docker run --cap-drop ALL --cap-add NET_BIND_SERVICE -d nginx # 2. Блокировка эскалации через SUID/SGID бинарники (в Dockerfile). # ВАЖНО: синтаксис '-perm /6000', а НЕ '+6000' (последний давно не работает в GNU find). RUN find / -xdev -perm /6000 -type f -exec chmod a-s {} \; || true # 3. Использование gosu вместо sudo в ENTRYPOINT. # sudo плодит процессы и криво обрабатывает сигналы PID 1. gosu самоустраняется (exec). exec gosu appuser "$@" Изоляция файловой системы и ядра # 4. Корневая ФС только для чтения; для записи монтируем именованный том. # Атакующий не сможет скачать малварь или переписать скрипты в контейнере. docker run --read-only --tmpfs /tmp -v /host/data:/app/data:rw -d myapp # 5. Изоляция тома через SELinux (метка :Z). # :Z = приватная метка ТОЛЬКО для этого контейнера (:z, строчная — общая для нескольких). docker run -v /host/secret:/data:Z -d db_service # 6. Кастомный профиль AppArmor (синтаксис через '=', а не ':'). # Профиль ДО этого нужно загрузить: sudo apparmor_parser -r -W /etc/apparmor.d/custom-nginx docker run --security-opt apparmor=custom-nginx-profile -d nginx Защита от отказа в обслуживании (DoS) # 7. Лимит файловых дескрипторов (по дефолту на systemd-хостах ~1048576). # Режет атаки, открывающие тысячи соединений/файлов. docker run --ulimit nofile=1024:2048 -d backend_app # 8. Жёсткий лимит RAM + запрет свопа. # memory-swap = memory (256m=256m) означает СВОП ОТКЛЮЧЁН: утечка не выжрет своп хоста. docker run -m 256m --memory-swap 256m -d heavy_service Сеть и аутентичность образов # 9. Отключение межконтейнерного обмена (ICC) — через daemon.json, НЕ /etc/default/docker. # Файл /etc/docker/daemon.json: # { "icc": false, "iptables": true } # Затем: sudo systemctl restart docker # (старый DOCKER_OPTS в /etc/default/docker на systemd-хостах игнорируется) # 10. Принудительная проверка подписей образов (Content Trust). # Блокирует pull/run образов без валидной криптоподписи. export DOCKER_CONTENT_TRUST=1 docker pull myorg/backend:latest Интегрируй эти параметры в свои Compose-манифесты и пайплайны. Безопасность начинается с принципа наименьших привилегий. ❗️❗️❗️ Нравится формат? Ставь 👍 👉 Рубрика: #шпаргалка@LinuxSkill #Linux #Docker #Security #DevOps #SysAdmin
LinuxSkill - Сводки с прода и Шпаргалки
06.07.2026 05:57 · 👁 1.7K
💀 Твой сервер светит реальным IP? Закрываем дыру через VPS и WAF Оставлять реальный IP сервера открытым — верный путь к взлому. Держи два хардкорных и бесплатных способа спрятать бэкенд и отбить атаки. Вариант 1: Туннель Netbird + Nginx на дешёвой VPS Покупаем самую слабую внешнюю VPS, поднимаем на ней Netbird и Nginx. Реальный сервер прячется хоть за 1000 NAT в домашнем Proxmox. Внешняя VPS принимает трафик и прокидывает его в защищённый туннель. # /etc/nginx/sites-available/backend (проверено парсером nginx) upstream backend { server 100.64.0.5:8080; # IP Proxmox-контейнера внутри сети Netbird keepalive 32; } server { listen 80; server_name myapp.ru; location / { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # поддержка WebSocket proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_connect_timeout 60s; proxy_read_timeout 60s; } } Активация и проверка конфига перед перезапуском: sudo ln -s /etc/nginx/sites-available/backend /etc/nginx/sites-enabled/ sudo nginx -t && sudo systemctl reload nginx # nginx -t = обязательная проверка синтаксиса Вариант 2: Внешняя VPS + Safeline WAF Перед приложением ставится комбайн Safeline: фильтрует трафик, режет ботов, спасает от SQLi, XSS, Command injection, Path traversal и RCE. Работает как reverse-proxy на движке Tengine с семантическим анализом. Быстрый старт Safeline одной командой (актуальный официальный установщик): # manager.sh сам поставит Docker, скачает образы и поднимет весь стек bash -c "$(curl -fsSLk https://waf.chaitin.com/release/latest/manager.sh)" -- --en Ручной деплой (официальный способ — compose скачивается, а не пишется руками): Стек состоит из 6 контейнеров (postgres, fvm, detector, mgt, mario, tengine), поэтому compose берём готовый и настраиваем через .env: # 1. Директория (нужно ≥5 ГБ) sudo mkdir -p /data/safeline && cd /data/safeline # 2. Официальный docker-compose (руками его собрать нельзя — сервисов много и они связаны) sudo wget https://waf.chaitin.com/release/latest/compose.yaml # 3. Файл окружения (пароль обязателен, иначе postgres не стартует) sudo tee .env > /dev/null << 'EOF' SAFELINE_DIR=/data/safeline IMAGE_TAG=latest MGT_PORT=9443 POSTGRES_PASSWORD=CHANGE_ME_strong_password SUBNET_PREFIX=172.22.222 IMAGE_PREFIX=chaitin ARCH_SUFFIX= RELEASE= REGION=-g EOF # 4. Запуск sudo docker compose up -d # 5. Получить логин/пароль админа sudo docker exec safeline-mgt resetadmin Панель управления: https://<IP-твоей-VPS>:9443 ⚠️ На ARM-серверах меняй ARCH_SUFFIX=-arm; Personal Edition на ARM не работает — нужна Pro-лицензия. Внедряй эти подходы, чтобы не только анализировать трафик, но и на 100% скрывать IP своих приложений. ❗️❗️❗️ Нравится формат? Ставь 👍 👉 Рубрика: #шпаргалка@LinuxSkill #Linux #Security #WAF #Docker #DevOps
LinuxSkill - Сводки с прода и Шпаргалки
29.06.2026 07:35 · 👁 2.1K
🔧 Укрощаем bash: 15 железобетонных функций для профи Самописные функции в конфигурации оболочки экономят часы рутины, но часто пишутся "на коленке" и падают с синтаксическими ошибками, если забыть передать им аргумент. Я собрал 15 убойных функций для твоего конфига и добавил в них жесткие проверки и значения по умолчанию. Забирай в продакшен. Навигация и управление файлами # 1. Создать директорию и сразу в нее перейти mkcd() { mkdir -p "$1" && cd "$1" } # 2. Подняться на N уровней вверх. Если аргумент не передан, поднимаемся на 1 (защита от syntax error) up() { local d="" local limit="${1:-1}" for ((i=1; i<=limit; i++)); do d+="../"; done cd "$d" } # 3. Быстрый поиск файла по имени в текущей директории ff() { find . -type f -iname "*$1*" } # 4. Быстрый поиск директории по имени fd() { find . -type d -iname "*$1*" } # 5. Узнать размер директории. Если путь не передан, считаем текущую (.) dirsize() { du -sh "${1:-.}" } Работа с процессами и историей # 6. Найти процесс, отсекая из вывода сам grep psg() { ps aux | grep -i "$1" | grep -v grep } # 7. Посмотреть N последних введенных команд (по умолчанию 10) h() { history | tail -n "${1:-10}" } # 8. Быстрый поиск по истории команд hg() { history | grep "$1" } Сеть и порты # 9. Поднять HTTP-сервер в текущей папке (по умолчанию порт 8000) serve() { python3 -m http.server "${1:-8000}" } # 10. Узнать свой внешний IP-адрес myip() { curl -s ifconfig.me } # 11. Узнать IP-адрес нужного домена ipinfo() { dig +short "$1" } # 12. Показать все открытые слушающие порты ports() { ss -tuln } Система и безопасность # 13. Полная очистка терминала вместе с буфером прокрутки cls() { clear && printf '\e[3J' } # 14. Универсальная распаковка архива с проверкой существования файла extract() { if [ -f "$1" ]; then case "$1" in *.tar.bz2|*.tbz2) tar xjf "$1" ;; *.tar.gz|*.tgz) tar xzf "$1" ;; *.bz2) bunzip2 "$1" ;; *.rar) unrar x "$1" ;; *.gz) gunzip "$1" ;; *.tar) tar xf "$1" ;; *.zip) unzip "$1" ;; *.7z) 7z x "$1" ;; *) echo "Неизвестный архив" ;; esac else echo "Файл '$1' не найден" fi } # 15. Безопасный rm: защита от пустого вызова и регистронезависимое подтверждение (Y/y) rm() { if [ -z "$1" ]; then command rm return fi ls -FCsd -- "$@" read -p 'Удалить безвозвратно? [y/N] ' ans if [[ "$ans" =~ ^[Yy]$ ]]; then command rm -rf -- "$@" fi } Все конструкции используют конструкцию ${1:-значение}, которая спасает bash от падения при пустых переменных. Добавь нужные блоки в свой файл конфигурации и выполни команду source ~/.bashrc для применения изменений. ❗️❗️❗️ Нравится формат? Ставь 👍 👉 Рубрика: #шпаргалка@LinuxSkill #Linux #Bash #CLI #DevOps #Bashrc
LinuxSkill - Сводки с прода и Шпаргалки
26.06.2026 07:26 · 👁 2.3K
💀 Твой демон падает из-за изоляции? Учим AppArmor работать правильно Использование aa-disable или teardown для неработающего демона полностью снимает MAC-изоляцию на продакшене. Вместо выгрузки защиты мы переведем профиль в режим обучения, соберем реальные пути и вернем жесткий контроль. Помни: AppArmor привязывает правила к абсолютному пути бинарника, а не к меткам типов, как это делает SELinux. ❗️❗️❗️ Нравится формат? Ставь 👍 👉 Рубрика: #шпаргалка@LinuxSkill #Linux #AppArmor #Security #Ubuntu #DevOps
LinuxSkill - Сводки с прода и Шпаргалки
24.06.2026 05:57 · 👁 2.3K
🎯 Инкрементные бэкапы без костылей: хардкорная шпаргалка по tar -g Ежедневное создание полных архивов убивает дисковое пространство и перегружает подсистему ввода-вывода. Показываю, как собирать только измененные файлы и правильно отслеживать удаления, не копируя терабайты лишних данных. Настрой инкрементное копирование, чтобы радикально снизить нагрузку на дисковую подсистему серверов. ❗️❗️❗️ Нравится формат? Ставь 👍 👉 Рубрика: #шпаргалка@LinuxSkill #Linux #Bash #Backup #Tar #DevOps #SysAdmin
LinuxSkill - Сводки с прода и Шпаргалки
22.06.2026 05:57 · 👁 2.1K
🎯 Твой DROP пропускает пакеты? Исправляем фатальную ошибку лимитов nftables Stateless-фаерволы сверяют каждый пакет со всем списком правил, сжигая ресурсы. Stateful-фаервол с conntrack помнит сессии и пропускает 99% трафика первым же правилом. Показываю, как написать эталонный конфиг и не попасть в ловушку лимитирования, из-за которой часть мусорного трафика пробивает твою защиту. Перед применением policy drop без разрешающего правила SSH ты заблокируешь сам себя — сначала всегда прописывай свой доступ. Всегда держи второй открытый сеанс для отката и не забудь сделать systemctl enable nftables, чтобы защита пережила перезагрузку. ❗️❗️❗️ Нравится формат? Ставь 👍 👉 Рубрика: #шпаргалка@LinuxSkill #Linux #Security #nftables #Firewall #DevOps
Чат поддержки
Ответим здесь же, обычно быстро
Здравствуйте! Напишите ваш вопрос — оператор ответит в этом чате.