2009-05-31 73 views
2

我的一个Rails应用程序将取决于内存中的密钥,因此只有管理员转到某个页面并上载有效密钥后,才能使用其所有功能。存储Rails应用程序的共享密钥

问题是这个密钥需要安全存储,因此同一台机器上的其他进程不能访问它(因此memcached和文件系统不适合)。一个好主意就是将其存储在应用程序中的某个配置变量中,但新生成的实例将无法访问该变量。任何想法如何在RubyEE/Apache/mod_passenger上实现?

回答

3

确实没有办法实现这个目标。 (这与所有DRM系统都有相同的问题)

您不能将操作系统中的东西保密。您的应用程序必须在内存的某个位置有密钥,操作系统内核可以读取它想要的任何内存位置。

您需要能够信任操作系统,这意味着您可以信任操作系统以正确执行文件访问权限。这又意味着可以将密钥存储在只有rails-user-process可以读取的文件中。

想想这样:即使您根本没有任何密钥,什么是阻止服务器上的攻击者从简单地更改应用程序代码本身以访问禁用的功能?

+0

内核可以访问密钥的事实对我来说很好,我只是不希望它可以被其他用户的进程访问。如果所有Rails实例都有一个共享内存区域,那么我会保留它。但在我看来,每个实例只能访问自己的数据副本。 – 2009-06-01 10:13:20

0

在文件系统中严重加密它?

0

怎么样对待它像一个普通的密码,并使用salted hash?一旦用户认证,他可以访问网站的功能。

+0

该密钥在整个应用程序生命周期中应该可用,因为它将用于加密/解密信息。 – 2009-05-31 17:07:08

1

我会使用文件系统,只对文件所有者具有读权限,并确保ruby进程是该用户拥有的唯一进程。 (使用chmod 400 file

您可以得到比这更复杂的内容,但这一切归结为使用unix用户和权限。