L
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
L
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
L
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
L
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
L
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
L
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
L
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
L
LinuxSkill - Сводки с прода и Шпаргалки
26.06.2026 07:26 · 👁 2.3K
💀 Твой демон падает из-за изоляции? Учим AppArmor работать правильно
Использование aa-disable или teardown для неработающего демона полностью снимает MAC-изоляцию на продакшене. Вместо выгрузки защиты мы переведем профиль в режим обучения, соберем реальные пути и вернем жесткий контроль. Помни: AppArmor привязывает правила к абсолютному пути бинарника, а не к меткам типов, как это делает SELinux.
❗️❗️❗️ Нравится формат? Ставь 👍
👉 Рубрика: #шпаргалка@LinuxSkill
#Linux #AppArmor #Security #Ubuntu #DevOps
L
LinuxSkill - Сводки с прода и Шпаргалки
24.06.2026 05:57 · 👁 2.3K
🎯 Инкрементные бэкапы без костылей: хардкорная шпаргалка по tar -g
Ежедневное создание полных архивов убивает дисковое пространство и перегружает подсистему ввода-вывода. Показываю, как собирать только измененные файлы и правильно отслеживать удаления, не копируя терабайты лишних данных.
Настрой инкрементное копирование, чтобы радикально снизить нагрузку на дисковую подсистему серверов.
❗️❗️❗️ Нравится формат? Ставь 👍
👉 Рубрика: #шпаргалка@LinuxSkill
#Linux #Bash #Backup #Tar #DevOps #SysAdmin
L
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