libcap
Библиотека для работы с возможностями (capabilities) Linux, которая предоставляет интерфейс для управления привилегиями процессов на уровне ядра. Библиотека позволяет работать с механизмом capabilities, который разделяет привилегии суперпользователя на отдельные права, обеспечивая более тонкий контроль безопасности и реализуя принцип наименьших привилегий.
Особенности
- предоставляет API для работы с Linux capabilities;
- позволяет получать, устанавливать и изменять capabilities процессов и файлов;
- поддерживает как POSIX.1e (устаревший), так и современный Linux-специфичный API;
- включает утилиты командной строки для управления capabilities.
Основные компоненты
libcap состоит из библиотеки времени выполнения и набора утилит командной строки для работы с capabilities (подробнее с документацией можно ознакомиться здесь).
Управление capabilities процессов
Библиотека предоставляет функции для получения и установки capabilities текущего процесса или других процессов. Это позволяет программам запрашивать только необходимые привилегии вместо работы с полными правами root.
Основные функции для работы с процессами:
cap_get_proc()— получение текущих capabilities процесса;cap_set_proc()— установка capabilities для текущего процесса;cap_get_pid()— получение capabilities указанного процесса (требует прав);cap_set_flag(),cap_clear()— манипуляции с наборами capabilities (effective, inheritable, permitted).
Работа с файловыми capabilities
Начиная с ядра Linux 2.6.24, исполняемые файлы могут иметь связанные capabilities, которые наследуются процессом при запуске. Libcap позволяет читать и устанавливать эти файловые capabilities.
Функции для работы с файловыми capabilities:
cap_get_file()— чтение capabilities файла;cap_set_file()— установка capabilities файла (требует CAP_SETFCAP);cap_from_text(),cap_to_text()— преобразование между текстовым представлением и внутренним форматом;- Поддержка extended attributes (xattrs) для хранения capabilities файлов.
Наборы capabilities и их состояния
Linux разделяет capabilities на три набора: эффективные (effective), разрешенные (permitted) и наследуемые (inheritable). Libcap предоставляет полный набор функций для работы с каждым из этих наборов.
Функции для работы с наборами capabilities:
cap_init()— создание пустого набора capabilities;cap_dup()— дублирование набора capabilities;cap_clear()— очистка набора (все capabilities становятся выключенными);cap_set_flag()— установка или сброс конкретной capability в наборе;cap_get_flag()— проверка состояния конкретной capability в наборе;cap_fill()— заполнение набора всеми возможными capabilities.
Текстовое представление и парсинг
Libcap поддерживает текстовое представление capabilities, что удобно для конфигурации, логирования и отладки. Библиотека предоставляет функции для преобразования между внутренним представлением и читаемым текстовым форматом.
Функции преобразования:
cap_from_text()— преобразование строки в набор capabilities;cap_to_text()— преобразование набора capabilities в строку;cap_from_name(),cap_to_name()— преобразование между именем capability и ее числовым значением;- Поддержка компактного и подробного текстового формата.
Управление bounding set
Bounding set — это набор capabilities, которые могут быть получены процессом. Libcap предоставляет функции для работы с bounding set, что позволяет дополнительно ограничивать доступные процессу capabilities.
Функции для bounding set:
cap_get_bound()— получение текущего bounding set;cap_drop_bound()— удаление capability из bounding set;- Работа с bounding set через файловую систему /proc.
Securebits и флаги наследования
Libcap поддерживает работу с securebits — флагами, которые управляют поведением наследования capabilities. Эти флаги позволяют тонко настраивать, как capabilities передаются между процессами.
Функции для securebits:
cap_get_secbits()— получение текущих securebits;cap_set_secbits()— установка securebits;- Управление флагами наследования (SECBIT_KEEP_CAPS, SECBIT_NO_SETUID_FIXUP и др.).