我们有一些使用密码登录系统的脚本。这些密码存储在ini文件中,并由脚本(Perl)使用。
我在考虑存储加密的密码(不确定现在使用哪个包)并在Perl代码中对其进行解密。
但从逻辑上讲,将加密密码和解密逻辑存储在代码中是没有意义的。
这些文件位于源代码管理中,大多数用户都可以访问这些文件。
想知道什么是更好的方式。
我使用Perl以及有关我可以使用哪个模块的任何建议: - )
由于
Karthik
P.S。 Perl文件是在服务器中运行的预定脚本,存储在源代码管理工具中。用户没有与这些脚本的交互,除了当有人访问soruce控件时可以查看这些脚本。
答案 0 :(得分:4)
如果您需要密码来访问远程服务,则必须存储它。无论是否加密,它们必须放在某处,可能放在磁盘上,尤其是在不在用户会话中运行时(例如GNOME)。
将密码存储在公共VCS中是一个非常糟糕的主意。您应该只将代码保存在那里,并将密码存储在VCS目录中的单独文件中。例如,如果您在/opt/some-project/scripts
中有一份repo副本,请在/opt/some-project/passwd
旁边放置密码文件。
最重要的问题是passwd
文件的文件权限。只有所有者才能访问它,root是最好的。
然后,在root的crontab中运行这样的脚本:
cat /opt/some-project/passwd | sudo -U <user> perl /opt/some-project/run-with-passwd-on-stdin
其中<user>
是您希望运行脚本的用户(不是root!),脚本接收密码文件作为标准输入。
这样,只要文件权限正确且root帐户不受损害,密码文件就会受到保护。
答案 1 :(得分:2)
我认为你根本不应该解密密码。您应该存储密码的md5总和,然后当用户想要登录时,您计算他输入的密码的md5总和,并将其与您在文件中的内容进行比较。
当然还有其他方法,然后md5,这只是一个例子。您可以使用SHA或任何其他单向散列方法。
使用此方法会使您无法恢复忘记密码,您必须生成一个新密码以替换忘记密码。
我不知道Perl,但我打赌有md5或SHA1的可用实现。