Развивающее тестирование программ с использованием возможностей 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-скрипт, который уже имеет все возможности, так что вы должны позволить своему процессу отказаться от ненужных возможностей.