啟動期間在何處檢索功能

啟動期間在何處檢索功能

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

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

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

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

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

編輯

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

答案1

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

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

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

答案2

請參閱setcap(8),功能已設定對於可執行檔。其工作原理與 SUID 或 SGID 類似(但粒度比 SUID 或 SGID 更細)。在「啟動過程」中沒有任何地方處理這個問題;每當檔案作為程式執行時,產生的進程都會獲得這些功能。

是的,以提升的權限保留舊版本的檔案會帶來嚴重的安全風險,最好在安裝新版本時刪除舊版本。

相關內容