前段时间我注意到curl
作为命令行参数提供的用户名和密码没有出现在ps
输出中(尽管它们当然可能出现在您的 bash 历史记录中)。
它们同样不会出现在/proc/PID/cmdline
.
(不过,可以推导出组合的用户名/密码参数的长度。)
演示如下:
[root@localhost ~]# nc -l 80 &
[1] 3342
[root@localhost ~]# curl -u iamsam:samiam localhost &
[2] 3343
[root@localhost ~]# GET / HTTP/1.1
Authorization: Basic aWFtc2FtOnNhbWlhbQ==
User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.15.3 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
Host: localhost
Accept: */*
[1]+ Stopped nc -l 80
[root@localhost ~]# jobs
[1]+ Stopped nc -l 80
[2]- Running curl -u iamsam:samiam localhost &
[root@localhost ~]# ps -ef | grep curl
root 3343 3258 0 …
Run Code Online (Sandbox Code Playgroud) foo.php
例如P455w0rd
,当我尝试使用它时,我将 MySQL 密码保存在一个文件中:
$ cat foo.php | grep '$dbpwd=' | cut -d '"' -f 2 | mysql -U root -p mydb -h friendserver
Enter password: (holds)
$ echo P455w0rd | mysql -u root -p mydb -h friendserver
Enter password: (holds)
Run Code Online (Sandbox Code Playgroud)
这两个选项仍然要求输入密码,从 发送密码的正确方法是stdin
什么?
为什么人们害怕在命令行中写密码?
历史文件位于 中~/.history
,因此它仅对执行命令的用户(和 root)可用。
我有一个存储在 bash 变量中的 Open Office 电子表格文档。我想做以下类似的事情来通过以下方式提供开放式办公室STDIN
:
echo "$openOfficeDoc" | ooffice
Run Code Online (Sandbox Code Playgroud)
但它不起作用。
注意: bash 变量的内容不得写入磁盘。
我要强调的是,我正在尝试将文件的实际数据传递给 Open Office。
我正在尝试将密码存储在 Open Office 电子表格文件中。密码使用 GPG 加密。出于安全原因,我不希望将密码写入磁盘。
bash 变量值是 Open Office 电子表格文档的二进制 blob。它不是ASCII。
我用来创建 blob 的 bash 代码是:
data=$(cat "Encrypted.gpg" | gpg -u "Dor" -d)
Run Code Online (Sandbox Code Playgroud)
WhileEncrypted.gpg
是 Open Office 电子表格的加密文件。
是否可以通过 STDIN 提供 Open Office?