Как заменить setuid возможностями файловой системы

Вдохновленный этим вопросом, вот последующее:

Поскольку некоторые из вас могут знать, что бинарные файлы setuid опасны, поскольку некоторые эксплойты используют их для повышения их прав до root.

Теперь кажется, что есть интересная идея заменить setuid на различные, более безопасные средства.

Как?

Возможности файловой системы в Linux были добавлены, чтобы обеспечить более мелкозернистый контроль, чем позволяет только setuid. С setuid это полная эскалация эффективных привилегий для пользователя (обычно root). В man-странице возможностей (7) представлено следующее описание:

В целях выполнения проверок разрешений традиционные реализации Unix различают две категории процессов: привилегированные процессы (эффективный идентификатор пользователя – 0, называемый суперпользователем или root) и непривилегированные процессы (эффективный UID которого отличен от нуля). Привилегированные процессы обходят все проверки прав на ядро, а непривилегированные процессы подвергаются полной проверке разрешений на основе учетных данных процесса (обычно: эффективный UID, эффективный GID и дополнительный список групп).

Начиная с ядра 2.2, Linux делит привилегии, традиционно связанные с суперпользователем, на отдельные единицы, известные как возможности, которые могут быть независимо включены и отключены. Возможности – атрибут per-thread.

Если для приложения требуется возможность вызова chroot (), который обычно разрешен только для root, CAP_SYS_CHROOT может быть установлен на двоичном, а не на setuid. Это можно сделать с помощью команды setcap:

 setcap CAP_SYS_CHROOT /bin/mybin 

Начиная с версии RPM версии 4.7.0 , возможности могут быть установлены на упакованные файлы с использованием %caps .

В Fedora 15 была выпущена цель удаления всех бинарных файлов setuid, отслеживаемых в этом отчете об ошибке . Согласно отчету об ошибке, эта цель была достигнута.

Статья в Википедии о безопасности на основе возможностей хорошо читается для всех, кто интересуется.