Bash 其他用户是否可以看到“导出机密=”&“什么?

Bash 其他用户是否可以看到“导出机密=”&“什么?,bash,Bash,我知道,如果我在bash中运行一个命令,那么其他用户可以使用许多不同的方式查看参数。所以SomeCommand$PASSWORD是个坏主意。如果我这样做的话,我想也是这样 env PASSWORD="SECRET" SomeCommand PASSWORD 其中SomeCommand现在读取其中的环境变量,比如python中的os.environ[“PASSWORD”]。虽然密码现在可用的时间较短:它是运行SomeCommand的命令行arg toenv(在环境中使用密码,因此观看/proc的

我知道,如果我在bash中运行一个命令,那么其他用户可以使用许多不同的方式查看参数。所以
SomeCommand$PASSWORD
是个坏主意。如果我这样做的话,我想也是这样

env PASSWORD="SECRET" SomeCommand PASSWORD
其中SomeCommand现在读取其中的环境变量,比如python中的
os.environ[“PASSWORD”]
。虽然密码现在可用的时间较短:它是运行SomeCommand的命令行arg to
env
(在环境中使用密码,因此观看
/proc
的人将看到
env password=“SECRET”SomeCommand密码
。请注意,
/proc/PID/environ
仅可由root用户读取,并且由于
env
通常寿命较短,因此更安全,但仍会泄漏其参数)

但是,如果我使用
export
例如
export PASSWORD=“SECRET”;SomeCommand密码
,因为
导出
是bash内置的(也就是说,它不会泄漏导出的内容,比如通过
proc

SomeCommand$PASSWORD是个坏主意

对。在SomeCommand期间,密码将显示在ps(1)检查的命令行和/proc中

env PASSWORD=“SECRET”SomeCommand密码

env
期间,机密将显示在
ps
和/proc中;它将在(私有)环境中驻留一段时间。这个解决方案稍微好一点(或好得多)

如果我使用export,例如export PASSWORD=“SECRET”,是否同样适用;因为导出是bash内置的,所以使用SomeCommand密码

export
是bash内置的事实并不意味着什么。这个解决方案甚至更糟糕,因为现在
PASSWORD=secret
将在SomeCommand期间显示在/proc中(作为SomeCommand的environvar),而将永远显示在您自己的环境中!除非你事后把它拆开;然后,情况与使用
env
相同

也许您可以将密码存储在您拥有的文件中,其他人无法读取,SomeCommand应该从该文件中获取密码。或者,更好的是,实现一些机制使密码唯一:我的意思是,例如,根据当前的日期/时间,用一些东西扰乱你的秘密,并让SomeCommand解读秘密。即使有人(root?)读到了被篡改的秘密,也不会很快破坏安全性

评论后更新:考虑到没有人可以向[魔鬼之名]root隐藏任何信息,那么问题在于,与其他普通用户相比,将注意力集中在隐私上。他们无法读取文件/proc/PID/environment,因此可以认为该环境是安全的。鉴于此,解决方案

导出密码=机密;SomeCommand密码

是最好的,因为它将在安全的自有环境中写入密码,然后启动
SomeCommand PASSWORD
,该密码将在ps(1)中可见,但不包含实际的密码

另一个解决方案

env PASSWORD=机密命令密码

非常相似,但在短时间内,这个秘密将被ps(1)看到。在这短时间之后,
env
export
方法是等效的。 使用
export
将在当前环境中保留
PASSWORD=secret
,而
env
将不会:但假定环境是安全的,bash历史文件(包含最后执行的命令的文件)也是安全的

以下是rici评论后的更新:右-无需使用导出。简单的
PASSWORD=secret SomeCommand PASSWORD
的优点是从ps看不到密码,并且在当前环境中也不会存储密码。这么简单。。。3个大脑比2个好的证明

最后一点注意:如果root用户可以访问SomeCommand的源,那么如上所述,对秘密进行加扰可能会被root用户打败。如果无法访问源,root仍然可以反汇编SomeCommand。如果需要,root可以查看系统的所有内存。换句话说,必须信任根用户

SomeCommand$PASSWORD是个坏主意

对。在SomeCommand期间,密码将显示在ps(1)检查的命令行和/proc中

env PASSWORD=“SECRET”SomeCommand密码

env
期间,机密将显示在
ps
和/proc中;它将在(私有)环境中驻留一段时间。这个解决方案稍微好一点(或好得多)

如果我使用export,例如export PASSWORD=“SECRET”,是否同样适用;因为导出是bash内置的,所以使用SomeCommand密码

export
是bash内置的事实并不意味着什么。这个解决方案甚至更糟糕,因为现在
PASSWORD=secret
将在SomeCommand期间显示在/proc中(作为SomeCommand的environvar),而将永远显示在您自己的环境中!除非你事后把它拆开;然后,情况与使用
env
相同

也许您可以将密码存储在您拥有的文件中,其他人无法读取,SomeCommand应该从该文件中获取密码。或者,更好的是,实现一些机制使密码唯一:我的意思是,例如,根据当前的日期/时间,用一些东西扰乱你的秘密,并让SomeCommand解读秘密。即使有人(root?)读到了被篡改的秘密,也不会很快破坏安全性

评论后更新:考虑到没有人可以向[魔鬼之名]root隐藏任何信息,那么问题在于,与其他普通用户相比,将注意力集中在隐私上。他们无法读取文件/proc/PID/environment,因此可以认为该环境是安全的。鉴于此,解决方案

导出密码=机密;SomeCommand密码

是最好的,因为它会秘密地写