Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux-保护环境变量_Linux_Security_Bash - Fatal编程技术网

Linux-保护环境变量

Linux-保护环境变量,linux,security,bash,Linux,Security,Bash,只是想知道是否有任何方法可以保护*nix系统中的环境变量,使它们不能从任何纯文本文件中读取,但可以在环境中使用 我知道我们总是可以对.bashrc/.bash_配置文件使用文件系统级别的权限,但如果某些变量(如db密码)被完全隐藏,该怎么办 一种方法是编写某种程序/perl脚本: 从纯文本文件中获取输入并加密/散列内容(然后删除纯文本文件) 使用相同的方法对文件运行时进行解密,并从解密的输出中导出值 (我知道这个程序可以用来将解密后的值转储到某个地方,但我现在不担心这个问题) 有没有其他更好更明

只是想知道是否有任何方法可以保护*nix系统中的环境变量,使它们不能从任何纯文本文件中读取,但可以在环境中使用

我知道我们总是可以对.bashrc/.bash_配置文件使用文件系统级别的权限,但如果某些变量(如db密码)被完全隐藏,该怎么办

一种方法是编写某种程序/perl脚本:

  • 从纯文本文件中获取输入并加密/散列内容(然后删除纯文本文件)
  • 使用相同的方法对文件运行时进行解密,并从解密的输出中导出值 (我知道这个程序可以用来将解密后的值转储到某个地方,但我现在不担心这个问题)
  • 有没有其他更好更明显的方法来实现这一点

    谢谢


    -高拉夫

    你是从谁那里保护他们的


    简单的回答是“不”。用户可以看到自己的环境变量,除非您将它们完全封装起来,使它们永远无法访问shell。但是你让他们使用哪个编辑器呢?你是说“维姆”吗?哦,毕竟他们有办法进入外壳。

    不可能。即使您从文本文件中隐藏它,它仍然可以从
    /proc//environ
    (linux)或
    pse
    (其他unix)中使用。

    这有点可能,但非常间接。您需要将敏感数据保存到一个文件中,该文件只能由启动环境变量中需要敏感数据的进程读取<代码>/proc/#####################只能由运行进程的用户

    但是,更直接地说,隐藏数据库密码等内容的正确方法是将它们保存在一个文件中,该文件只能由读取它们的程序运行的用户和/或组读取。不必麻烦在环境变量中传递它们(除非出于某种原因确实需要),只需让流程从文件中读取它们即可

    例如,如果您正在运行一个网站,并且CGI脚本/二进制文件是由Apache启动的,它以user:group
    Apache:Apache
    的身份运行,请将CGI需要的数据库密码保存到
    Apache:Apache
    拥有的文件中,并具有类似
    rw-r-----
    640
    )的权限。这样,对于要读取文件的人来说,他需要是
    root
    ,是
    apache
    组的成员,或者与
    apache
    的有效用户或组一起运行读取程序


    使用环境变量的唯一好处是,您可以在启动子进程之前将其从环境中删除,而如果子进程由同一用户拥有,则它可以读取安全文件。

    也许您最好询问服务器故障。//,或者security.stackexchange.com严格来说,这不是真的--
    environ
    文件对于现代内核发行版上的其他非root用户是不可见的。关键是它对于定义环境变量的用户是安全的。只有root用户和定义环境变量的进程的所有者才能访问
    /proc/$pid/environ
    。但是,在某些情况下,也可能需要用户自己提供密码-密钥存储可能会选择通过环境变量将密码/登录信息传输到另一个应用程序。用户可以通过此方法找出密码。我在这里有一个类似的问题:在使用完变量后,您能不能取消设置该变量?它还会出现在
    /proc//environ
    中吗?