可以将两组不同的功能设置到一个文件中吗?

可以将两组不同的功能设置到一个文件中吗?

我想为文件的允许集和继承集设置不同的功能。像这样的东西:

sudo setcap cap_fsetid=ei mybinary
sudo setcap cap_kill=ep mybinary

但是,后一个命令会覆盖前一个命令。是否有可能以这种方式管理能力?

答案1

您可以使用getcap来获取当前设置的功能列表。由于这些是空格分隔的,您可以添加更多内容,如下所示:

sudo setcap first_capability=itsvalue executable_fname
sudo setcap "$(getcap executable_fname) newcap=value" executable_fname

(功能列表以空格分隔:如 中所引用man setcap,在 中进行了描述man cap_from_text

注意:设置前查询不是免受竞争条件的影响 - 确保没有其他进程同时设置功能。

如果您了解任何给定时间点的所有功能,那就更容易了:

sudo setcap "first_capability=itsvalue newcap=value" executable_fname

在这方面,可以利用+=来提高能力。在这里使用=更容易阅读,但有一些极端情况可以+更可预测地构建状态。具体来说,列出的两个不同任务的功能具有公共子集。例如,这两个不等价:

$ sudo setcap "first=i second=p first,second=e" executable
$ sudo setcap "first=i second=p first,second+e" executable

其中第二个相当于:

$ sudo setcap "first=ie second=pe" executable

相关内容