diff --git a/content/posts/20251122 Portainer install/index.md b/content/posts/20251122 Portainer install/index.md new file mode 100644 index 0000000..3a15058 --- /dev/null +++ b/content/posts/20251122 Portainer install/index.md @@ -0,0 +1,67 @@ +--- +title: "Portainer: развертывание и решение ошибок подключения к Docker" +date: 2025-11-22T19:00:00+03:00 +draft: false +tags: ["portainer", "docker", "selfhosting"] +categories: ["selfhosting"] +--- + +Поделюсь опытом настройки Portainer — удобного веб-интерфейса для управления Docker. Столкнулся с типичными ошибками и нашел рабочие решения. + +## Типичные проблемы при запуске + +```shell + “The environment named Docker is unreachable” + + “client version 1.42 is too old. Minimum supported API version is 1.44” +``` + +## Решения ошибки + +### Проверяем права доступа к Docker socket + +```shell + ls -l /var/run/docker.sock + # Если не хватает прав: + sudo chmod 666 /var/run/docker.sock + # ИЛИ добавляем пользователя в группу docker + sudo usermod -aG docker $USER + # Перезагружаем сессию + newgrp docker +``` + +### Основная проблема + +Основная проблема — несовместимость новых версий Docker Engine 29+ с некоторыми версиями Portainer. + +Рабочий docker-compose.yml: + +```shell +services: + portainer: + image: portainer/portainer-ce:2.20.2 # Проверенная версия + container_name: portainer + restart: unless-stopped + volumes: + - /var/run/docker.sock:/var/run/docker.sock:ro + - ./portainer-data:/data + ports: + - "9080:9080" + - "9443:9443" +``` + +## Важные моменты + +Версия 2.20.2 стабильно работает с Docker 29+ +Логи можно посмотреть: ```shell docker logs portainer``` + +Проверка работоспособности: + +```shell +docker ps +docker logs portainer +``` + +В браузере: + +Мне пришлось поменять версию чтобы Portainer заработал. diff --git a/content/posts/20260215 setuid bits/index.md b/content/posts/20260215 setuid bits/index.md new file mode 100644 index 0000000..7bb70ef --- /dev/null +++ b/content/posts/20260215 setuid bits/index.md @@ -0,0 +1,138 @@ +--- +title: "Что такое setuid биты?" +date: 2026-02-15T21:32:16+03:00 +draft: false +tags: ["linux"] +categories: ["linux"] +--- + + +**Setuid** (Set User ID) — это специальный атрибут прав доступа в Linux/Unix, который позволяет пользователю выполнять программу **с правами владельца этой программы**, а не с правами самого пользователя. + +### **Простая аналогия:** +Представьте, что в офисе есть сейф, который может открывать только начальник. Обычным сотрудникам вход запрещен. Но начальник дает секретарю особый пропуск (setuid-бит), с помощью которого секретарь может открыть сейф, хотя сам не является начальником. + +## **Для чего нужны setuid биты?** + +### **Основные случаи использования:** + +1. **Смена пароля (`/usr/bin/passwd`)** + ```bash + ls -la /usr/bin/passwd + -rwsr-xr-x 1 root root 68208 апр 8 10:15 /usr/bin/passwd + ``` + - Обычный пользователь должен менять свой пароль + - Пароли хранятся в защищенном файле `/etc/shadow`, доступном только root + - Setuid позволяет `passwd` временно получить права root для записи в `/etc/shadow` + +2. **Команда `sudo` (`/usr/bin/sudo`)** + ```bash + ls -la /usr/bin/sudo + -rwsr-xr-x 1 root root 232416 фев 9 2024 /usr/bin/sudo + ``` + - Позволяет выполнять команды от имени root + - Без setuid sudo не сможет повысить привилегии + +3. **Другие примеры:** + - `ping` — требует root для создания сетевых сокетов + - `su` — переключение на другого пользователя + - `mount/umount` — монтирование файловых систем + +## **Как распознать setuid биты?** + +### **Визуальное обозначение:** +```bash +# Обычный файл +-rwxr-xr-x # нет setuid + +# Файл с setuid (s вместо x в позиции владельца) +-rwsr-xr-x # есть setuid + +# Файл с setgid (s вместо x в позиции группы) +-rwxr-sr-x # есть setgid +``` +Буква **`s`** в позиции execute (x) означает, что установлен setuid/setgid бит. + +### **Как просмотреть все файлы с setuid:** + +1. **Поиск по всей системе:** + ```bash + sudo find / -type f -perm -4000 -ls 2>/dev/null + ``` + +2. **Только в стандартных директориях:** + ```bash + sudo find /usr/bin /usr/sbin /bin /sbin -type f -perm -4000 -ls + ``` + +3. **С подробной информацией:** + ```bash + # С владельцем и правами + sudo find /usr -type f -perm -4000 -exec ls -la {} \; 2>/dev/null + + # Или более компактно + sudo find /usr/bin -type f -perm -4000 | xargs ls -la + ``` + +4. **Числовое представление:** + ```bash + stat /usr/bin/sudo | grep Access + ``` + Setuid бит = **4000** в восьмеричной системе (4 = setuid, 2 = setgid, 1 = sticky bit) + +## **Как установить/убрать setuid бит:** + +### **Символический способ:** +```bash +# Установить setuid +sudo chmod u+s /path/to/file + +# Убрать setuid +sudo chmod u-s /path/to/file +``` + +### **Числовой способ:** +```bash +# Установить (4755 = setuid + 755 права) +sudo chmod 4755 /path/to/file + +# Убрать (755 = обычные права) +sudo chmod 755 /path/to/file +``` + +## **Почему это важно для безопасности?** + +### **Риски:** +1. **Вредоносные программы** могут использовать setuid для получения root-доступа +2. **Ошибки в setuid-программах** — частая причина взломов +3. **Лишние setuid биты** расширяют поверхность атаки + +### **Аудит безопасности:** +```bash +# Найти все setuid файлы для проверки +sudo find / -type f -perm -4000 -ls 2>/dev/null | sort + +# Сравнить с "чистой" системой +# Неожиданные setuid файлы должны настораживать +``` + +## **Практический пример из моей практики:** +Я где-то ошибся и сделал своего пользвоателя владельцем /usr/, слом судо и пока пытался починить выполнил `find /usr -type d -exec chmod 755 {} \;`, это не затронуло файлы. Но когда следом сделал: +```bash +sudo find /usr -type f -exec chmod 644 {} \; +``` +Эта команда **сбросила setuid биты** на всех файлах, включая `sudo`, `passwd` и другие. Поэтому `sudo` опять перестал работать. + +**Правильно было бы:** +```bash +# Сначала сохранить список setuid файлов +sudo find /usr -type f -perm -4000 > /tmp/setuid_backup.txt + +# Потом менять права +sudo find /usr -type f -exec chmod 644 {} \; + +# И восстановить setuid биты из сохраненного списка +while read file; do + sudo chmod 4755 "$file" +done < /tmp/setuid_backup.txt +``` \ No newline at end of file