我想为文件的允许集和继承集设置不同的功能。像这样的东西:
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