我正在开发一个项目,其中可执行文件使用 Linux 的POSIX 功能而不是 setuid root。到目前为止,我必须保持一个 root shell 打开,以便每次重新编译时我都可以重做setcap
命令,为可执行文件提供所需的功能,以便我可以测试结果。这越来越乏味,而且如果我希望其他人愿意为项目的开发做出贡献,我将不得不想出一个更好的方法来做这件事。
到目前为止,我想出了两种处理方法:
1)有一个单一的make目标以root身份运行,以创建一个特殊的setuid程序,makefile将使用该程序为可执行文件提供能力。该程序将从修改过的模板编译,sed
因此它只会在开发人员正在使用的非root用户使用时运行,并且只会修改开发人员拥有的文件(并且位于开发人员拥有的目录中)这不是世界可写的)。
问题在于我使用GNU 自动工具来生成我的 make 文件,我不知道如何让 makefile 在链接后的可执行文件上运行程序。我可以创建一个目标,其中包含所有可执行文件作为其依赖项,并使用在它们上运行 setuid 程序的规则,但是如果这就是你想要构建的全部,setcap-all
你就不能简单地做。make executable-1
2) 让一个 make 目标以 root 身份运行,以创建一个 setuid 守护进程,该守护进程将使用inotify监视src
目录并将该功能授予任何新的可执行文件(并且具有类似于 #1 中的 setuid 程序的安全考虑)。
我的问题是我无法弄清楚如何让构建系统自动和透明地启动守护进程,再加上我的直觉,这不是在正确的构建系统中完成事情的方式。
有没有更好的方法来做到这一点?