🔍 Откуда Linux берет пользователей: загляни в /etc/passwd
👋 Привет, покоритель Linux!
Знаешь, где Linux хранит информацию о пользователях? Правильный ответ —
📂 Что такое /etc/passwd?
Проблема: Системе нужно знать, какие пользователи существуют, какие у них UID, домашние директории и оболочки.
Решение: Файл
Структура записи:
Пример:
Разбор полей:
1. username — имя пользователя
2. x — раньше здесь хранился хеш пароля, теперь он в
3. UID — уникальный идентификатор пользователя (0 = root)
4. GID — идентификатор основной группы
5. comment — комментарий (обычно полное имя)
6. home_directory — путь к домашней директории
7. shell — оболочка для входа (например,
🔎 Как посмотреть содержимое?
🛡️ Почему пароли больше не в /etc/passwd?
Раньше хеши паролей хранились прямо в
Решение: Хеши паролей перенесли в
💡 Полезные команды для работы с пользователями
⚡ Быстрая шпаргалка
✅
✅
✅
✅ UID 0 = root, UID 1-999 = системные пользователи, UID >= 1000 = обычные пользователи
🔗 Полезные ссылки:
Документация: https://man7.org/linux/man-pages/man5/passwd.5.html
#linux #sysadmin #passwd #безопасность #Linux_err24
👋 Привет, покоритель Linux!
Знаешь, где Linux хранит информацию о пользователях? Правильный ответ —
/etc/passwd. Разберём, что это за файл и почему он так важен.📂 Что такое /etc/passwd?
Проблема: Системе нужно знать, какие пользователи существуют, какие у них UID, домашние директории и оболочки.
Решение: Файл
/etc/passwd содержит базовую информацию о каждой локальной учетной записи в системе.Структура записи:
username:x:UID:GID:comment:home_directory:shell
Пример:
root:x:0:0:root:/root:/bin/bash
user1:x:1000:1000:User One:/home/user1:/bin/bash
nginx:x:33:33:nginx:/var/www:/usr/sbin/nologin
Разбор полей:
1. username — имя пользователя
2. x — раньше здесь хранился хеш пароля, теперь он в
/etc/shadow3. UID — уникальный идентификатор пользователя (0 = root)
4. GID — идентификатор основной группы
5. comment — комментарий (обычно полное имя)
6. home_directory — путь к домашней директории
7. shell — оболочка для входа (например,
/bin/bash или /usr/sbin/nologin для системных пользователей)🔎 Как посмотреть содержимое?
# Полный список пользователей
cat /etc/passwd
# Только имена пользователей
cut -d: -f1 /etc/passwd
# Информация о конкретном пользователе
grep "^user1:" /etc/passwd
# Пользователи с оболочкой bash
grep "/bin/bash$" /etc/passwd
🛡️ Почему пароли больше не в /etc/passwd?
Раньше хеши паролей хранились прямо в
/etc/passwd, но этот файл доступен всем пользователям для чтения. Это создавало угрозу безопасности.Решение: Хеши паролей перенесли в
/etc/shadow, который доступен только root.💡 Полезные команды для работы с пользователями
# Добавить пользователя
useradd newuser
# Изменить оболочку пользователя
usermod -s /bin/zsh user1
# Удалить пользователя
userdel user1
# Посмотреть информацию о текущем пользователе
id
# Посмотреть всех пользователей с UID >= 1000 (обычные пользователи)
awk -F: '$3 >= 1000 {print $1}' /etc/passwd
⚡ Быстрая шпаргалка
✅
/etc/passwd — основной файл учетных записей ✅
/etc/shadow — хранит хеши паролей (только root) ✅
/etc/group — информация о группах ✅ UID 0 = root, UID 1-999 = системные пользователи, UID >= 1000 = обычные пользователи
🔗 Полезные ссылки:
Документация: https://man7.org/linux/man-pages/man5/passwd.5.html
#linux #sysadmin #passwd #безопасность #Linux_err24
👍12🔥1
Media is too big
VIEW IN TELEGRAM
⚠️ Секретная команда tc: 3 трюка, чтобы сломать сеть и проверить ваш микросервис
Привет, опытный инженер! 👋
Когда твоя система начинает «тормозить», сетевые инженеры часто используют
Смотри видео и сохраняй основные команды для своей тестовой лаборатории.
🌐 Источник: Новая образовательная система
#Linux #Netem #DevOps #CLI #Сеть #qdisc
Привет, опытный инженер! 👋
Когда твоя система начинает «тормозить», сетевые инженеры часто используют
ping или traceroute для базовой диагностики. Но что, если тебе нужно не просто *найти* проблему, а активно симулировать её для проверки отказоустойчивости приложения или сетевого оборудования?Смотри видео и сохраняй основные команды для своей тестовой лаборатории.
🌐 Источник: Новая образовательная система
#Linux #Netem #DevOps #CLI #Сеть #qdisc
👍6
Какой оператор должен быть использован внутри конструкции [ ] (синонима команды test) для сравнения двух целых чисел на неравенство (N1 не равно N2)?
Anonymous Quiz
51%
!=
9%
~=
7%
-lt
33%
-ne
🎉 Gradelift v1.1 — Обновление!
Открыл → Начал → Прокачался! 🚀
Что нового:
✨ Чистый дизайн — убрали всё лишнее
⚡ 1500 вопросов сразу — никаких режимов
🕒 Без таймера — свернул и вернулся когда угодно
🎯 Видимый прогресс — streak, звёзды, jackpot
👉 Запустить тест @gradeliftbot
Открыл → Начал → Прокачался! 🚀
Что нового:
✨ Чистый дизайн — убрали всё лишнее
⚡ 1500 вопросов сразу — никаких режимов
🕒 Без таймера — свернул и вернулся когда угодно
🎯 Видимый прогресс — streak, звёзды, jackpot
👉 Запустить тест @gradeliftbot
👍6👎1
Какая команда используется для планирования выполнения задания в абсолютно определенное время в будущем, но только один раз?
Anonymous Quiz
44%
crontab -e
36%
at
15%
anacron
4%
batch
👍4🔥1
🚨 7 смертельных ошибок CLI, которые уничтожат твой Linux
Приветствую, коллега по скриптам!
Работа под
1.
2. Fork Bomb (
3.
4.
5.
6.
7. Использование R-утилит (
#Linux #CLI #Безопасность #Ошибки #Сисадмин
Приветствую, коллега по скриптам!
Работа под
root требует максимальной осторожности. Вот главные "самострелы", которые могут привести к краху системы:1.
rm -rf /: Безоговорочное уничтожение всей файловой системы.2. Fork Bomb (
:(){ :|:& };:): Бесконечное порождение процессов, исчерпывающее системные ресурсы.3.
dd: Неправильное указание if и of (вход/выход) уничтожит диск.4.
rm $VAR: Неэкранированная переменная может привести к стиранию лишнего.5.
.:$PATH: Добавление текущего каталога (.) создает лазейку для троянских программ.6.
chmod -R 777 /: Некорректная установка прав доступа на корневую файловую систему. Неправильное использование chmod -R (например, 555 или 777) на корневом каталоге (/) может разрушить файловую систему и сделать систему непригодной для использования.7. Использование R-утилит (
rlogin, rsh, rcp): Эти утилиты небезопасны и передают данные в открытом виде. Их следует удалить из системы и использовать ssh в качестве замены.#Linux #CLI #Безопасность #Ошибки #Сисадмин
👍9
🗓 3 декабря в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Инфраструктурная платформа на основе Kubernetes».
Программа вебинара:
В результате вебинара:
- Поймёте, как с помощью CRD и операторов расширять возможности Kubernetes.
- Научитесь автоматизировать управление пользовательскими ресурсами и упрощать поддержку инфраструктуры.
- Получите базу для создания собственных операторов и интеграции их в CI/CD.
🔗 Ссылка на регистрацию: https://otus.pw/OSZG/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
👎1🔥1
⚠️ Эта команда Docker даёт хакеру права root на хосте
Привет, цифровой архитектор!
Флаг
Используйте принцип минимальных привилегий (least privilege), отключая ненужные возможности ядра (capabilities).
1. Почему
Запуск контейнера в привилегированном режиме позволяет ему смонтировать корневую файловую систему хоста или получить уровень контроля, аналогичный процессам хоста.
2. Принцип минимальных привилегий (Least Privilege)
Если контейнеру не нужны все возможности
3. Запуск от имени непривилегированного пользователя
Если приложение не требует привилегий
💡 Вывод:
Флаг
#DevOps #Docker #Безопасность #root #CLI #Privileges
Привет, цифровой архитектор!
Флаг
--privileged в Docker — это прямая угроза безопасности. Он даёт контейнеру доступ ко всем устройствам хоста и может обеспечить злоумышленнику права root.Используйте принцип минимальных привилегий (least privilege), отключая ненужные возможности ядра (capabilities).
1. Почему
--privileged — это опасно?Запуск контейнера в привилегированном режиме позволяет ему смонтировать корневую файловую систему хоста или получить уровень контроля, аналогичный процессам хоста.
# Опасная команда: получает полный доступ к хост-системе
docker run --rm -v /:/host -t -i debian bash
root@e51ae86c5f7b:/# cd /host
root@e51ae86c5f7b:/host# ls bin dev home
# Атакующий видит корневую ФС хоста, включая /bin, /dev, /etc, /root.
2. Принцип минимальных привилегий (Least Privilege)
Если контейнеру не нужны все возможности
root (которые являются комбинацией 40 отдельных CAP_ возможностей Linux), их следует отключить. Docker по умолчанию и так удаляет многие возможности.# Сброс всех возможностей и добавление только необходимых
# CAP_NET_BIND_SERVICE нужна для привязки к портам ниже 1024
docker run --cap-drop all --cap-add NET_BIND_SERVICE alpine:latest sh
# Пример удаления опасных возможностей SUID/SGID
docker run -it --rm --cap-drop SETUID --cap-drop SETGID ...
# Дополнительное ограничение: запрет на получение новых привилегий
docker run --security-opt=no-new-privileges ubuntu bash
3. Запуск от имени непривилегированного пользователя
Если приложение не требует привилегий
root, оно не должно от него запускаться. Это предотвращает повышение привилегий (privilege escalation) в случае взлома.# В Dockerfile: переключаем пользователя
RUN groupadd -r app_grp && useradd -r -g app_grp app
USER app
💡 Вывод:
Флаг
--privileged следует избегать. Используй --cap-drop и USER в Dockerfile, чтобы контейнер не получил прав root на хосте, даже если его взломают.#DevOps #Docker #Безопасность #root #CLI #Privileges
👍7
🔑 Hardening: 4 ключевых правила iptables для любого сервера
Привет, хакер безопасности!
У тебя открыт лишний порт? Базовый принцип — запрещать всё. Сначала установи политику
Вывод: Эти четыре команды — основа для любого безопасного сервера.
#Безопасность #iptables #CLI #Hardening
Привет, хакер безопасности!
У тебя открыт лишний порт? Базовый принцип — запрещать всё. Сначала установи политику
DROP, затем разреши необходимое.# 1. Запрещаем весь входящий трафик по умолчанию
iptables -P INPUT DROP
# 2. Разрешаем внутренний трафик (loopback)
iptables -A INPUT -i lo -j ACCEPT
# 3. Разрешаем ответы на наши запросы (stateful firewall)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 4. Открываем SSH для управления (TCP порт 22)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Теперь сохраняем правила, чтобы они пережили перезагрузку
service iptables save
Вывод: Эти четыре команды — основа для любого безопасного сервера.
#Безопасность #iptables #CLI #Hardening
👍3👎2
📘 Энциклопедия Docker: 10 лучших практик для production
Привет, цифровой архитектор!
У тебя нет времени искать тонкости настройки Docker?
Собрал для тебя 10 ключевых команд и приёмов из архитектурных гайдов, которые обязательно нужно сохранить для работы в production.
1. Безопасность: Непривилегированный пользователь
Никогда не запускай контейнеры от имени
2. Ограничение возможностей ядра (Capabilities)
Docker по умолчанию включает много возможностей, но лучше их отключить и добавить только необходимые.
3. Оптимизация Dockerfile: Слияние RUN
Каждая инструкция
4. Управление томами (Volumes)
Для сохранения постоянных данных используй тома (
5. Очистка системы
Для избежания беспорядочного роста образов и контейнеров (
6. Режимы работы с сетью
Docker по умолчанию использует режим
7. Работа с образами и тегами
Для контроля версий всегда используй конкретные теги, а не
8. Использование
Не запускай SSH-демон внутри контейнера. Для отладки используй
9. Настройка ресурсов (cgroups)
Ограничивай ресурсы (CPU, Memory), чтобы избежать DoS-атак или утечек памяти.
10. Постоянный контроль состояния
Для избежания проблем, связанных с перезапуском и изменяемостью.
#Docker #DevOps #Security #CLI #Hardening
Привет, цифровой архитектор!
У тебя нет времени искать тонкости настройки Docker?
Собрал для тебя 10 ключевых команд и приёмов из архитектурных гайдов, которые обязательно нужно сохранить для работы в production.
1. Безопасность: Непривилегированный пользователь
Никогда не запускай контейнеры от имени
root. Атакующий может получить права root на хосте.# В Dockerfile создаем группу и непривилегированного пользователя 'app'
RUN groupadd -r app_grp && useradd -r -g app_grp app
USER app # Всегда переключаемся на непривилегированного пользователя
2. Ограничение возможностей ядра (Capabilities)
Docker по умолчанию включает много возможностей, но лучше их отключить и добавить только необходимые.
# Сбрасываем все Capabilities (CAP_DROP ALL)
docker run -ti --cap-drop ALL debian /bin/bash
# Добавляем только возможность привязки к низким портам (<1024)
docker run --cap-drop all --cap-add CAP_NET_BIND_SERVICE alpine:latest sh
# Запрет на повышение привилегий (hardening)
docker run --security-opt=no-new-privileges ubuntu bash
3. Оптимизация Dockerfile: Слияние RUN
Каждая инструкция
RUN создает новый уровень (layer), увеличивая размер образа. Объединяйте команды с && для минимизации слоев.# Плохо: 3 отдельных слоя
RUN apk update
RUN apk add nodejs nodejs-npm
RUN mkdir -p /app/public
# Хорошо: одна инструкция, один слой
RUN apk update && \
apk add nodejs nodejs-npm && \
mkdir -p /app/public /app/server
4. Управление томами (Volumes)
Для сохранения постоянных данных используй тома (
VOLUME).# Создание тома на хосте (local driver по умолчанию)
docker volume create my_data_vol
# Просмотр информации о томе (включая путь на хосте)
docker volume inspect my_data_vol
# Удаление всех неиспользуемых томов (используй с осторожностью!)
docker volume prune
5. Очистка системы
Для избежания беспорядочного роста образов и контейнеров (
image sprawl).# Удаление остановленных контейнеров
docker rm $(docker ps -aq -f status=exited)
# Удаление неиспользуемых (висячих) образов
docker rmi $(docker images -q -f dangling=true)
# Полная очистка: контейнеры, образы, сети, тома
docker system prune -a
6. Режимы работы с сетью
Docker по умолчанию использует режим
bridge (мост), который изолирует контейнеры в частной сети.# Просмотр активных сетевых режимов (по умолчанию: bridge, none, host)
docker network ls
# Запуск контейнера в режиме хоста (убирает изоляцию, но дает скорость)
docker run --net=host -d my_app
# Создание изолированной сети, чтобы контейнеры видели друг друга по имени
docker network create my_custom_net
docker run --network my_custom_net --name redis_db redis
7. Работа с образами и тегами
Для контроля версий всегда используй конкретные теги, а не
latest.# Получение образа с конкретным тегом
docker pull debian:jessie
# Построение образа с явным указанием тега
docker build -t my_app:v1.2 .
# Использование дайджеста для абсолютной гарантии версии
FROM redis@sha256:3479bbcab384fa343b52743b933661335448f8166203688006...
8. Использование
docker exec вместо SSH-демоновНе запускай SSH-демон внутри контейнера. Для отладки используй
docker exec.# Запуск bash внутри активного контейнера (интерактивно)
docker exec -it <CONTAINER_ID> /bin/bash
# Запуск команды внутри контейнера без входа в оболочку
docker exec -it my_web_container ls -l /var/log
9. Настройка ресурсов (cgroups)
Ограничивай ресурсы (CPU, Memory), чтобы избежать DoS-атак или утечек памяти.
# Ограничение памяти (128 Мб)
docker run -it --rm -m 128m my_app
# Ограничение использования CPU (только ядра 0 и 1)
docker run -it --rm --cpuset=0,1 -c 2 my_app
10. Постоянный контроль состояния
Для избежания проблем, связанных с перезапуском и изменяемостью.
# Просмотр запущенных контейнеров
docker ps
# Просмотр всех контейнеров (включая остановленные)
docker ps -a
# Просмотр подробной конфигурации контейнера (JSON)
docker inspect <CONTAINER_ID>
# Получение журналов (STDOUT/STDERR)
docker logs <CONTAINER_ID>
#Docker #DevOps #Security #CLI #Hardening
👍10🔥1
🎥 Вебинар по Linux: Основы LVM: гибкое управление дисковым пространством в Linux
Разбираем на практике, как работает LVM и зачем системным администраторам нужно уметь управлять томами в Linux.
🧠 На вебинаре вы узнаете:
- Как устроена работа с дисками и разделами в Linux.
- Какие ограничения есть у классической таблицы разделов.
- Что такое LVM и какие преимущества оно даёт при управлении хранилищем.
- Как использовать LVM для гибкого распределения пространства на дисках.
💪 В результате вебинара вы:
- Разберётесь в базовых понятиях LVM: Physical Volume, Volume Group, Logical Volume.
- Поймёте, как добавлять и перераспределять дисковое пространство без простоев.
- Сможете самостоятельно создать и управлять логическими томами.
- Узнаете, как LVM помогает решать повседневные задачи Linux-администратора.
🎁 Все участники вебинара получат специальные условия на полное обучение курса "Administrator Linux. Professional"
👉 Для участия зарегистрируйтесь: https://otus.pw/QbF9/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Разбираем на практике, как работает LVM и зачем системным администраторам нужно уметь управлять томами в Linux.
🧠 На вебинаре вы узнаете:
- Как устроена работа с дисками и разделами в Linux.
- Какие ограничения есть у классической таблицы разделов.
- Что такое LVM и какие преимущества оно даёт при управлении хранилищем.
- Как использовать LVM для гибкого распределения пространства на дисках.
💪 В результате вебинара вы:
- Разберётесь в базовых понятиях LVM: Physical Volume, Volume Group, Logical Volume.
- Поймёте, как добавлять и перераспределять дисковое пространство без простоев.
- Сможете самостоятельно создать и управлять логическими томами.
- Узнаете, как LVM помогает решать повседневные задачи Linux-администратора.
🎁 Все участники вебинара получат специальные условия на полное обучение курса "Administrator Linux. Professional"
👉 Для участия зарегистрируйтесь: https://otus.pw/QbF9/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
👍4👎1
🔥 Собери свой
Привет, системный траблшутер!
Если у тебя что-то "легло" или тормозит, нужно моментально получить срез состояния системы. Ты не хочешь запускать 10 разных команд.
Объедини ключевые команды (
🐧 Скрипт
Вывод: Ты можешь использовать эту заготовку как основу, чтобы быстро диагностировать проблемы с CPU, памятью или диском, а затем добавить
#Мониторинг #Bash #CLI #Скрипт #uptime #free
top: скрипт для моментальной диагностики LinuxПривет, системный траблшутер!
Если у тебя что-то "легло" или тормозит, нужно моментально получить срез состояния системы. Ты не хочешь запускать 10 разных команд.
Объедини ключевые команды (
uptime, free, ps) в одну функцию, которая быстро покажет тебе, где узкое место.🐧 Скрипт
check_status.sh#!/bin/bash
# Используем hostname для получения имени сервера
SERVER_NAME=$(hostname)
# Создание функции, чтобы избежать повторов кода
function get_quick_status() {
echo "--- СТАТУС СЕРВЕРА: ${SERVER_NAME} ---"
# 1. Аптайм и Load Average
echo "Load Average (1, 5, 15 мин) и Uptime:"
uptime
# Load Average > 1.0 часто указывает на проблемы
# 2. Использование памяти (в удобном формате)
echo "Использование RAM и SWAP (free -h):"
free -h
# free -h выводит информацию о памяти и swap
# 3. Использование корневого раздела
echo "Использование диска (df -h /):"
df -h / | tail -n 1 | awk '{print "Used: " $3 ", Avail: " $4 }'
# df показывает использование файловой системы
# 4. Топ-5 активных процессов по CPU
echo "Топ-5 активных процессов (PID, %CPU, COMMAND):"
ps -e --no-header -o pid,%cpu,comm | sort -nr -k 2 | head -5
# ps -e отображает информацию о текущих запущенных процессах
}
# Запускаем функцию
get_quick_status
Вывод: Ты можешь использовать эту заготовку как основу, чтобы быстро диагностировать проблемы с CPU, памятью или диском, а затем добавить
vmstat или iostat для глубокого анализа, если это требуется.#Мониторинг #Bash #CLI #Скрипт #uptime #free
👍18
Какая команда, предназначенная для работы с файлами и архивами, выводит содержимое текстового файла на стандартный вывод, но в обратном порядке (т.е. начиная с последней строки)?
Anonymous Quiz
10%
rev
52%
cat -r
7%
sed -n '1!G;h;$p'
31%
tac
👍3🔥2
Администратор ищет файлы, которые были изменены менее 10 минут назад в каталоге /etc. Какая команда find с правильной опцией будет использована?
Anonymous Quiz
43%
find /etc -mtime -10
21%
find /etc -mmin -10
20%
find /etc -atime -10
16%
find /etc -cmin -10
👍6🔥2
🚀 Встречайте новый формат в @Gradeliftbot — Спринт!
Хотите проверить свои знания по Linux быстро и эффективно? Теперь в нашем боте доступен режим "Спринт" — 20 случайных вопросов из базы в 1500+ тестов!
👉 Попробовать @Gradeliftbot
Хотите проверить свои знания по Linux быстро и эффективно? Теперь в нашем боте доступен режим "Спринт" — 20 случайных вопросов из базы в 1500+ тестов!
👉 Попробовать @Gradeliftbot
👎2
Как правильно присвоить значение переменной в Bash?
Anonymous Quiz
25%
var = value
40%
var=value
8%
var := value
27%
set var value
💾 Bash-антигайд: Удаляй tmp-файлы даже после kill -9
Хей, защитник хоста!
Если твой скрипт аварийно завершается, временные файлы (
Чтобы гарантировать удаление, используй ловушку EXIT.
Вывод:
#Bash #Автоматизация #Скрипты #trap #CLI
Хей, защитник хоста!
Если твой скрипт аварийно завершается, временные файлы (
/tmp) остаются.Чтобы гарантировать удаление, используй ловушку EXIT.
#!/bin/bash
# Создай уникальное имя для временного файла
TMP_FILE=$(mktemp)
# 1. Ловушка EXIT (сигнал 0) сработает при ЛЮБОМ выходе
trap "rm -f $TMP_FILE" EXIT
# 2. Здесь идет твой основной код
echo "Лог пишется в $TMP_FILE" >> $TMP_FILE
# 3. Дополнительно можно перехватить SIGINT (2) и SIGTERM (15)
trap "rm -f $TMP_FILE; exit 1" INT TERM
Вывод:
trap...EXIT обеспечивает, что функция очистки выполнится всегда, даже при ошибке.#Bash #Автоматизация #Скрипты #trap #CLI
🔥2
🗓 11 декабря в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «CI/CD на основе GitLab».
На вебинаре разберем:
Кому будет полезно:
- DevOps-лидам, управляющим инфраструктурой и CI/CD.
- Архитекторам, разрабатывающим стратегии инфраструктурной автоматизации.
- Инженерам, внедряющим Terraform в рабочие процессы.
Что вы получите:
- Понимание, Terraform-модули для работы через GitLab.
- Понимание, настройка и оптимизация пайплайнов CI/CD .
- Практические советы по безопасному и эффективному управлению инфраструктурой .
🔗 Ссылка на регистрацию: https://otus.pw/kKbj/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
🔐 Секреты Pro-Docker: 4 хака, которые сделают твои образы в 5 раз меньше
Привет, контейнерный гуру!
Твои Docker-образы слишком большие и могут нести угрозу безопасности?.
Я собрал 4 критически важных приёма для hardening-а и оптимизации, которые должен знать каждый, кто работает с Docker в продакшене.
1. ⚙️ Оптимизация слоёв: Уменьши размер в 71%
Каждая инструкция
За счет перехода на минимальные базовые образы (например, Alpine) и объединения команд ты можешь уменьшить размер образа на 71%.
2. 🛡 Безопасность: Запуск без root и
Никогда не запускай контейнер с флагом
Ограничение возможностей (Capabilities) — ключевой принцип безопасности, так как
3. 💾 Очистка: Удали висячий мусор
Если ты не удаляешь остановленные контейнеры или висячие образы (dangling images), они будут накапливаться и занимать дисковое пространство.
Используй
4. 🧠 Ограничение ресурсов: Защита от DoS-атак
Ограничивай использование ресурсов с помощью cgroups, чтобы взломанный контейнер не смог вызвать отказ в обслуживании (DoS), исчерпав память или CPU хоста.
Вывод: Применение этих практик (минимальные образы, непривилегированные пользователи и ограничения ресурсов) — это не просто оптимизация, это создание надёжной архитектуры, которую ты можешь смело развертывать в production.
#Docker #DevOps #Security #Hardening #Optimization #CLI #Сборник
Привет, контейнерный гуру!
Твои Docker-образы слишком большие и могут нести угрозу безопасности?.
Я собрал 4 критически важных приёма для hardening-а и оптимизации, которые должен знать каждый, кто работает с Docker в продакшене.
1. ⚙️ Оптимизация слоёв: Уменьши размер в 71%
Каждая инструкция
RUN в Dockerfile создает новый уровень (слой), что раздувает конечный размер образа. Чтобы избежать этого, используй оператор && для объединения команд в одну инструкцию RUN.# ПЛОХО: Создаст 3 слоя
RUN apt-get update
RUN apt-get install -y nodejs
RUN rm -rf /var/lib/apt/lists/*
# ХОРОШО: Создаст 1 слой и уменьшит размер образа
FROM alpine:3.12.0
RUN apk update && \
apk add --no-cache nodejs npm && \
rm -rf /var/cache/apk/*
# Используй --no-cache, чтобы не хранить временные файлы
За счет перехода на минимальные базовые образы (например, Alpine) и объединения команд ты можешь уменьшить размер образа на 71%.
2. 🛡 Безопасность: Запуск без root и
CAP_DROPНикогда не запускай контейнер с флагом
--privileged, так как это равносильно получению прав root на хосте, позволяя, например, смонтировать его корневую ФС. Всегда переключайся на непривилегированного пользователя внутри контейнера.# Создаем непривилегированного пользователя 'app'
# Используй инструкцию USER, чтобы избежать root
RUN groupadd -r app_grp && useradd -r -g app_grp app
USER app
# Если нужны только специфические права (например, bind к порту < 1024):
# Сбрось ВСЕ права (--cap-drop all) и добавь только необходимые
docker run --cap-drop ALL --cap-add CAP_NET_BIND_SERVICE alpine sh
Ограничение возможностей (Capabilities) — ключевой принцип безопасности, так как
root в Linux — это коллекция возможностей, и Docker позволяет тебе их выборочно отключить.3. 💾 Очистка: Удали висячий мусор
Если ты не удаляешь остановленные контейнеры или висячие образы (dangling images), они будут накапливаться и занимать дисковое пространство.
# Удаление всех остановленных контейнеров
# docker rm $(docker ps -aq -f status=exited)
docker rm $(docker ps -aq) -f
# Удаление всех висячих (без тегов) образов
docker rmi $(docker images -q -f dangling=true)
# Очистка всего Docker-мусора (образов, сетей, контейнеров)
# Используй с осторожностью, это удалит ВСЁ, что не используется
docker system prune -a
Используй
docker system prune -a для быстрой очистки, но помни, что тома (volumes) не удаляются автоматически и требуют отдельной очистки, если они не используются.4. 🧠 Ограничение ресурсов: Защита от DoS-атак
Ограничивай использование ресурсов с помощью cgroups, чтобы взломанный контейнер не смог вызвать отказ в обслуживании (DoS), исчерпав память или CPU хоста.
# Ограничение памяти (128 МБ)
# -m 128m задает жесткий лимит, предотвращая OOM на хосте
docker run -it --rm -m 128m my_app
# Ограничение использования CPU (на 2 CPU или 50% CPU-времени)
docker run -it --rm --cpus="2" my_app
# или, используя доли CFS:
docker run -d --name load_high -c 512 amouat/stress
Вывод: Применение этих практик (минимальные образы, непривилегированные пользователи и ограничения ресурсов) — это не просто оптимизация, это создание надёжной архитектуры, которую ты можешь смело развертывать в production.
#Docker #DevOps #Security #Hardening #Optimization #CLI #Сборник
👍1
✅
Привет, инженер автоматизации!
Если ты переходишь с
Команда
1. 🔍 Полный статус сервиса
Эта команда показывает, активен ли сервис, его PID, потребление ресурсов (CGroup, Memory, CPU) и последние строки логов.
2. 🚀 Включение и активация (autostart)
3. 💾 Применение новой конфигурации без перезапуска
Если ты изменил конфигурационный файл (например,
4. 📈 Анализ скорости загрузки (Boot Performance)
Если система загружается медленно, эта команда покажет тебе, какие юниты (сервисы) потребляют больше всего времени.
5. 📜 Просмотр всех файлов юнитов
Для DevOps критически важно знать, какие сервисы вообще установлены в системе и в каком они состоянии (включен/выключен).
💡 Вывод
Команда
#DevOps #systemd #systemctl #CLI #Автоматизация
systemctl – 5 команд, которые должен знать каждый DevOps-инженерПривет, инженер автоматизации!
Если ты переходишь с
SysVinit на systemd, тебе нужен надёжный командник для быстрого траблшутинга и управления сервисами.Команда
systemctl — это твой универсальный диспетчер. Вот 5 ключевых функций, которые ты будешь использовать каждый день.1. 🔍 Полный статус сервиса
Эта команда показывает, активен ли сервис, его PID, потребление ресурсов (CGroup, Memory, CPU) и последние строки логов.
# Получить детальную информацию о веб-сервере Nginx
systemctl status nginx.service
# PID, CGroup, Memory, CPU - важные данные для траблшутинга
2. 🚀 Включение и активация (autostart)
systemctl enable создаёт символическую ссылку, чтобы сервис запускался при загрузке системы. Флаг --now сразу запускает его.# Включить автозапуск SSHD при загрузке и немедленно запустить
sudo systemctl enable --now sshd.service
# Проверить, включен ли сервис для автозапуска
systemctl is-enabled sshd.service
3. 💾 Применение новой конфигурации без перезапуска
Если ты изменил конфигурационный файл (например,
/etc/ssh/sshd_config), тебе нужно, чтобы демон перечитал его, не прерывая работу.# Перезагрузка конфигурации systemd, чтобы обнаружить изменения в юнит-файлах
sudo systemctl daemon-reload
# Перезагрузить конфигурацию самого сервиса (без полного restart)
sudo systemctl reload sshd.service
4. 📈 Анализ скорости загрузки (Boot Performance)
Если система загружается медленно, эта команда покажет тебе, какие юниты (сервисы) потребляют больше всего времени.
# Вывести список процессов, отсортированных по времени запуска
systemd-analyze blame
# Посмотреть общее время, потраченное на загрузку ядра и userspace
systemd-analyze time
5. 📜 Просмотр всех файлов юнитов
Для DevOps критически важно знать, какие сервисы вообще установлены в системе и в каком они состоянии (включен/выключен).
# Вывести список всех установленных файлов модулей типа service и их состояние (enabled/disabled/static/masked)
systemctl list-unit-files --type=service
💡 Вывод
Команда
systemctl — это центральный инструмент для твоей работы в Linux. Используя status для детальной проверки, reload для безопасных обновлений и systemd-analyze blame для диагностики, ты можешь эффективно управлять production-средой.#DevOps #systemd #systemctl #CLI #Автоматизация
👍13