我刚刚在 Debian 上使用 设置了一个 RAID 1 阵列mdadm
。我正在尝试mdadm
使用 启用电子邮件监控msmtp
。我正在遵循msmtp
文档 ( https://marlam.de/msmtp/msmtp.html#Examples ) 并希望使用secret-tool
或存储我的 Gmail 应用密码gpg
。
这两种工具单独使用时都可以正常工作:
- 我可以使用以下方法检索我的应用密码:
secret-tool lookup host smtp.gmail.com service smtp user [username]
或者
gpg --no-tty --quiet --decrypt ~/.msmtp-gmail.gpg
- 我还可以使用以下方法成功发送电子邮件:
echo "test email" | msmtp [emailaddess]@gmail.com
但是,当我运行时sudo mdadm --monitor --scan --test -1
,我得到以下输出:
- 使用
secret-tool
sendmail: cannot read output of 'secret-tool lookup host smtp.gmail.com service smtp user [username]'
- 使用
gpg
gpg: can't open '/root/.msmtp-gmail.gpg': No such file or directory
gpg: decrypt_message failed: No such file or directory
sendmail: cannot read output of 'gpg --no-tty --quiet --decrypt ~/.msmtp-gmail.gpg'
- 使用以明文存储的密码
sudo mdadm --monitor --scan --test -1
当我将密码直接存储在文件中时,确实/etc/msmtprc
有效。但是,我想避免这种情况。
问题
secret-tool
用户运行时,gpg
、 和似乎都运行正常。出现此问题的原因似乎是 运行。msmtp
mdadm
sudo
我该如何解决这个问题?我想遵守文件权限/安全性的最佳实践。
最终,任何可以无需密码访问某些数据的东西,都可以访问这些数据。
secret-tool 提供的加密之所以有用,是因为在您登录(并使用您的登录密码解密¹)之前数据不可用 - 但如果一直解锁,为了让 root 可以使用它,它会...一直解锁。
¹ 这也是为什么当由不同用户运行时该工具不起作用的原因;保存解密数据的服务是每个用户的,而以 root 身份运行的 mdadm/secret-tool 只是不知道它必须连接到 UID 1001 的秘密存储。
GPG 也是一样;您可以使其以 root 身份工作,但私钥本身必须在没有密码的情况下存储,以便 mdadm 使用它,并且如果加密文件与无密码私钥位于同一台机器上,那么它就只能是纯文本形式。
有一些方法可以实现这一点,例如以 root 身份运行 gpg-agent,这样您仍然可以拥有一个受密码保护的密钥,每次系统重新启动时,您都可以解锁一次该密钥- 但虽然这些方法在某些用例中效果很好,但 RAID 监控系统可能不是其中之一。(如果服务器重新启动而您却没有时间解锁 GPG,会发生什么?)
因此,在无头系统上,将凭证保存在仅 root(或其他服务帐户)可访问的纯文本文件中是相对正常的。例如,TLS 客户端或服务器证书通常以纯文本形式保存,用于识别机器的 Kerberos 密钥表和 SSH 主机私钥也是如此。
不过,部分缓解风险的原因是,此类凭证通常不会在许多不同的东西之间共享,而是专属于该服务,因此它们的访问权限会受到更多限制。也就是说,您不应该将自己的Gmail 帐户详细信息放在 /etc 中,而是创建一个专用的电子邮件帐户(任何提供商)并将其用作“发件人”。这样,您就可以将这些凭证泄露的影响从“您的整个在线身份都处于危险之中”降低到“一个里面什么都没有的一次性邮箱都处于危险之中”。