
標題已經說明了一切,但讓我再擴展一下:
我想知道密鑰環密碼如何保護我的密鑰。當然,它會加密容器文件,因此其他人無法存取它。但在我提供密鑰環密碼後它也會被解密。因此,事實上,當我登入時,金鑰可能會被某些惡意應用程式竊取(至少具有 root 權限的應用程式應該能夠)。
當然,我知道,密鑰檔案本身在輸入密碼後並不會被替換為解密版本,而是必須在記憶體中解密。
問題是:惡意應用程式可以在解密時存取我的金鑰環中的資料嗎?如果是這樣,當我的磁碟已經經過 luks 加密並且我是唯一使用我的電腦的人時,我還需要為我的金鑰環設定密碼嗎?
而且,如果密碼更安全,是否可以在登入後使用我的帳戶密碼(或其他)自動解鎖?
(我沒有使用登入管理員,透過 TTY 登入後我會自動啟動 i3wm,所以此設定也可以自動解鎖嗎?)
答案1
惡意應用程式可以在解密時存取我的密鑰環中的資料嗎?
在實踐中(目前),是的,他們可以。 Linux 中使用者會話的目前設計(或缺乏)使得 gnome-keyring-daemon 很難確定哪個程式正在嘗試存取它;這在某種程度上對於已編譯的程式是可行的,但是例如用Python 編寫的任何應用程式與用Python 編寫的任何其他應用程式沒有什麼區別。所以雖然 gnome-keyring 做了首先有應用程式白名單,目前版本不再有。
最終,這應該透過 Snap 或 Flatpak 等應用程式容器專案來改進。
如果是這樣,當我的磁碟已經經過 luks 加密並且我是唯一使用我的電腦的人時,我還需要為我的金鑰環設定密碼嗎?
我會說是的。
如上所述,任何程式都可以發送 D-Bus 訊息並向 gnome-keyring-daemon 詢問任何秘密。 (在某些情況下,它甚至可以作為一項功能使用。)
然而,存在相當多的安全漏洞,其中易受攻擊的程式(例如網頁瀏覽器)可被用來竊取你的文件,儘管仍然無法運行命令或發送 D-Bus 訊息。眾所周知,惡意軟體會竊取人們未加密的 SSH 金鑰 ( ~/.ssh/id_rsa
) 或 Bitcoin Core 錢包。
同樣,如果未加密,您將面臨~/.local/share/keyrings/login.keyring
透過網頁瀏覽器漏洞等被盜的風險。
(我沒有使用登入管理員,透過 TTY 登入後我會自動啟動 i3wm,所以此設定也可以自動解鎖嗎?)
在所有情況下,gnome-keyring 的自動解鎖都是透過 PAM 完成的。pam_gnome_keyring.so
作為登入程序的一部分,名為的模組接收您的密碼,並啟動初始金鑰環守護程式。
PAM 模組應新增至/etc/pam.d
Linux 發行版通常新增通用模組的位置,或僅新增至該login
檔案(專門用於控制台和 telnet 登入)。
在 auth 群組中(在 Debian 風格的「附加」區塊中common-auth
;否則作為最後一個模組)它將在記憶體中儲存密碼:
[...]
auth optional pam_gnome_keyring.so only_if=login
在會話組中(同樣,Debian 的「附加」區塊,否則是最後一個模組)它使用儲存的密碼來啟動gnome 密鑰環守護程式:
[...]
session optional pam_gnome_keyring.so only_if=login auto_start