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