Linux

可以將兩組不同的功能設置為一個文件嗎?

  • May 7, 2022

我想為我的文件的允許和繼承集設置不同的功能。像這樣的東西:

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

但是,後一個命令會覆蓋前一個命令。甚至有可能以這種方式管理能力嗎?

您可以使用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

引用自:https://unix.stackexchange.com/questions/700498