使用Linux开发测试程序';s POSIX功能

使用Linux开发测试程序';s POSIX功能,linux,build,makefile,build-process,linux-capabilities,Linux,Build,Makefile,Build Process,Linux Capabilities,我正在开发一个项目,其中可执行文件使用Linux而不是setuid root。到目前为止,我必须打开一个根shell,以便每次重新编译时都可以重做命令,为可执行文件提供所需的功能,以便测试结果。这越来越乏味了,而且如果我希望其他人愿意为项目的发展做出贡献,我就必须想出更好的方法 到目前为止,我想出了两种方法来解决这个问题: 1) 有一个单独的make目标以root用户身份运行,以创建一个特殊的setuid程序,makefile将使用该程序为可执行文件提供功能。该程序将从通过sed修改的模板编译而

我正在开发一个项目,其中可执行文件使用Linux而不是setuid root。到目前为止,我必须打开一个根shell,以便每次重新编译时都可以重做命令,为可执行文件提供所需的功能,以便测试结果。这越来越乏味了,而且如果我希望其他人愿意为项目的发展做出贡献,我就必须想出更好的方法

到目前为止,我想出了两种方法来解决这个问题:

1) 有一个单独的make目标以root用户身份运行,以创建一个特殊的setuid程序,makefile将使用该程序为可执行文件提供功能。该程序将从通过
sed
修改的模板编译而成,这样它将仅在开发人员作为非根用户使用时运行,并且只修改开发人员拥有的文件(位于开发人员拥有的目录中,不可全世界写)

问题是,我正在使用生成文件,而我不知道如何让生成文件在链接后在链接的可执行文件上运行程序。我可以创建一个
setcap all
目标,该目标将所有可执行文件作为其依赖项,并使用一个在其上运行setuid程序的规则,但是如果您只想构建,那么您不能简单地执行
make executable-1

2) 将单个make目标作为root用户运行,以创建一个setuid守护程序,该守护程序将用于监视
src
目录,并将该功能授予任何新的可执行文件(其安全性考虑类似于#1中的setuid程序)

我的问题是,我不知道如何让构建系统自动、透明地启动守护进程,加上我的直觉,这不是在正确的构建系统中完成事情的方式


有更好的方法吗?

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

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

但是,在安装系统守护进程时,您可能会指望init脚本已经具备所有功能,因此让您的进程丢弃不需要的功能是个问题

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