如何使用 fetchmail(或其他电子邮件抓取工具)和 OSX 钥匙串进行身份验证?

如何使用 fetchmail(或其他电子邮件抓取工具)和 OSX 钥匙串进行身份验证?

我读过的许多 fetchmail 教程都说将电子邮件帐户密码以明文形式放在配置文件中是安全的。但是,我更喜欢通过层级结构来实现安全性[***愚蠢的例子:*如果我的终端启动了,有人怀疑这种电子邮件愚蠢行为,然后滑过来并简单地输入“grep -i pass ~/.*”,那么,哎呀,我的所有基地都属于他们了!特别是如果我的电子邮件提供商使用 openid(或者我愚蠢到对我的银行使用相同的密码)]**。

现在,使用 msmtp(而不是 sendmail),我可以使用 OSX 钥匙串进行身份验证。是否有免费/开源电子邮件“抓取器”可让我使用钥匙串(或至少让我对密码进行 MD5 处理)?

答案1

如果通过 POP3 检索邮件对您来说足够了,请查看优秀的流行。它与 msmtp 属于同一作者,并且还支持 OSX 钥匙串来存储身份验证凭据。

对于 IMAP4,您可以使用非常好的离线IMAP并将其连接到 OSX 钥匙串威廉斯诺奥维斯的 Python 钩

我个人比 fetchmail 更喜欢这些工具(例如因为下载速度、功能集、配置),但你的情况可能会有所不同。

答案2

从简单的实用角度来看,是的,您可以使用 Keychain。我强烈建议您阅读整个security(1)手册页,其中包含其他注意事项。

您可以使用 Keychain 程序或通过命令行输入密码:

# WARNING: exposes password in ps(1), history(1), etc.
$ security add-internet-password -a $USER -s pop3.example.com -w 'Mellon!'

您可以使用以下方法提取它:

# Note: by default, first use will prompt
$ security find-internet-password -s pop3.example.com -a $USER -g

如果你总是允许security(1)将能够在没有进一步提示的情况下提取这些凭据。这可能会给您的系统带来风险。不过,您可以选择在启动前始终提示您输入密码。

最后,使用它,您可以fetchmail使用设置要使用的密码的跳板脚本来包装您的通话。

user=$USER
server=pop3.example.com
# WARNING: insecure tmpfile creation and usage
# As [DAM][1] mentions, see mkstemp(3)
tmpfile=/tmp/fetchmailrc.$$ 

password=$(security find-internet-password -s $server -a $USER -g 2>&1 \
           | perl -ne '/password: "(\S*)"/ and print $1')

# create temporary fetchmailrc and pass to fetchmail, etc...
cat <<EoF > $tmpfile
poll $server with proto POP3 and options no dns
  user $user with pass '$password' is $user here 
  options keep mda '/usr/bin/procmail -d %T'
EoF

fetchmail -d -f $tmpfile
rm -f $tmpfile

虽然这确实实现了你所说的不让文件到处都是密码的目标,但我还是注意安全风险仍然存在此配置,您应该考虑。

答案3

如果钥匙串允许解密纯文本密码,那么这是可能的,但您无法在本地对密码进行 MD5 加密,因为服务器需要采用自己的格式(通常是纯文本)

答案4

@梅迪纳,

如果可用的话,我建议使用 mktemp(1),而不是“tmpfile=/tmp/fetchmailrc.$$”。

相关内容