gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 09:35:24 25 4
gpt4 key购买 nike

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

到目前为止,我想出了两种处理方法:

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

问题是我正在使用 GNU autotools生成我的 make 文件,我无法弄清楚如何让 makefile 在链接后在链接的可执行文件上运行程序。我可以创建一个 setcap-all 目标,它将所有可执行文件作为其依赖项,并使用在其上运行 setuid 程序的规则,但是你不能简单地执行 make executable-1 如果这就是您想要构建的全部内容。

2) 有一个单独的 make 目标以 root 身份运行以创建一个将使用 inotify 的 setuid 守护进程。监视 src 目录并向任何新的可执行文件授予能力(并且其安全考虑类似于 #1 中的 setuid 程序)。

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

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

最佳答案

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

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

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

但是,如果您正在安装系统守护进程,您可能会指望初始化脚本已经拥有所有功能,所以让您的进程删除不需要的功能是一个问题。

关于linux - 使用 Linux 的 POSIX 功能对程序进行开发测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27182185/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com