Add new post about setuid bits
This commit is contained in:
@@ -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
|
||||||
|
```
|
||||||
|
|
||||||
|
В браузере: <https://сервер:9443>
|
||||||
|
|
||||||
|
Мне пришлось поменять версию чтобы Portainer заработал.
|
||||||
@@ -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
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user