一般:处理明文密码的最佳方法?具体:Cygwin/email/bash

一般:处理明文密码的最佳方法?具体:Cygwin/email/bash

我正在设置 Cygwin,我使用的软件包之一是“email”,用于从脚本发送电子邮件。

我已经“改进”了我对电子邮件配置的一个担忧,通过复制/etc/email/email.conf到我的主目录内的目录,而不是使用我的设置(主要是用户名和密码)编辑默认配置文件。但是,它仍然让我感到毛骨悚然,要将我的明文 SMTP 密码输入文本文件,即使它是~/my-email.conf.

电子邮件命令具有 -i(或 -smtp-pass)参数,我可以在调用脚本中附加密码,但这实际上并没有更好,因为它仍然是文本文件中的明文。

此外,电子邮件命令确实允许设置smtp-auth='LOGIN',并且它会提示输入密码,但我更喜欢(需要?)无提示的脚本操作,以便我以后可以自动执行它。

解决必须在配置文件(或脚本)中存储明文密码的问题的最佳方法是什么?这是 Cygwin,所以最好只是从 Windows 方面解决这个问题,并确保该文件的安全权限仅限于我?(即删除授予“用户”组等的默认读取访问权限)或者有没有更常见/更合适的方法来处理这个问题?

答案1

有几种不同的方法可以解决这个问题。

  1. 您可以对存储的密码进行哈希处理,也可以使用存储密码哈希值的一部分作为密码。这实际上不会以任何方式保护密码,因为脚本本身可能嵌入了解密密码的方法,但它可以防止明文密码出现在文件中。您可以使用 sha1sum、md5sum 甚至 crypt。

  2. 您可以使用脚本调用电子邮件程序,并将密码作为参数发送。脚本本身可以包含您的密码,但您可以对此值进行哈希处理,甚至使用 sqlite3 来存储它。如果您不担心必须在无人值守的情况下在后台运行脚本,那么让脚本向您查询密码,然后将其发送到电子邮件命令应该相对容易。

  3. 如果您使用 smtp-auth='LOGIN',则可以使用 expect 来响应提示 done。Expect 是一个可以在 cygwin 上安装的包。stackoverflow 上有一个关于如何制作 expect 的问题提示输入密码。如果您需要脚本能够在无人值守的情况下发送密码,那么这更是一个解决方案。

对于将密码发送到类似的东西的简单期望代码片段ssh-add

set timeout -1
spawn ssh-add
match_max 1000000
expect "Enter passphrase for "
send -- "$password\r"

答案2

在 Debian 系统上,我将使用 ecryptfs 在我的主目录中创建一个加密文件夹(这确实是我所做的),然后符号链接到该文件。

您可能找不到可以执行此操作的软件,但是 truecrypt 可以让您拥有一个加密分区,您可以将其弄得很小并在其中存储此类文件。现在有了较新的 NTFS 超级符号链接,因此您应该可以很好地做到这一点。

相关内容