Полезно иметь программу-обертку, которая может выполнять любую программу с определенными возможностями, без необходимости устанавливать возможности для целевых программ . Такая оболочка особенно полезна для запуска программного обеспечения из каталога сборки (где setcap
было бы громоздко) или для запуска интерпретаторов, таких как Python (там, где это было бы неуместно).
Как объяснено в других ответах, окружающие возможности решают эту проблему, но они доступны только начиная с ядра 4.3. Эту проблему можно обойти, если оболочка загружает целевую программу напрямую, а не с помощью exec
. Под этим я подразумеваю открыть исполняемый файл, отобразить соответствующие разделы, настроить стек и т. Д. И перейти к его коду. Это довольно сложная задача, но, к счастью, программа wine-preloader из проекта Wine делает именно это (и некоторые другие вещи, которые не имеют отношения к этой цели).
Запустите что-то вроде этого от имени пользователя root для настройки оболочки:
cp /usr/bin/wine-preloader /path/to/wrapper
setcap cap_net_raw+ep /path/to/wrapper # set whatever capabilities you need
Теперь у нас есть копия wine-preloader
, которая может запускать любую программу с такими возможностями:
/path/to/wrapper /path/to/executable arguments...
Это работает, но есть некоторые подводные камни:
- Целевая программа должна быть путем к исполняемому файлу, она не может найти программы в
PATH
.
- Не работает, если целевой программой является скрипт с интерпретатором (
#!
).
-
wine-preloader
выводит сообщение о невозможности найти что-то (но программа по-прежнему работает нормально).