Setcap

在引導期間檢索功能的位置

  • February 20, 2016

我希望節點應用程序能夠綁定到少量埠(準確地說是 443,因為它是一個 http2 伺服器)。

我這樣做sudo setcap cap_net_bind_service=+ep /path/to/node

這顯然是在靴子上記住的。我正在使用 nvm 來允許我安裝不同版本的節點,並且我剛剛升級了版本,當然我不再綁定。

再次添加該功能很容易,但大概在某個地方我正在積累權限,我應該在舊版本的節點上關閉這些權限。

但我無法找出啟動順序中發生這種情況的位置。有人可以告訴我在哪裡(我正在執行 Debian)。

編輯

我認為資訊應該儲存在執行檔的額外屬性中。但是,我在以這種方式設置的文件上找不到任何額外的屬性。

請看,為執行檔setcap(8)設置了功能。這與 SUID 或 SGID 類似(但粒度更細)。在“引導過程”中沒有任何處理過;每當文件作為程序執行時,生成的程序都會獲得這些功能。

是的,讓文件的舊版本具有提升的權限是一個嚴重的安全風險,最好在安裝新版本時刪除舊版本。

這些功能與目錄中的文件條目一起儲存(更準確地說,它們在文件的inode中,就像其他類型的權限一樣)。啟動期間沒有什麼特別的事情發生。

從 GNU coreutils 8.23 開始,該ls命令不了解 Linux 功能,因此您不會在其輸出中找到任何資訊來告訴您程序已設置功能。使用getcap命令列出功能。

要清除文件中的所有功能,請使用setcap -r /path/to/file. 不過,您無需清理任何內容 — 功能與文件一起儲存,除了刪除文件外無事可做。

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