Capability
В Docker capabilities - это механизм в Linux, который управляет привилегиями процессов. В контексте Docker они позволяют настраивать права доступа контейнеров к различным системным ресурсам.
Capabilities позволяют ограничивать привилегии, предоставляемые контейнеру, чтобы повысить безопасность. Docker позволяет управлять capabilities через флаги при запуске контейнера. Например, вы можете убрать определенные capabilities, чтобы уменьшить доступ контейнера к опасным системным ресурсам.
Добавление capability при запуске контейнера
Команда docker run
позволяет использовать опцию --cap-add
, чтобы добавить определенные возможности (capabilities) в контейнер Docker.
docker run --cap-add=<capabilities> <имя_образа>
Удаление capability при запуске контейнера
Предположим, вы хотите запустить контейнер без возможности монтировать файловые системы (CAP_SYS_ADMIN)
.
docker run --cap-drop=SYS_ADMIN <имя_образа>
Задание нескольких capabilities
Можно также задать несколько capabilities с помощью параметра --cap-add
или --cap-drop
в одной команде запуска контейнера.
docker run --cap-add=NET_ADMIN --cap-drop=SYS_ADMIN <имя_образа>
Вот некоторые примеры переменных --cap-add, --cap-drop
с их объяснениями:
SYS_ADMIN
: Добавляет возможность для контейнера выполнять различные системные административные задачи, такие как монтирование файловых систем, настройка сетевых интерфейсов и т.д.
- Пример:
docker run --cap-add=SYS_ADMIN myapp:latest
-
NET_ADMIN
: Предоставляет контейнеру возможность управлять сетевыми настройками и настраивать сетевые интерфейсы. Например, контейнер с этой возможностью сможет изменять маршрутизацию, настраивать межсетевые экраны (firewalls) и т.д.
- Пример:
docker run --cap-add=NET_ADMIN myapp:latest
-
SYS_PTRACE
: Позволяет контейнеру использовать системный вызов ptrace, который позволяет отслеживать и изменять поведение других процессов в системе. Это может быть полезно для отладки или анализа процессов внутри контейнера.
- Пример:
docker run --cap-add=SYS_PTRACE myapp:latest
-
SYS_MODULE
: Дает возможность загружать или выгружать ядерные модули в контейнере. Это может быть полезно для выполнения операций, связанных с ядерными модулями.
- Пример:
docker run --cap-add=SYS_MODULE myapp:latest
-
SYS_RAWIO
: Разрешает контейнеру выполнять операции с прямым доступом к устройствам ввода-вывода. Например, это может быть использовано для работы с устройствами USB, считывания и записи на жесткие диски и т.д.
- Пример:
docker run --cap-add=SYS_RAWIO myapp:latest
-
SYS_TIME
: Дает контейнеру возможность изменять системное время и настраивать часовые пояса. Это может быть полезно для приложений, требующих точной синхронизации времени или настройки часового пояса.
- Пример:
docker run --cap-add=SYS_TIME myapp:latest
-
SYS_NICE
: Позволяет контейнеру изменять приоритеты процессов с использованием системного вызова nice или setpriority.
- Пример:
docker run --cap-add=SYS_NICE myapp:latest
-
SYS_RESOURCE
: Дает возможность контейнеру изменять ограничения ресурсов системы, такие как максимальное количество открытых файлов, лимиты процессорного времени и т.д.
- Пример:
docker run --cap-add=SYS_RESOURCE myapp:latest
-
IPC_LOCK
: Разрешает контейнеру использовать вызовы системы для блокировки и разблокировки разделяемой памяти. Это может быть полезно для некоторых приложений, которые требуют эксклюзивного доступа к разделяемой памяти.
- Пример:
docker run --cap-add=IPC_LOCK myapp:latest
-
SYSLOG
: Позволяет контейнеру записывать сообщения в системный журнал (syslog) хостовой системы.
- Пример:
docker run --cap-add=SYSLOG myapp:latest
Важно отметить, что использование опции --cap-add предоставляет контейнеру дополнительные привилегии и может повлиять на безопасность системы. Поэтому рекомендуется быть осторожным и использовать только необходимые возможности в соответствии с требованиями вашего приложения.