Поиск по сайту:

Как управлять файловыми возможностями Linux


На этой странице

  1. Общие возможности
  2. Необходимые инструменты
  3. либкап
    1. Установка
    2. Использование

    1. Установка
    2. Использование

    Традиционно процесс 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, когда это возможно.