2010-02-18 35 views
0

我希望我的应用程序(PHP,但应该没关系)将某些数据存储在共享存储库(APC用户缓存,但又无关紧要)中。为了防止用户读取彼此的数据,我想为每个用户加密。Linux用户帐户中是否有一段秘密数据?

我可以让用户在他的应用程序的配置文件中指定键,但我宁愿自动生成它,所以用户不必打扰。

为此,我需要一个系统上的数据(几乎)不会改变,只能由当前用户读取。然后我可以散列这个或者其他东西来生成密钥。在Linux系统上是否存在类似的默认用户帐户?

+0

除了斑点之外,Linux或GNU中没有任何秘密:) – 2010-02-18 15:50:29

+0

为什么即使将密钥存储在服务器上?为什么不在自己的机器上存储会话cookie。无论如何,除了Web用户自己,谁还需要访问它? – djangofan 2010-02-19 00:25:13

+0

用户我的意思是Web应用程序(本例中为PHP代码)运行的系统用户帐户,而不是在浏览器中使用应用程序或站点的真实人员。 – 2010-02-19 12:03:25

回答

1

存储在~/.yourApp一键将工作,只要你设置的密钥文件,以0600的权限和~/.yourApp目录的权限,以0700

当然,你是靠人不能够/愿意使用root访问来访问其他用户的密钥文件。如果这是一个问题,您将需要使用某种类型的密钥库,其中访问由主密码进行控制。

编辑:在回答下面的OP的后续问题:

即使这样的主密码必须存储在系统上,用户将不得不手动输入的每一个请求(我假设甚至如果你不信任root,将它存储在内存中是不安全的)。

这一切都是相对的。如果你确实是偏执的人,你不会把钥匙存储在任何你不完全控制的机器上。另一方面,大多数人都准备相信root并没有受到损害,并且(作为后备),它需要一些具有root访问权限的人努力破解密钥库。内存中的密钥库解锁副本可能被视为“足够安全”。当然,很多用户密钥库软件似乎都在这个假设下工作。

为什么要将目录设置为0700?即使是0777,其中的0600文件仍然是其他人无法读取的,对吧?

天色一般的偏执,部分带和背带,部分原因是登录其他用户进行“保持你的鼻子出我的私人的东西”,另一部分由更换密钥文件,以防止有人。最后一点可能是重要的......或者不是......取决于你的应用程序使用密钥的确切方式。

+0

即使这时主密码必须存储在系统中,否则用户将不得不为每个请求手动输入密码(如果不信任root,即使存储在内存中也是不安全的)。但这并不是问题,但这并不意味着在不能信任root的系统上使用(并且无论如何将其应用程序托管在这样的系统上?) 为什么要将目录设置为0700?即使是0777,其中的0600文件仍然是其他人无法读取的,对吧? – 2010-02-18 14:07:13

1

主目录中有隐藏的文件夹,简称为.appname。他们可以被用户阅读。

如何生成一个随机密钥,并将其存储在〜/ .yourappname中?

+0

呃,是的,我可以自己生成它。我怎么没想到呢?我甚至已经使用了.myapp目录:P – 2010-02-18 13:28:39

+0

所谓的隐藏文件夹根本就没有隐藏。一个用户可以轻松读取另一个用户的隐藏文件夹中的文件...除非被文件权限阻止。 – 2010-02-18 13:30:45

+0

不要忘记设置秘密的文件属性去-rwx – 2010-02-18 13:33:30

相关问题