Развивающее тестирование программ с использованием возможностей Linux POSIX

Я разрабатываю проект, в котором исполняемые файлы используют возможности Linux POSIX, а не setuid root. До сих пор мне приходилось держать одну корневую оболочку открытой, чтобы при каждой перекомпиляции я мог повторить setcap команда, чтобы дать необходимую возможность для исполняемого файла, чтобы я мог проверить результаты. Это становится утомительным, плюс, если я когда-нибудь надеюсь, что кто-то еще захочет внести свой вклад в развитие проекта, мне придется придумать лучший способ сделать это.

До сих пор я придумал два способа борьбы с этим:

1) Иметь единственную цель make для запуска от имени пользователя root для создания специальной программы setuid, которая будет использоваться make-файлами для предоставления возможности исполняемым файлам. Программа будет скомпилирована из шаблона, измененного с помощью sed так что он будет работать только в том случае, если используется пользователем без полномочий root, с которым работает разработчик, и будет изменять только файлы, принадлежащие разработчику (и которые находятся в каталогах, принадлежащих разработчику, которые не доступны для записи во всем мире).

Проблема в том, что я использую автоинструменты GNU для генерации моих make-файлов, и я не могу понять, как заставить make-файлы запускать программу на связанном исполняемом файле после его связывания. Я мог бы создать setcap-all target, который имеет все исполняемые файлы в качестве зависимостей, с правилом, которое запускает на них программу setuid, но тогда вы не можете просто сделать make executable-1 если это все, что вы хотите построить.

2) Иметь единственную цель make для запуска от имени пользователя root для создания демона setuid, который будет использовать inotify для мониторинга src каталог и предоставить возможность для любых новых исполняемых файлов (и имеет соображения безопасности, аналогичные программе setuid из #1).

Моя проблема с этим заключается в том, что я не могу понять, как заставить систему сборки автоматически и прозрачно запускать демон, плюс моя интуиция, что это не тот путь, который делается в правильной системе сборки.

Есть ли лучшие способы сделать это?

1 ответ

Может быть, я немного запутался в этом вопросе, но, похоже, вы пытаетесь использовать систему сборки для решения проблемы установки.

Упаковываете ли вы свой проект, используя dpkg, rpm или что-то еще, должно быть правило для обеспечения использования setcap, который установит возможности установленного двоичного файла, используя расширенные атрибуты файловой системы (xattrs).

# Post-install rule example
setcap cap_net_raw=+pe /usr/bin/installed-binary

Тем не менее, если вы устанавливаете системный демон, вы можете рассчитывать на init-скрипт, который уже имеет все возможности, так что вы должны позволить своему процессу отказаться от ненужных возможностей.

Другие вопросы по тегам