2012-01-18 200 views
0

我们有一些使用密码登录系统的脚本。这些密码存储在ini文件中并由脚本(Perl)使用。密码加密和密码存储 - Perl

我想存储加密的密码(不知道到现在使用的封装)和解密相同的Perl代码的。

但在逻辑上并不有意义的存储加密的密码和代码解密逻辑。

这些文件在源代码管理中,可以被大多数用户访问。想知道什么可能是更好的方法。

我就用我可以用这模块欢迎:-)

感谢

KARTHIK

附注:Perl和任何建议Perl文件是在服务器中运行的预定脚本,存储在源代码管理工具中。除了可以在用户访问soruce控件时查看这些脚本之外,用户与这些脚本没有交互。

+0

从阅读ini文件后你是否需要纯文本密码这个问题还不清楚。如果你需要密码,那么加密它们的原因并不多。你的程序应该以某种方式对它们进行解密,并且可能人们有权访问该代码,这样人们可以在需要时解密密码。澄清你的问题。 – ruz 2012-01-18 09:13:23

回答

2

我认为你不应该解密密码。你应该存储md5密码的总和,然后当用户想要登录时,你计算他输入的密码的md5总和,并将它与你的文件中的内容进行比较。

当然还有其他的方法然后MD5,其仅仅是一个例子。您可以使用SHA或任何其他单向散列方法。

使用这种方法让你无法恢复忘记的密码,你必须生成一个新的以取代被遗忘的一个。

我不知道的Perl,但我敢打赌,有MD5或SHA-1的可用的实现。

+0

实际上这些都是Perl中的预定脚本,没有用户交互。 – KK99 2012-01-18 07:49:10

+2

@KarthikKrishnan:这没什么区别。马克克描述的策略仍然有效。没有理由不管怎样你都必须解密密码。如果你这样做,为什么还要打扰他们呢? – flesk 2012-01-18 08:27:38

+1

Perl将C函数'crypt“的实现作为内置和'Digest :: MD5'和'Digest :: SHA'作为核心模块。 – flesk 2012-01-18 08:30:45

4

这实际上与Perl没有多大关系。你将主要使用shell和文件系统。

如果你需要一个密码来访问远程服务,你必须保存它。无论是否加密,它们都必须放置在某个地方,可能放在磁盘上,尤其是不在用户会话中运行(例如GNOME)。

在公共VCS中存储密码是一个非常糟糕的主意。您应该只保留您的代码并将密码存储在VCS dirs以外的单独文件中。例如,如果您有/opt/some-project/scripts中的回购副本,请将密码文件放在其旁边,/opt/some-project/passwd

最重要的问题是passwd文件的文件权限。只有拥有者才能访问,根是最好的。

cat /opt/some-project/passwd | sudo -U <user> perl /opt/some-project/run-with-passwd-on-stdin 

其中<user>是用户(不是root!)你想运行你的脚本,脚本接收的密码文件为标准:

然后,在你的根的crontab运行这样一个脚本输入。

这样,只要文件权限正确且root帐户不受影响,密码文件就会受到保护。