GNOME/Keyring

出自 Arch Linux 中文维基

GNOME Keyring 是 GNOME 提供的一組工具,能夠存儲秘密、密碼、密鑰、認證並提供給其它程序使用。

安裝[編輯 | 編輯原始碼]

如果使用的是GNOME, gnome-keyring 作為 gnome包組 組的一個包自動安裝。在其他情況下,請安裝 gnome-keyring 包。安裝libsecret來讓應用程式使用 keyrings。不推薦安裝libgnome-keyring,除非有一些應用程式一定要用它。

與GNOME keyring相關的其他工具包括:

  • secret-tool — 通過命令行訪問GNOME keyring (以及其他任何實現了DBus Secret Service API的服務) 。
https://wiki.gnome.org/Projects/Libsecret || libsecret
  • gnome-keyring-query — 提供一個用於從GNOME Keyring的密碼庫查詢密碼的命令行工具, 但是用的是不推薦的libgnome-keyring包。
|| gnome-keyring-queryAUR
  • gkeyring — 從命令行查詢密碼,用的是不推薦的libgnome-keyring包。
https://github.com/kparal/gkeyring || gkeyringAUR[損壞的連結:package not found], gkeyring-gitAUR[損壞的連結:package not found]

用GUI管理[編輯 | 編輯原始碼]

你可以通過Seahorse來管理GNOME Keyring的內容。安裝 seahorse 包。

留空或者更改GNOME keyring的密碼是允許的。在seahorse裡,在 "View" 下拉菜單裏,選擇 "By Keyring"。在Passwords標籤頁裡,右鍵單擊 "Passwords: login" 然後選擇 "Change password." 輸入舊密碼然後留空新密碼,你會收到警告說正在使用未加密的儲存方式,如果確定請點擊"Use Unsafe Storage."

在GNOME外部使用鑰匙環[編輯 | 編輯原始碼]

沒有可視化管理軟件的情況下[編輯 | 編輯原始碼]

自動登錄[編輯 | 編輯原始碼]

如果你在用自動登錄,則需要把 login keyring 的密碼設成空。

注意: 所有密碼會明文保存。

控制台登錄[編輯 | 編輯原始碼]

用控制台(tty)登錄的時候,可以用 PAMxinitrc 啟動密鑰環守護進程。如果用 PAM 的話它會在登錄時自動解鎖密鑰環。

用PAM的方法[編輯 | 編輯原始碼]

編輯 /etc/pam.d/login 文件,在 auth 部分的末尾添加 auth optional pam_gnome_keyring.so,在 session 末尾添加 session optional pam_gnome_keyring.so auto_start

/etc/pam.d/login
#%PAM-1.0
 
auth       required     pam_securetty.so
auth       requisite    pam_nologin.so
auth       include      system-local-login
auth       optional     pam_gnome_keyring.so
account    include      system-local-login
session    include      system-local-login
session    optional     pam_gnome_keyring.so auto_start

如果用的是 SDDM, 編輯 /etc/pam.d/sddm.

GDM, 在 /etc/pam.d/passwd 文件的最後添加 password optional pam_gnome_keyring.so

/etc/pam.d/passwd
#%PAM-1.0

#password	required	pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3
#password	required	pam_unix.so sha512 shadow use_authtok
password	required	pam_unix.so sha512 shadow nullok
password	optional	pam_gnome_keyring.so
注意:
  • 為了自動解鎖,密鑰環的密碼需要和帳戶登錄密碼一樣。
  • 依然需要按下面的章節的指示用 ~/.xinitrc 設置環境變量。
用xinitrc啟動[編輯 | 編輯原始碼]

把下面的代碼添加到 ~/.xinitrc 裡:

~/.xinitrc
eval $(/usr/bin/gnome-keyring-daemon --start --components=pkcs11,secrets,ssh)
export SSH_AUTH_SOCK

如果用的是 Xfce,參考 Xfce#SSH agents

使用顯示管理器[編輯 | 編輯原始碼]

如果用顯示管理器(display manager),基本上不需要進行配置。下面這些顯示管理器會在登錄時自動解鎖密鑰環:

對於 GDM 和 LightDM, 密鑰環 必須 被命名為 login 來實現自動解鎖。

如果要讓在終端運行的程序也能訪問密鑰環(比如SSH),請添加下面的內容到 ~/.bash_profile~/.zshenv或者類似的環境變量聲明文件裡:

~/.bash_profile
if [ -n "$DESKTOP_SESSION" ];then
    eval $(gnome-keyring-daemon --start)
    export SSH_AUTH_SOCK
fi
~/.config/fish/config.fish
if test -n "$DESKTOP_SESSION"
    set (gnome-keyring-daemon --start | string split "=")
end

SSH密鑰[編輯 | 編輯原始碼]

添加密鑰:

$ ssh-add ~/.ssh/id_rsa
Enter passphrase for /home/mith/.ssh/id_rsa:

列出自動加載的密鑰:

$ ssh-add -L

禁用全部密鑰:

$ ssh-add -D

