2021-05-12 14:32:11
如何 Mutt 郵件用戶端中使用密文密碼
Mutt 是一個 Linux/UNIX 終端環境下的開源的郵件用戶端。Mutt 以及 Alpine 在 Linux 命令列愛好者中有著最忠誠的追隨者,這不是沒有原因的。想一下你所期待郵件用戶端應有的功能,Mutt 擁有:多協定支援(例如,POP3、IMAP 和 SMTP),S/MIME 和 PGP/GPG 整合,對談線索,顏色標記,可客製化宏/快捷鍵,等等。另外,基於命令列的 Mutt 相比粗重的基於瀏覽器的郵件用戶端(如:Gmail,Ymail)或圖形化使用者介面的郵件用戶端(如:Thunderbird,MS Outlook)而言,是一個使用電子郵件的輕量級替代品。
當你想使用 Mutt 通過公司的 SMTP/IMAP 伺服器存取或傳送郵件,或取代網頁郵件服務,可能所關心的一個問題是如何保護您的郵件憑據(如:SMTP/IMAP 密碼),它們儲存在一個純文字 Mutt 組態檔(~/.muttrc)中。
對於這些人對安全的擔憂,確實有一個容易的方法來加密 Mutt 組態檔*,以防止這種風險。在這個教學中,我描述了如何加密 Mutt 敏感設定,比如使用 GnuPG(GPG)加密 SMTP/IMAP 密碼,GPG 是一個開源的 OpenPGP 實現。
第一步 (可選):建立 GPG 金鑰
因為我們將要使用 GPG 加密 Mutt 組態檔,如果你沒有 GPG 金鑰,第一步就是建立一個(公鑰/私鑰對)。如果有,請忽略這步。
建立一個新 GPG 金鑰,輸入下面命令:
$ gpg --gen-key
選擇金鑰型別(RSA),金鑰長度(2048 bits),和過期時間(0 代表不過期)。當出現使用者 ID 提示時,輸入關聯到該公鑰/私鑰對的名字(Dan Nanni) 和郵箱地址(myemail@email.com)。最後,輸入一個密碼來保護你的私鑰。
生成一個 GPG 金鑰需要大量的隨機位元組來構成熵,所以在生成金鑰期間確保在你的系統上執行一些隨機行為(如:敲打鍵盤,移動滑鼠或者讀寫磁碟)。根據金鑰長度,生成 GPG 金鑰要花幾分鐘或更多時間。
第二步:加密 Mutt 敏感設定
下一步,在 ~/.mutt 目錄建立一個新的文字檔案,然後把一些你想隱藏的 Mutt 敏感設定放進去。這個例子裡,我指定了 SMTP/IMAP 密碼。
$ mkdir~/.mutt
$ vi~/.mutt/password
set smtp_pass="XXXXXXX"
set imap_pass="XXXXXXX"
現在通過 GPG 使用你的公鑰加密這個檔案如下:
$ gpg -r myemail@email.com -e ~/.mutt/password
這將建立 ~/.mutt/password.gpg,這是一個原始檔案的 GPG 加密版本。
然後刪除 ~/.mutt/password,只保留 GPG 加密版本。
第三步:建立完整 Mutt 組態檔
現在你已經在一個單獨的檔案放置了加密的 Mutt 敏感設定,你可以在 ~/.muttrc 指定其餘的 Mutt 設定。然後增加下面這行在 ~/.muttrc 末尾。
source "gpg -d ~/.mutt/password.gpg |"
當你啟動 Mutt 時,這行將解密 ~/.mutt/password.gpg ,然後將解密內容應用到你的 Mutt 設定中。
下面展示一個完整 Mutt 設定例子,這可以讓你通過 Mutt 存取 Gmail,而沒有暴露你的 SMTP/IMAP 密碼。用你的 Gmail ID 替代下面的 yourgmailaccount
,此外你也需要在你的 Goolgle 賬戶設定中啟用“支援不太安全的應用存取”。
setfrom="yourgmailaccount@gmail.com"
set realname ="Your Name"
set smtp_url ="smtp://yourgmailaccount@smtp.gmail.com:587/"
set imap_user ="yourgmailaccount@gmail.com"
set folder ="imaps://imap.gmail.com:993"
set spoolfile ="+INBOX"
set postponed ="+[Google Mail]/Drafts"
set trash ="+[Google Mail]/Trash"
set header_cache =~/.mutt/cache/headers
set message_cachedir =~/.mutt/cache/bodies
set certificate_file =~/.mutt/certificates
set move =no
set imap_keepalive =900
# encrypted IMAP/SMTP passwords
source "gpg -d ~/.mutt/password.gpg |"
第四步(可選):設定 GPG 代理
這時候,你將可以使用加密了IMAP/SMTP 密碼的 Mutt。然而,每次你執行 Mutt,你都要先被提示輸入一個 GPG 密碼來使用你的私鑰解密 IMAP/SMTP 密碼。
如果你想避免這樣的 GPG 密碼提示,你可以部署一個 gpg-agent。它以後台守護行程方式執行,gpg-agent 可以安全地快取你的 GPG 密碼,無需手工干預,gpg 可以自動從 gpg-agent 獲得你的 GPG 密碼。如果你正在使用 Linux 桌面,你可以設定使用一些等同於 gpg-agent 的特定的桌面軟體,例如,GNOME 桌面的 gnome-keyring-daemon。
你可以在基於 Debian 系統安裝 gpg-agent:
$ sudoapt-get install gpg-agent
gpg-agent 在基於 Red Hat 的系統上是預裝好的。
現在增加下面這些到你的 .bashrc 檔案中。
envfile="$HOME/.gnupg/gpg-agent.env"
if[[-e "$envfile"]]&&kill-0 $(grep GPG_AGENT_INFO "$envfile"|cut-d:-f 2)2>/dev/null;then
eval"$(cat "$envfile")"
else
eval"$(gpg-agent --daemon --allow-preset-passphrase --write-env-file "$envfile")"
fi
export GPG_AGENT_INFO
過載 .bashrc,或簡單的登出然後重新登入。
$ source ~/.bashrc
現在確認 GPGAGENTINFO 環境變數已經設定妥當。
$ echo $GPG_AGENT_INFO
/tmp/gpg-0SKJw8/S.gpg-agent:942:1
並且,當你輸入 gpg-agent 命令時,你應該看到下面的資訊。
$ gpg-agent
gpg-agent: gpg-agent running and available
一旦 gpg-agent 啟動執行,它將會在第一次提示你輸入密碼時快取你的 GPG 密碼。隨後你多次執行 Mutt ,都不會被提示要 GPG 密碼(gpg-agent 一直開著,快取就不會過期)。
結論
在這個指導裡,我提供一個使用 GnuPG 加密如 SMTP/IMAP 密碼這樣的 Mutt 敏感設定的方法。注意,如果你想在 Mutt 上使用 GnuPG 來加密或簽名你的郵件,你可以參考官方指南關於 GPG 與 Mutt 結合的部分。
如果你知道任何使用 Mutt 的安全技巧,歡迎分享它。
本文永久更新連結地址:http://www.linuxidc.com/Linux/2016-02/128069.htm
相關文章