前段时间我注意到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) 在了解了在命令行中使用密码的问题后,我需要找到一种方法来为程序提供密码而不会出现问题(密码不会被记录在某处)。
我有一个 bash 脚本,它可以从源代码自动安装整个 LAMP 服务器:Apache、FastCGI、PHP 和 MySQL。这些安装需要密码,尤其是 MySQL。
如何在不泄露密码的情况下使脚本完全自动化?
编辑(UTC 时间 6 月 9 日,3:55):
我在命令行上通过 root 使用密码调用 mysql:
root@dor-desktop:/home/dor# PASS=`cat /home/dor/tmpf/pass`
root@dor-desktop:/home/dor# mysql -u root -p"$PASS"
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6
Run Code Online (Sandbox Code Playgroud)
(在我们的例子中,PASS="p4ssw0rd")
我ps aux | grep mysql
通过我的普通用户(dor)执行,它没有显示密码!
(一些)ps
输出是:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 3562 0.0 0.0 34156 2864 pts/0 S+ 05:53 …
Run Code Online (Sandbox Code Playgroud)