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

JMD*_*JMD 5 security email cygwin

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

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

email 命令有 -i(或 -smtp-pass)参数,我可以在调用脚本中将密码附加到该参数上,但这并没有更好,因为它在文本文件中仍然是明文。

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

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

Dar*_*all 1

有几种不同的方法可以处理这个问题。

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

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

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

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

set timeout -1
spawn ssh-add
match_max 1000000
expect "Enter passphrase for "
send -- "$password\r"
Run Code Online (Sandbox Code Playgroud)