【问题标题】:Developmental testing of programs using Linux's POSIX capabilities使用 Linux 的 POSIX 功能对程序进行开发测试
【发布时间】: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


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-16
      • 1970-01-01
      • 2019-07-05
      • 2015-11-28
      • 1970-01-01
      相关资源
      最近更新 更多