0

我正在开发一个项目,其中可执行文件使用 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 程序的安全考虑)。

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

有没有更好的方法来做到这一点?

4

1 回答 1

2

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

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

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

但是,如果您正在安装系统守护程序,您可能会指望 init-script 已经拥有所有功能,因此需要让您的进程删除不需要的功能。

于 2015-07-17T14:01:16.377 回答