Linux上的特权用户是否可以看到环境变量?


12

我试图确定在Linux中,其他(非root)用户是否可以观察到进程的环境变量。

立即使用的情况是将机密放入环境变量中。整个网络上很多地方都在讨论这是不安全的,但是我无法将Linux的确切暴露点归零。

请注意,我并不是在谈论将明文秘密放入文件中。另请注意,我并不是在谈论暴露于root帐户(我认为试图以root为首发身份隐藏来自对手的秘密)。

这个问题似乎是在解决我的问题,并提出了将环境变量分类为完全不具有安全性或仅被混淆的注释,但是人们如何访问它们呢?

在我的测试中,一个没有特权的用户无法通过进程表('ps auxwwe')观察另一位用户的环境变量。设置环境变量(例如,导出)的命令是shell内置程序,它们不会使其进入进程表,并且扩展名不在/ proc / $ pid / cmdline中。/ proc / $ pid / environ仅可由进程所有者的UID读取。

也许混淆是在不同的操作系统或版本之间。网络上的各种(最新)资源都在谴责环境变量的不安全性,但是我对不同的Linux版本进行抽查似乎表明,这种情况至少可以追溯到2007年(可能更进一步,但我没有发现问题)进行测试)。

在Linux中,非特权用户如何观察另一个进程的环境变量?

Answers:


7

正如Gilles 在security.stackexchange.com上对类似问题的非常全面的回答中所解释的那样,只有拥有流程的用户(当然是根用户)才能访问流程环境。


您所指帖子的任何链接?
cyc115 '18

@ cyc115单击单词“答案” :)
guntbert

6

环境变量非常安全。链接到您的问题的意思是,如果系统受到威胁,则使用环境变量而不是配置文件的唯一安全优势是晦涩难懂。这意味着,如果某人获得了root访问权限,则他们可以同时获得两者的权限。
是否将环境变量用于机密数据是否被视为“晦涩”也值得商de。这是非常普遍的做法,因此我不认为这样。

您只能在2个地方访问存储在环境变量中的数据:

1.流程的运行环境

当进程运行时,可以通过访问该进程的环境变量/proc/$PID/environ。但是,只有拥有该进程或root的用户才能访问该文件。

2.环境变量的来源

如果您使用的是初始化脚本,并且变量存储在该初始化脚本中,则当然可以通过读取该脚本来获取变量。

或者,如果环境变量来自其他地方,那么无论在哪里。

3.'ps'输出

是的,我知道我说过2,在任何体面的系统中,它都是2。但是,如果管理员不知道他在做什么,则有可能开辟第三个途径。

如果通过类似的方法启动该过程sh -c 'cd /foo/bar; POP=tart /my/executable',则该sh过程将在以下位置可见ps

$ sh -c 'cd /; POP=tart sleep 10' &
[1] 3085

$ ps ax | grep POP
phemmer   3085  14   5  0.0  0.0 SN         00:00 sh -c cd /; POP=tart sleep 10

1
您还应该提及的e修饰符ps。它还仅允许查看用户拥有的进程的环境。
Barmar 2014年

1
还有一个可能的位置:如果环境变量是通过外壳程序设置的(​​例如export FOO=bar),那么~/.bash_history如果用户不采取预防措施来保存或删除它,它也可能会出现在历史文件中(例如)。
tavnab
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.