Что такое capabilities в Linux?

«Что такое capabilities в Linux?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Capabilities (возможности) в Linux — это механизм гранулярного разделения привилегий суперпользователя (root). Вместо того чтобы давать процессу полные права root через setuid или sudo, можно назначить ему только конкретные возможности, необходимые для работы. Это ключевой принцип для соблюдения принципа наименьших привилегий (Principle of Least Privilege) в контейнеризированных средах и безопасной настройки сервисов.

Практическое применение в DevOps:

  • Запуск контейнеров Docker: Docker по умолчанию удаляет многие capabilities у контейнеров для безопасности. Иногда для работы специфичных функций (например, настройки сети) их нужно добавить явно.
    # В Dockerfile или docker run
    docker run --cap-add=NET_ADMIN my-network-tool
  • Настройка системных демонов: Можно запустить сервис (например, веб-сервер для бинда на порт 80) без полного root, назначив только CAP_NET_BIND_SERVICE.
    sudo setcap 'cap_net_bind_service=+ep' /usr/sbin/nginx

Важные capabilities для инфраструктуры:

  • CAP_NET_ADMIN — управление сетевыми интерфейсами, таблицами маршрутизации (нужно для сетевых CNI-плагинов в Kubernetes).
  • CAP_SYS_ADMIN — широкий набор административных действий (часто требуется для работы некоторых инструментов мониторинга или файловых систем, но представляет риск).
  • CAP_DAC_OVERRIDE — обход проверок прав доступа к файлам.
  • CAP_SYS_PTRACE — отладка процессов (используется системными трассировщиками).

Работа с capabilities:

# Просмотр capabilities процесса
cat /proc/<PID>/status | grep -i cap

# Просмотр capabilities исполняемого файла
getcap /path/to/binary

# Назначение capability файлу
sudo setcap cap_net_bind_service+ep /usr/local/bin/myapp

# Удаление всех capabilities
sudo setcap -r /usr/local/bin/myapp

Важно: Неправильное назначение capabilities, особенно CAP_SYS_ADMIN, может серьезно снизить безопасность системы.