我正在设置 Cygwin,我使用的软件包之一是“email”,用于从脚本发送电子邮件。
我已经“改进”了我对电子邮件配置的一个担忧,通过复制/etc/email/email.conf
到我的主目录内的目录,而不是使用我的设置(主要是用户名和密码)编辑默认配置文件。但是,它仍然让我感到毛骨悚然,要将我的明文 SMTP 密码输入文本文件,即使它是~/my-email.conf
.
电子邮件命令具有 -i(或 -smtp-pass)参数,我可以在调用脚本中附加密码,但这实际上并没有更好,因为它仍然是文本文件中的明文。
此外,电子邮件命令确实允许设置smtp-auth='LOGIN'
,并且它会提示输入密码,但我更喜欢(需要?)无提示的脚本操作,以便我以后可以自动执行它。
解决必须在配置文件(或脚本)中存储明文密码的问题的最佳方法是什么?这是 Cygwin,所以最好只是从 Windows 方面解决这个问题,并确保该文件的安全权限仅限于我?(即删除授予“用户”组等的默认读取访问权限)或者有没有更常见/更合适的方法来处理这个问题?
答案1
有几种不同的方法可以解决这个问题。
您可以对存储的密码进行哈希处理,也可以使用存储密码哈希值的一部分作为密码。这实际上不会以任何方式保护密码,因为脚本本身可能嵌入了解密密码的方法,但它可以防止明文密码出现在文件中。您可以使用 sha1sum、md5sum 甚至 crypt。
您可以使用脚本调用电子邮件程序,并将密码作为参数发送。脚本本身可以包含您的密码,但您可以对此值进行哈希处理,甚至使用 sqlite3 来存储它。如果您不担心必须在无人值守的情况下在后台运行脚本,那么让脚本向您查询密码,然后将其发送到电子邮件命令应该相对容易。
如果您使用 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 超级符号链接,因此您应该可以很好地做到这一点。