缘起
我有一个备份的Shell脚本,传入用户名,密码,然后脚本开始备份数据库.
模拟备份的脚本
[lihuilin@lihuilin ~]$ cat backup.sh
#!/bin/bash
echo pwd:$1
sleep 1m
执行脚本
[lihuilin@lihuilin ~]$ ./backup.sh password
pwd:password
但是其他用户使用ps命令,可以直接看到我的密码
[lihuilin@lihuilin ~]$ ps -ef | grep backup
lihuilin 3163 2997 0 21:44 pts/1 00:00:00 /bin/bash ./backup.sh password
lihuilin 3183 3168 0 21:44 pts/2 00:00:00 grep backup
[lihuilin@lihuilin ~]$
这太崩溃了.有两种方式可以避免这种情况
1.按照如下内容修改脚本
[lihuilin@lihuilin ~]$ cat backup.sh
#!/bin/bash
read pwd
echo pwd:${pwd}
sleep 1m
然后使用如下调用方式
[lihuilin@lihuilin ~]$ ./backup.sh <
password
EOF
这时,在ps命令中就已经看不到敏感信息了
[lihuilin@lihuilin ~]$ ps -ef | grep backup
lihuilin 3212 2946 0 21:50 pts/0 00:00:00 /bin/bash ./backup.sh
lihuilin 3215 2997 0 21:50 pts/1 00:00:00 grep backup
但是在/proc/pid/fd/下,仍然记录了该参数的值
[lihuilin@lihuilin ~]$ ps -ef | grep backup
lihuilin 3212 2946 0 21:50 pts/0 00:00:00 /bin/bash ./backup.sh
lihuilin 3218 2997 0 21:51 pts/1 00:00:00 grep backup
[lihuilin@lihuilin ~]$ cd /proc/3212/fd
[lihuilin@lihuilin fd]$ cat 0
password
[lihuilin@lihuilin fd]$
2.使用另外一种调用方式
脚本如下,内容同第一种修改方式
[lihuilin@lihuilin ~]$ cat backup.sh
#!/bin/bash
read pwd
echo pwd:${pwd}
sleep 1m
调用方式
[lihuilin@lihuilin ~]$ echo 'password' | ./backup.sh
pwd:password
在另外一个用户,无论是ps命令,还是查看/proc信息,都不能看到敏感信息了

显然,第二种方式比第一种方式更加安全.

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29254281/viewspace-1578997/
,如需转载,请注明出处,否则将追究法律责任。