ATO*_*OMP 5 security bash environment-variables
我有一个密码存储在环境变量中。
read -s passwd
export passwd
Run Code Online (Sandbox Code Playgroud)
echo $passwd现在我想将其通过管道传输到接受密码的命令stdin(例如,kinit)。但是,如果 bash 已set -x启用,那么这将泄漏密码。
(warning: will leak password if set -x is enabled)
$ echo $passwd | kinit x@example.com
+ kinit x@example.com
+ echo secretpassword
...(kinit output)...
Run Code Online (Sandbox Code Playgroud)
printenv passwd所以我习惯printenv把密码写到stdin,而不是echo。
(is this ok?)
$ printenv passwd | kinit x@example.com
+ kinit x@example.com
+ printenv passwd
...(kinit output)...
Run Code Online (Sandbox Code Playgroud)
当我尝试时,这不会将密码打印到 bash 输出。
printenv?但这真的安全吗?是否有 bash 的配置可能会在某处泄露密码?
编辑:不要认为set -x打印到 stdout/stderr,已修复。
使用 时printenv,必须导出变量,这意味着您将其暴露给脚本中的其他命令,其中任何命令都可能会泄漏它。但是,如果在导出变量和将其用作输入之间没有其他命令,并且在使用后立即取消设置它,则它不太可能意外转储到日志中。
如果您使用的是 bash,则可以使用这里字符串:
kinit x@example.com <<<"$passwd"
Run Code Online (Sandbox Code Playgroud)
这里的字符串不包含在set -x输出中,并且不需要导出该变量:
$ bar=abc
+ bar=abc
$ cat <<<"$bar"
+ cat
abc
Run Code Online (Sandbox Code Playgroud)
但这里的字符串会创建临时文件,因此可以将其视为潜在的泄漏源。
| 归档时间: |
|
| 查看次数: |
5949 次 |
| 最近记录: |