Setcap
在引導期間檢索功能的位置
我希望節點應用程序能夠綁定到少量埠(準確地說是 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
. 不過,您無需清理任何內容 — 功能與文件一起儲存,除了刪除文件外無事可做。