使用Linux的POSIX功能对程序进行开发测试

时间:2014-11-28 05:00:39

标签: linux build makefile build-process linux-capabilities

我正在开发一个项目,其中可执行文件使用Linux POSIX capabilities而不是setuid root。到目前为止,我必须保持一个根shell打开,这样每次重新编译时我都可以重做setcap命令,为可执行文件提供所需的功能,以便我可以测试结果。这变得乏味,再加上如果我希望其他人想要为项目的开发做出贡献,我将不得不想出更好的方法。

到目前为止,我已经提出了两种解决方法:

1)让一个make目标以root身份运行,以创建一个特殊的setuid程序,makefile将使用该程序为可执行文件提供功能。该程序将通过sed修改的模板进行编译,以便只有在开发人员正在使用的非root用户使用时才会运行,并且只会修改开发人员拥有的文件(以及哪些文件位于开发人员拥有的目录,这些目录不是世界可写的。

这个问题是我使用GNU autotools来生成我的make文件,而我无法弄清楚如何让makefile在链接后的可执行文件上运行程序&之后#39;已被链接。我可以创建一个setcap-all目标,其中包含所有可执行文件作为其依赖项,其中包含一个运行setuid程序的规则,但是如果这样,那么您就不能make executable-1执行src目标。你只想建立。

2)让一个make目标以root身份运行以创建一个setuid守护程序,该守护程序将使用inotify来监视{{1}}目录,并将该功能授予任何新的可执行文件(并且具有安全性考虑类似于#1)中的setuid程序。

我的问题在于,我无法弄清楚如何让构建系统自动透明地启动守护进程,再加上我的直觉,即在正确的构建系统中,这不是事情。

有没有更好的方法呢?

1 个答案:

答案 0 :(得分:2)

也许我对这个问题感到有些困惑,但似乎你正在尝试使用构建系统来解决安装问题。

无论您是使用dpkgrpm还是其他任何内容打包项目,都应该有一条规则来强制使用setcap,这将设置已安装二进制文件的功能使用文件系统扩展属性(xattrs)。

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

但是,在安装系统守护程序时,您可能依赖init-script已具备所有功能,因此需要让您的进程放弃不需要的功能。