導入密鑰之後,ssh連接遠程伺服器的時候,會彈出一個對話框要你輸入這個密鑰的密碼。如果你勾上登錄時自動解鎖密鑰,那以後ssh用密鑰的時候就不需要再輸密碼。

或者如果要永久儲存密碼到密鑰環裡的話,用 seahorse 提供的 ssh-askpass 命令:

/usr/lib/seahorse/ssh-askpass my_key
注意: 你需要把對應的 .pub (公鑰文件)放到和私鑰相同的目錄裡 (例子裏公鑰是~/.ssh/id_rsa.pub),而且公鑰文件的全名應該是私鑰文件的名字加上擴展名 .pub

Start SSH and Secrets components of keyring daemon[編輯 | 編輯原始碼]

如果你用顯示管理器或者PAM啟動了 Gnome Keyring 但是你的桌面不是 Gnome, Unity or Mate,SSH 和 Secrets 組件可能不會自動啟動。所以你需要把 gnome-keyring-ssh.desktopgnome-keyring-secrets.desktop/etc/xdg/autostart/ 裡複製到 ~/.config/autostart/,而且刪除文件裏面的 OnlyShowIn。下面是例子

$ cp /etc/xdg/autostart/{gnome-keyring-secrets.desktop,gnome-keyring-ssh.desktop} ~/.config/autostart/
$ sed -i '/^OnlyShowIn.*$/d' ~/.config/autostart/gnome-keyring-secrets.desktop
$ sed -i '/^OnlyShowIn.*$/d' ~/.config/autostart/gnome-keyring-ssh.desktop

禁用鑰匙環的守護進程組件[編輯 | 編輯原始碼]

如果你想要用別的 SSH 客戶端,比如ssh-agentgpg-agent,你需要禁用 GNOME Keyring的 ssh 組件。如果只想對某個用戶做這種更改,複製 /etc/xdg/autostart/gnome-keyring-ssh.desktop~/.config/autostart 然後往 ~/.config/autostart/gnome-keyring-ssh.desktop裏面添加 Hidden=true。然後重新登錄。

注意: 如果你用的是基於 WaylandGNOME 3.24 或者更老的版本,gnome-shell 會讓 SSH_AUTH_SOCK 指向 gnome-keyring(無論它有沒有運行)。為了阻止這個,你需要在 gnome-shell 啟動之前設置 GSM_SKIP_SSH_AGENT_WORKAROUND 環境變量,比如把 GSM_SKIP_SSH_AGENT_WORKAROUND DEFAULT=1 添加到 ~/.pam_environment

提示與小技巧[編輯 | 編輯原始碼]

軟件中的插件[編輯 | 編輯原始碼]

去除密碼[編輯 | 編輯原始碼]

gnome-keyring-daemon -r -d

這個命令會啟動新的 gnome keyring 守護進程並把之前運行的 gnome keyring 都關掉。

Git的插件[編輯 | 編輯原始碼]

如果你用 HTTPS 來 push Git,GNOME keyring 很有用。

安裝 libsecret

配置 Git 使用 gnome kerying:

$ git config --global credential.helper /usr/lib/git-core/git-credential-libsecret

下一次 git push 的時候如果你沒有解鎖密鑰環,它會提示你解鎖。

GnuPG的插件[編輯 | 編輯原始碼]

某些使用 GnuPG 的程序要求指定 pinentry-program。 在 ~/.gnupg/gpg-agent.conf 裡添加以下內容來讓 Gnome 3 pinentry for Gnome Keyring 去管理密碼彈窗(passphrase prompts)。

~/.gnupg/gpg-agent.conf
pinentry-program /usr/bin/pinentry-gnome3

或者可以使用 force loopback for GPG 來實現在應用內輸入密碼。

故障排除[編輯 | 編輯原始碼]

密碼沒被記住[編輯 | 編輯原始碼]

如果你每次登錄的時候都收到密碼提示框,並且你發現你的密碼沒有被自動保持你可能需要創建或設置一個默認鑰匙環

確保 seahorse 包已經 安裝了, 打開它 (系統設置中的"密碼和密鑰") 並且選中「視圖」 > 「根據鑰匙環」。 如果在左邊的一豎排中沒看到鑰匙環 (一個鎖一樣的圖標), 打開「文件」 > 「新建」 > 「密碼鑰匙環」,然後取一個名字,你可能會被要求輸入一個密碼。如果你沒有給鑰匙環密碼,鑰匙環將會自動解鎖,即使使用自動登錄,密碼也不會被安全保存。最後,右鍵你創建的鑰匙環並選擇「設為默認」。

重置密鑰環[編輯 | 編輯原始碼]

如果出現報錯 "The password you use to login to your computer no longer matches that of your login keyring", 可能要重置密鑰環。在 seahorse 中右鍵點擊 「默認密鑰」,並選擇修改密碼。

也可以刪除 ~/.local/share/keyrings/ 中的 "login.keyring" and "user.keystore",密鑰環裡的所有密碼都會丟失,刪除後重新登錄。

參見[編輯 | 編輯原始碼]