LinuxSkill - Сводки с прода и Шпаргалки
Следим за новостями Linux, DevOps и ИБ, чтобы быть готовым к любым факапам. Бонусом — плотные шпаргалки и чеклисты для ежедневной работы в терминале. 📩 По всем вопросам: @chorapov Зеркало в MAX: https://max.ru/LinuxSkill РКН https://vk.cc/cMUwm4
Больше📈 Аналитический обзор Telegram-канала LinuxSkill - Сводки с прода и Шпаргалки
Канал LinuxSkill - Сводки с прода и Шпаргалки (@linuxskill) языкового сегмента Русский является активным участником. Сейчас сообщество объединяет 10 743 подписчиков, занимая 11 103 место в категории Технологии и приложения и 59 284 место в регионе Россия.
📊 Показатели аудитории и динамика
С момента создания невідомо проект демонстрирует стремительный рост, собрав аудиторию из 10 743 подписчиков.
Согласно последним данным от 30 августа, 2026, канал показывает стабильную активность. За последние 30 дней изменение числа участников составило -48, а за последние 24 часа — 0, при этом общий охват остаётся высоким.
- Статус верификации: Не верифицирован
- Уровень вовлечённости (ER): Средний показатель вовлечённости аудитории составляет 11.54%. В первые 24 часа после публикации контент обычно набирает 4.80% реакций от общего числа подписчиков.
- Охват публикаций: В среднем каждый пост получает 1 240 просмотров. В течение первых суток публикация набирает 516 просмотров.
- Реакции и взаимодействия: Аудитория активно поддерживает контент: среднее количество реакций на один пост — 4.
- Тематические интересы: Контент сосредоточен на ключевых темах, таких как docker, linux, bash, devops, скрипт.
📝 Описание и контентная политика
Автор описывает ресурс как площадку для выражения субъективного мнения:
“Следим за новостями Linux, DevOps и ИБ, чтобы быть готовым к любым факапам.
Бонусом — плотные шпаргалки и чеклисты для ежедневной работы в терминале.
📩 По всем вопросам: @chorapov
Зеркало в MAX: https://max.ru/LinuxSkill
РКН https://vk.cc/cMUwm4”
Благодаря высокой частоте обновлений (последние данные получены 31 августа, 2026) канал поддерживает актуальность и высокий уровень охвата публикаций. Аналитика показывает, что аудитория активно взаимодействует с контентом, что делает его важной точкой влияния в категории Технологии и приложения.
mkdir, затем cd с тем же длинным путём. Показываю, как схлопнуть это через встроенную переменную оболочки.
Классический подход (трата времени)
# ПЛОХО: ручной повтор пути отнимает время и провоцирует опечатки
mkdir /var/www/my_new_hardcore_project
cd /var/www/my_new_hardcore_project
Оптимизация на лету (переменная $_)
# ХОРОШО: объединяем через && и подставляем последний аргумент через $_.
# Кавычки обязательны — иначе путь с пробелом сломает cd (too many arguments).
mkdir -p /var/www/my_new_hardcore_project && cd "$_"
Оператор && гарантирует, что переход выполнится только при успешном создании каталога. Переменная $_ разворачивается в последний аргумент предыдущей команды. Кавычки вокруг "$_" не опциональны: без них путь с пробелом разобьётся на несколько аргументов, и cd упадёт.
Глобальное решение (функция в конфиге)
# ИДЕАЛЬНО: чтобы не вспоминать про && cd "$_", зашей функцию в ~/.bashrc
mkcd() {
mkdir -p -- "$1" && cd -- "$1"
}
# После source ~/.bashrc создание и переход — одна команда:
mkcd /var/www/my_new_hardcore_project
Крошечный трюк, который экономит тысячи нажатий на дистанции. Привыкай использовать механизмы Bash на полную.
❗️❗️❗️ Нравится формат? Ставь 👍
👉 Рубрика: #шпаргалка@LinuxSkill
#Linux #Bash #CLI #Lifehack #SysAdmincat ломает кавычки, а ControlMaster=no убивает мультиплексирование. Держи 6 безопасных хаков для ускорения работы с SSH.
Выполнение команд без сессии
# Выполнить одну команду и сразу отключиться (удобно для скриптов).
ssh user@host df -h
# Безопасное выполнение списка команд из локального файла.
# Вместо ломающего кавычки cat — кормим скрипт прямо в удалённый bash:
ssh user@host "bash -s" < commands.txt
Редактирование без входа на сервер
# Открыть удалённый файл в ЛОКАЛЬНОМ vim по scp. Требует плагина netrw (в комплекте vim).
# Обрати внимание на ДВА слеша: // = абсолютный путь от корня.
vim scp://user@host//etc/nginx/nginx.conf
Сравнение удалённого и локального конфига
# Сравниваем без скачивания. Дефис '-' заставляет diff читать ВТОРОЙ операнд
# из stdin (это вывод ssh). Порядок: слева локальный, справа удалённый.
ssh user@host cat /etc/nginx/nginx.conf | diff ./local_nginx.conf -
Проброс вывода в буфер обмена
# Выполняем команду на сервере и забираем результат в локальный буфер.
ssh user@host uname -a | xclip -selection clipboard
Монтирование сервера как флешки
# Ставим FUSE-драйвер файловой системы.
sudo apt-get install sshfs
# Монтируем удалённый каталог — работаем через обычные ls/cp.
# reconnect спасает сессию при обрыве связи.
sshfs user@host:/home/user ~/remote_files/ -o reconnect
Рабочее мультиплексирование (постоянное соединение)
Если постоянно ходишь на одну машину, перестань тратить время на криптографическое рукопожатие при каждом коннекте.
# Добавь в ~/.ssh/config. Каталог для сокетов создай заранее:
# mkdir -p ~/.ssh/sockets
# ВАЖНО: ControlMaster именно 'auto', иначе переиспользование не сработает.
Host *
ControlMaster auto
ControlPath ~/.ssh/sockets/%C
ControlPersist 10m
Первое соединение откроет TCP-канал, а все последующие ssh, scp и sftp полетят через него мгновенно.
Проверь свой ~/.ssh/config прямо сейчас на предмет вредных настроек!
❗️❗️❗️ Нравится формат? Ставь 👍
👉 Рубрика: #шпаргалка@LinuxSkill
#Linux #SSH #DevOps #SysAdmin #Securitydocker run).
Срез состояния распределённого сервиса
# На каких нодах (NODE) запущены реплики сервиса web.
# Столбцы DESIRED STATE и CURRENT STATE сразу покажут зависшую или упавшую задачу.
docker service ps web
Имитация аппаратного сбоя (Failover)
# Мягко выводим ноду из балансировки — задачи переедут на живые узлы.
docker node update --availability drain worker-1
# Возвращаем ноду в строй (реплики сами обратно НЕ переедут — нужен ребаланс).
docker node update --availability active worker-1
Глобальная агрегация логов
# Логи со всех реплик на всех нодах в один поток.
# --raw убирает служебные префиксы Swarm, если нужен чистый вывод приложения.
docker service logs --follow --details web
Детальный дебаг умирающих реплик
# Надёжнее текстового grep — встроенный фильтр по состоянию задачи.
# Показывает именно завершённые/упавшие задачи, а колонка ERROR даёт причину.
docker service ps web --no-trunc --filter "desired-state=shutdown"
# Альтернатива через grep (работает, но чувствительна к регистру и формату):
docker service ps web --no-trunc | grep -i "failed"
Инспекция здоровья менеджеров
# Не рассинхронизировался ли Raft: доступность конкретного менеджера.
docker node inspect manager-1 --format '{{.ManagerStatus.Reachability}}'
# Кто сейчас лидер кластера (true = этот узел лидер).
docker node inspect manager-1 --format '{{.ManagerStatus.Leader}}'
> Подводные камни:
> Если кворум менеджеров (Raft) потерян, воркеры продолжат обслуживать трафик, но управлять кластером ты не сможешь. Держи нечётное число менеджеров: 3 переживают падение 1, 5 — падение 2, 7 — падение 3.
> docker logs работает только для локального контейнера на конкретной ноде. В кластере используй docker service logs.
> Не тестируй отказоустойчивость убийством одного контейнера — Swarm просто перезапустит его на той же ноде. Имитируй падение узла целиком через drain.
Держи кластер под жёстким контролем и тестируй failover раньше, чем это сделает боевой трафик.
❗️❗️❗️ Нравится формат? Ставь 👍
👉 Рубрика: #шпаргалка@LinuxSkill
#Linux #Docker #DevOps #Swarm #SysAdmin# Начать запись макроса в регистр 'a'
qa
# ... выполняем любые действия редактирования ...
# Остановить запись
q
# Воспроизвести макрос из 'a' 50 раз подряд
50@a
# Повторить макрос до конца файла (не считая строки вручную):
:%normal @a
Глобальная замена с контекстом
Команда :g находит строки по шаблону и выполняет в них замену или другую команду.
# В строках с "FIXME" заменить "timeout" на "resolved"
:g/FIXME/s/timeout/resolved/g
Интеграция с внешними bash-утилитами
Текст из буфера можно прогнать через внешнюю команду, а вывод вставить на место старого.
# Отсортировать строки от текущей до конца файла через sort
:.,$!sort
# Заменить весь буфер выводом awk (печатаем вторую колонку)
:%!awk '{print $2}'
Чтение вывода консоли прямо в текст
# Вставить список файлов на строку НИЖЕ курсора
:r !ls -l
# Вставить текущую дату и время
:r !date
Собственные сокращения (аббревиатуры)
Разворачиваются в режиме вставки, когда вводишь их как отдельное слово.
# "imrc" + пробел/Enter развернётся в полную фразу.
# Лучше iabbrev — срабатывает ТОЛЬКО в режиме вставки (ab цепляет и командную строку):
:iabbrev imrc International Materials Research Center
Переназначение клавиш (шорткаты)
Для частых действий вешаем свою комбинацию. Используем nnoremap (нерекурсивный маппинг только для Normal-режима) и свободную клавишу — не затирай встроенные.
# Безопасно: пробел-лидер под "удалить слово под курсором и вставить из регистра".
# <leader> по умолчанию '\'. daw — delete-a-word, "0p — вставить из нулевого регистра.
:nnoremap <leader>d daw"0p
Добавь нужные аббревиатуры и маппинги в ~/.vimrc, чтобы они подхватывались при каждом запуске. Перестань делать рутину руками.
❗️❗️❗️ Нравится формат? Ставь 👍
👉 Рубрика: #шпаргалка@LinuxSkill
#Linux #Vim #DevOps #SysAdmin #Automation# 1. Неофициальный строгий режим. Падение при первой ошибке,
# обращении к пустой переменной и ошибке внутри конвейера.
set -euo pipefail
# 2. Безопасная очистка мусора. Сработает даже при Ctrl+C (SIGINT).
TMP_DIR=$(mktemp -d)
trap 'rm -rf "$TMP_DIR"' EXIT
# 3. Статусы в конвейере. Обычный $? покажет только последнюю команду.
# PIPESTATUS хранит массив — обращайся ПО ИНДЕКСУ: [0], [1]...
cat /etc/passwd | grep -q missing_user
echo "Статус cat: ${PIPESTATUS[0]}, статус grep: ${PIPESTATUS[1]}"
Работа с переменными без sed и awk
# 4. Значение по умолчанию. Защищает от rm по пустому пути.
# ВАЖНО: при set -u скрипт и так упадёт на пустой TARGET — двойная защита.
rm -rf "${TARGET:-/tmp/fallback}/"*
# 5. Глобальная замена подстроки в памяти.
LOG="error db, error net"
echo "${LOG//error/warning}"
# 6. Косвенная адресация: чтение переменной по имени из другой переменной.
REAL_VAR="SecretKey"
POINTER="REAL_VAR"
echo "${!POINTER}"
# 7. Нативная замена basename и dirname (без вызова внешних утилит).
FILE="/var/log/syslog.gz"
echo "${FILE##*/}" # syslog.gz (срезано всё до последнего слеша)
echo "${FILE%/*}" # /var/log (срезано всё после последнего слеша)
Логика без костылей
# 8. Регулярки нативно (только в [[ ]], регулярку справа НЕ кавычим).
if [[ $1 =~ ^[0-9]+$ ]]; then
echo "Передано число"
fi
# 9. Группа команд в текущем процессе (без subshell) — переменные сохраняются.
[[ -d /app ]] || { echo "Директории нет"; exit 1; }
# 10. Арифметика в стиле C. expr мёртв.
# ОСТОРОЖНО: под set -e постфиксный (( COUNT++ )) возвращает код 1, когда старое
# значение было 0, и убивает скрипт. Используй префиксную форму ++COUNT.
COUNT=5
(( ++COUNT ))
(( REMAINING = 100 - COUNT ))
Работа с файлами и потоками
# 11. Подстановка процессов: вывод команд туда, где ждут файлы.
diff -u <(ls -l /dir1) <(ls -l /dir2)
# 12. Here String: строка на stdin без лишнего echo | grep.
grep "critical" <<< "$LOG_DATA"
# 13. Эталонное построчное чтение: -r не трогает бэкслеши, IFS= хранит пробелы.
while IFS= read -r line; do
echo "Строка: $line"
done < config.txt
# 14. Разбивка строки на переменные с локальной подменой разделителя.
USER_DATA="admin:x:1000"
IFS=":" read -r user pass uid <<< "$USER_DATA"
# 15. Совместное перенаправление stdout и stderr одним оператором.
/opt/scripts/deploy.sh &> /var/log/deploy.log
❗️❗️❗️ Нравится формат? Ставь 👍
👉 Рубрика: #шпаргалка@LinuxSkill
#Linux #Bash #DevOps #Scripting #SysAdmin
# 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 #Bashifconfig давно устарел, а 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
# 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# 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# /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
# 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