
我希望節點應用程式能夠綁定到少量連接埠(準確地說是 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 更細)。在「啟動過程」中沒有任何地方處理這個問題;每當檔案作為程式執行時,產生的進程都會獲得這些功能。
是的,以提升的權限保留舊版本的檔案會帶來嚴重的安全風險,最好在安裝新版本時刪除舊版本。