加密你的狗 (Mutt 和 GPG)

作者: Kyle Rankin

我今年的专栏一直专注于安全和隐私问题,但我意识到你们中的一些人可能期望从我这里看到不同类型的主题(或者可能只是厌倦了所有这些安全话题)。好吧,你们走运了。我将一石二鸟,描述应用于一款软件的安全,这款软件多年来在我的专栏中得到了很多关注:Mutt。你们这些熟悉我的专栏的人知道我作为 Mutt 用户的悠久历史。对于那些不熟悉它的人,Mutt 是一个命令行邮件客户端(有些人会说是邮件用户代理或 MUA),它高度可配置,并使用我们很多人都知道和喜爱的 vi 键绑定。如果您想要 Mutt 的初步入门,请查看我 2010 年 10 月刊的 “带 Mutt 散步” 一文。过去我写了很多关于 Mutt 的文章,但我最近意识到我从未真正讨论过 Mutt 之前的 PGP/GPG 集成。

Mutt PGP/GPG 设置

过程的第一步是配置 Mutt 的 PGP/GPG 设置。实际上,第一步可能是您创建一个 GPG 密钥对(如果您还没有的话),但这将是另一篇文章的主题,而且已经在《Linux Journal》中介绍过了。Mutt 有相当多的 PGP 设置,但在我的经验中,您只需要关心其中的几个。因此,将以下几行添加到您的 ~/.muttrc 文件中,我将详细讨论每个选项


set pgp_replyencrypt       # now crypt_replyencrypt
set pgp_replysign          # now crypt_replysign
set pgp_replysignencrypted # now crypt_replysignencrypted
set pgp_show_unusable=no

首先要注意的是(也是我在写这篇文章时才意识到的),Mutt 的开发版本已经更改了其中一些设置的名称。所有加密设置过去都以 pgp_ 开头,但现在其中一些设置已被抽象出来,大概是为了与其他 PGP 以外的东西一起使用,并以 crypt_ 开头。根据我的经验,旧的设置名称仍然有效,并且由于它具有最广泛的兼容性,我使用这些名称来引用这些设置。

前三个设置启用了我认为是加密电子邮件的合理默认设置。虽然 Mutt 有一系列设置,可以让您自动签名和加密您发送的每条消息(如果您好奇,它们都以 pgp_autocrypt_auto 开头),但这对于大多数人来说可能不实用。相反,这些 pgp_reply 设置配置了当您回复已签名或加密的消息时如何表现。

pgp_replyencrypt 设置将自动加密对加密消息的回复,pgp_replysign 将自动签名已签名的消息。如果消息已签名和加密,则设置 pgp_replysignencrypted 负责自动加密和签名回复。最后一个设置 pgp_show_unusable=no 将隐藏您的密钥链中任何已过期、已撤销或以其他方式无法使用的 PGP 密钥。

在 Mutt 中使用 PGP/GPG

一旦您的 PGP 设置到位,Mutt 应该会自动以常识性的方式签名或加密对加密或签名消息的回复。当然,这对于您想要开始的对话没有帮助,或者如果您想加密或签名对未加密消息的回复。

Mutt 可以轻松更改您发送的任何消息的安全状态。在您撰写并保存消息后,您将进入一个屏幕,该屏幕显示消息的收件人、抄送、发件人和主题。这是您添加任何附件并在其中按 y 键发送消息的同一屏幕。此屏幕上的“安全”字段显示消息的当前 PGP 设置。如果您尚未为消息启用签名或加密,则此字段将设置为“无”。否则,它可能会设置为 SignEncryptSign, Encrypt。要更改您的安全设置,请按 p,然后从加密(e 键)、签名(s 键)、另存为(a 键)、同时签名和加密(b 键)或清除(c 键)中选择,这将禁用任何安全设置。如果您选择加密消息,当您发送消息时,Mutt 将向您显示收件人加密密钥供您选择。

Mutt PGP/GPG 钩子

当然,您可以根据每条消息手动启用 PGP 签名或加密,但您可能有一个朋友或同事,您知道他们使用电子邮件加密,并且您始终希望签名或加密发送给他们的消息。在这种情况下,Mutt 提供了钩子,允许您配置何时自动启用安全设置。

假设我想签名我发送给 linuxjournal.com 的所有消息,但我特别想签名和加密发送给 editor@linuxjournal.com 的消息。我会将以下设置添加到我的 ~/.muttrc


send-hook . 'unset pgp_autosign; unset pgp_autoencrypt'
send-hook '~t @linuxjournal.com' 'set pgp_autosign'
send-hook '~t editor@linuxjournal.com' 'set pgp_autosign; 
 ↪set pgp_autoencrypt'

send-hook 设置允许您配置在您发送消息之前应用的 Mutt 设置。带有 Mutt 钩子的语法是 send-hook,后跟一个模式,然后后跟一个或多个设置。初始行


send-hook . 'unset pgp_autosign; unset pgp_autoencrypt'

设置为匹配所有消息(. 匹配任何内容)。然后它取消设置任何自动签名或加密。这充当您的默认设置,并且重要的是它出现在任何其他与 PGP 相关的 send-hook 行之前。此默认设置存在是为了如果您触发任何其他 send-hook 并在发送到特定地址时启用自动签名或加密,则此钩子将在您向其他人发送消息之前取消设置它。

下一行将自动签名发送到 linuxjournal.com 的任何消息


send-hook '~t @linuxjournal.com' 'set pgp_autosign'

钩子模式中的 ~t 匹配“收件人”标头,但 Mutt 文档详细说明了您可以使用的许多其他标志,以匹配“发件人”、“密件抄送”、电子邮件正文或消息的其他部分。最后一行将自动为发送到 editor@linuxjournal.com 的消息启用签名和加密


send-hook '~t editor@linuxjournal.com' 'set pgp_autosign; 
 ↪set pgp_autoencrypt'

通过这些设置,您应该能够感到安全,因为您不会犯错并意外地以纯文本回复某人的加密消息。此外,您可以确保始终签名发送给您使用 PGP 的朋友的消息。

Kyle Rankin 是《Linux Journal》的技术编辑和专栏作家,也是 Purism 的首席安全官。《Linux Hardening in Hostile Networks》、《DevOps Troubleshooting》、《The Official Ubuntu Server Book》、《Knoppix Hacks》、《Knoppix Pocket Reference》、《Linux Multimedia Hacks》和《Ubuntu Hacks》的作者,也是其他一些 O'Reilly 书籍的贡献者。Rankin 经常就安全和开源软件发表演讲,包括在 BsidesLV、O'Reilly Security Conference、OSCON、SCALE、CactusCon、Linux World Expo 和 Penguicon 上。您可以在 @kylerankin 上关注他。

加载 Disqus 评论