Linux
可以將兩組不同的功能設置為一個文件嗎?
我想為我的文件的允許和繼承集設置不同的功能。像這樣的東西:
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