В Linux, если процесс имеет возможность CAP_SETGID
, ядро будет обрабатывать вызовы setgid()
, setegid()
, setregid()
, setresgid()
и setgroups()
(если не отказано модулем безопасности Linux, таким как SELinux).
Существует два основных механизма, которыми непривилегированный пользователь может получить возможность:
Возможности файловой системы более интересны и полезны для сервисов / приложений. Они работают только для двоичных файлов, а не для сценариев, потому что ядро обновляет возможности как часть механизма для выполнения двоичных файлов; сценарии интерпретируются оболочками с использованием совершенно другого, полностью пользовательского механизма.
(Файловая система должна поддерживать расширенные атрибуты. Некоторые файловые системы, такие как ext2, ext3 и reiserfs, должны быть смонтированы с опцией монтирования user_xattr
для включения расширенных атрибутов. Ext4, xfs, jfs, btrfs и zfs все должны поддерживать расширенные атрибуты атрибутов с использованием параметров монтирования по умолчанию. Некоторые дистрибутивы Linux, такие как Debian и Ubuntu, уже используют расширенные атрибуты и возможности файловой системы.)
Примечание: вы можете использовать утилиты getcap
и lsattr
для проверки возможностей двоичной файловой системы и расширенных атрибутов. В моей системе Ubuntu 16.04.4 LTS двоичный файл /usr/bin/systemd-detect-virt
имеет разрешенные и эффективные возможности CAP_DAC_OVERRIDE и CAP_SYS_PTRACE.
Использование возможностей файловой системы на практике очень просто, но для безопасной работы сначала следует тщательно рассмотреть последствия для безопасности: это мощный инструмент, но вы (разработчик, менеджер пакетов и / или системный администратор) несете ответственность за уверен, что он используется правильно.
Например, если вы устанавливаете /usr/bin/yourprog
, который является доверенным и требует возможности CAP_SETGID, все, что вам нужно сделать, - это установить эту возможность, разрешенную и эффективную для этого двоичного файла. Для этого вы запускаете setcap cap_setgid=pe /usr/bin/yourprog
с правами root. (В сценарии установки пакета Debian .deb, который обычно запускается в сценарии после установки.)