Jos*_*ler 17 linux security environment-variables
我试图确定在 Linux 中,其他(非 root)用户是否可以观察到进程的环境变量。
直接用例是将机密放入环境变量中。这在网络上的许多地方都被讨论为不安全,但我无法将 Linux 中的确切暴露点归零。
请注意,我不是在谈论将明文机密放入文件中。另请注意,我不是在谈论暴露于 root 帐户(我认为试图隐藏 root 作为非启动者的对手的秘密)。
这个问题似乎解决了我的问题,评论将环境变量归类为完全没有安全性,或者只是被混淆了,但是如何访问它们?
在我的测试中,一个非特权用户无法通过进程表('ps auxwwe')观察另一个用户的环境变量。设置环境变量的命令(例如导出)是 shell 内置命令,不会将其放入进程表,并且扩展名不在 /proc/$pid/cmdline 中。/proc/$pid/environ 只能由进程所有者的 UID 读取。
也许混淆是在不同的操作系统或版本之间。网络上的各种(最近)来源都谴责环境变量的不安全性,但我对不同 linux 版本的抽查似乎表明这至少可以追溯到 2007 年(可能更远,但我没有盒子手测试)。
在 Linux 中,非特权用户如何观察他人进程的环境变量?
环境变量非常安全。您链接到的问题是,如果系统受到威胁,那么在配置文件上使用环境变量的唯一安全优势就是默默无闻。这意味着如果有人获得了 root 访问权限,他们就可以同时访问这两者。
是否将环境变量用于秘密数据被认为是“晦涩难懂的”也值得商榷。这是一种非常普遍的做法,因此我不会这么认为。
您只能在 2 个地方访问存储在环境变量中的数据:
当进程运行时,可以通过 访问该进程的环境变量/proc/$PID/environ
。但是,只有拥有该进程的用户或 root 才能访问该文件。
如果您使用的是 init 脚本,并且变量存储在该 init 脚本中,那么当然可以通过读取该脚本来获取变量。
或者,如果环境变量来自其他地方,那么无论在哪里。
是的,我知道我说的是 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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
15515 次 |
最近记录: |