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