Как управлять файловыми возможностями Linux
На этой странице
- Общие возможности
- Необходимые инструменты
- либкап
- Установка
- Использование
- Установка
- Использование
Традиционно процесс Linux бывает либо привилегированным (работающим от имени пользователя root), либо непривилегированным. Привилегированные процессы не подлежат проверке разрешений ядра и, таким образом, имеют полную власть над системой. Возможность — это отдельная и независимая привилегия, которая может использоваться процессом для обхода определенных проверок разрешений. Возможности были впервые представлены в Linux 2.2, а в более поздних версиях было добавлено еще несколько. Обычно они устанавливаются для исполняемых файлов и автоматически предоставляются процессу при выполнении файла с возможностью. Возможности по существу делят власть пользователя root на отдельные привилегии, что повышает безопасность, ограничивая доступ, который злоумышленник может получить, используя службу или злоупотребляя ей.
В этом руководстве будут представлены некоторые часто используемые возможности и показано, как их можно просмотреть и изменить.
Общие возможности
Ядро Linux реализует множество возможностей. Некоторые из них:
- CAP_SYS_ADMIN: позволяет выполнять широкий спектр операций. Этой возможности следует избегать в пользу более конкретных возможностей.
- CAP_CHOWN: внесение изменений в идентификатор пользователя и идентификатор группы файлов.
- CAP_DAC_READ_SEARCH: пропустить чтение файла и чтение/выполнение каталога. Программа с этой возможностью может быть использована для чтения любого файла в системе.
- CAP_DAC_OVERRIDE: переопределить DAC (дискреционный контроль доступа), т. е. обходить проверки разрешений на чтение/запись/выполнение. Эта возможность предоставляет исполняемому файлу возможность доступа и изменения любого файла в файловой системе.
- CAP_NET_BIND_SERVICE: разрешает привязку к номерам портов ниже 1024.
- CAP_KILL: обход проверки разрешений для отправки сигналов таким процессам, как SIGHUP и SIGKILL.
- CAP_SYS_NICE: изменение значения качества и приоритета планирования процессов среди прочих.
- CAP_SYS_RESOURCE: позволяет переопределять различные ограничения системных ресурсов, такие как дисковые квоты, ограничения времени ЦП и т. д.
Полный список доступен на странице руководства options(7).
Файлам можно назначать возможности в 3 различных наборах: разрешенные, наследуемые и эффективные. Потоки имеют 2 дополнительных набора: объемный и ограничивающий. Каждый набор может содержать ноль или более возможностей, за исключением эффективного набора для файлов, который на самом деле представляет собой один бит. Эти наборы определяют сложное поведение ядра, которое выходит за рамки этого руководства. При назначении возможностей файлам в большинстве случаев мы будем использовать разрешенные и действующие наборы.
ПРИМЕЧАНИЕ. SELinux может мешать возможностям. В системах с SELinux в принудительном режиме это может помешать процессам использовать их возможности.
Необходимые инструменты
Для управления возможностями существуют два разных пакета: libcap и libcap-ng. Последнее разработано, чтобы быть проще, чем первое. Оба они описаны в этом руководстве.
libcap предоставляет getcap и setcap для просмотра и настройки возможностей файлов, а libcap-ng объединяет обе функции в одном инструменте, filecap.
libcap
Установка
В Debian, Ubuntu и других дистрибутивах на основе Debian утилиты libcap можно установить с помощью:
apt update apt install libcap2-bin
Для установки на CentOS используйте следующую команду:
yum install libcap
Для установки в Fedora используйте следующую команду:
dnf install libcap
Для установки в Arch используйте следующую команду:
pacman -Sy libcap
Применение
getcap просто отображает возможности, назначенные файлу, если таковые имеются. Используйте следующий синтаксис:
getcap /path/to/binary
Например:
Getcap также может выполнять рекурсивный поиск с помощью флага -r. Например:
ПРИМЕЧАНИЕ. 2>/dev/null используется, чтобы избежать загромождения вывода ошибками «Операция не поддерживается», которые возникают, когда getcap пытается получить возможности файлов в /sys, /proc и т. д. Эти специальные виртуальные файловые системы не не поддерживает возможности.
Чтобы установить возможности файла с помощью setcap, используйте следующий синтаксис:
setcap CAP+set filename
Например, чтобы добавить CAP_CHOWN и CAP_DAC_OVERRIDE к разрешенным и действующим наборам, используйте:
setcap CAP_CHOWN,CAP_DAC_OVERRIDE+ep file1
Чтобы удалить возможности из файла, используйте флаг -r:
setcap -r filename
Вот несколько дополнительных примеров:
libcap-ng
Установка
Чтобы установить на Debian, Ubuntu и другие дистрибутивы на основе Debian:
apt update apt install libcap-ng-utils
Для установки на CentOS:
yum install libcap-ng-utils
Для установки в Fedora:
dnf install libcap-ng-utils
Для установки на Arch:
pacman -Sy libcap-ng
Применение
- Программа filecap относится к возможностям без префикса \CAP_\ (например, NET_ADMIN вместо CAP_NET_ADMIN).
- filecap не работает с относительными путями, при передаче файлов или каталогов в качестве аргументов требуется полный путь.
- filecap не позволяет указывать наборы возможностей, он всегда использует разрешенные и действующие при настройке возможностей.
Чтобы просмотреть возможности, назначенные файлу:
filecap /full/path/to/file
Для рекурсивного поиска в каталоге используйте:
filecap /full/path/to/dir
Чтобы выполнить поиск по всей файловой системе с помощью filecap, используйте одну из следующих команд:
filecap / filecap -a
Вот несколько примеров использования filecap для проверки файлов и каталогов:
Чтобы установить возможность для файла, используйте синтаксис:
filecap /full/path/to/file cap_name
Например:
filecap /usr/bin/tac dac_override
Чтобы удалить возможности, используйте этот синтаксис:
filecap /full/path/to/file none
Вот несколько примеров установки и удаления возможностей с помощью файла filecap:
Заключение
Возможности — это мощная функция ядра с широкими приложениями безопасности. Они должны быть заменены на полные привилегии и корневой SUID, когда это возможно.