Shell指令碼對ps命令隱藏引數
緣起
我有一個備份的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資訊,都不能看到敏感資訊了
顯然,第二種方式比第一種方式更加安全.
我有一個備份的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 <
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部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-1578997/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- shell指令碼的命令列引數 - todo指令碼命令列
- 檢視資料庫中的隱藏引數(指令碼)資料庫指令碼
- 如何使用SHC對Shell指令碼進行封裝和原始碼隱藏指令碼封裝原始碼
- Oracle引數-隱藏引數Oracle
- 隱藏程式命令列引數,例如輸入密碼等高危操作命令列密碼
- Oracle 隱藏引數使用Oracle
- bash shell指令碼接受多個引數指令碼
- 常用指令碼:獲取隱含引數指令碼
- oracle 檢視隱含引數指令碼Oracle指令碼
- Oracle隱形引數查詢指令碼Oracle指令碼
- 隱藏引數查詢sqlSQL
- 檢視oracle隱藏引數Oracle
- Oracle 各版本引數/隱藏引數 介紹Oracle
- go 呼叫 shell 指令碼 如何傳遞引數Go指令碼
- RestCloud ETL解決shell指令碼引數化RESTCloud指令碼
- shell的引數和指令碼流程改進指令碼
- shell (3)指令碼引數傳遞與數學運算指令碼
- TCL指令碼讀取命令列引數指令碼命令列
- 檢視Oracle隱藏引數的SQLOracleSQL
- 隱藏引數查詢和dictionary viewView
- Linux/Unix shell 引數傳遞到SQL指令碼LinuxSQL指令碼
- Shell 中 $ 關於指令碼引數的幾種用法指令碼
- oracle隱藏引數的檢視和使用Oracle
- Shell指令碼中cd命令使用指令碼
- Mac顯示和隱藏“隱藏檔案”命令Mac
- shell指令碼中main函式中$#獲取不到指令碼傳入引數個數淺析指令碼AI函式
- Linux SHELL if 命令引數說明Linux
- 獲取資料庫中所有隱藏引數資料庫
- 用隱藏引數為Windows Commander提速(轉)Windows
- MAC如何顯示隱藏檔案和隱藏隱藏檔案的命令Mac
- Shell指令碼常用命令整理指令碼
- shell指令碼中cd命令無效指令碼
- shell和bash指令碼命令學習指令碼
- 輕鬆使用“Explain Shell”指令碼來理解 Shell 命令AI指令碼
- 【指令碼】隱含引數及註釋資訊的查詢方法指令碼
- 【IMPDP】【IMP】SQL指令碼盡收眼底——SHOW引數與SQLFILE引數對比SQL指令碼
- Mac下顯示和隱藏隱藏檔案的命令Mac
- Linux命令和shell指令碼學習Linux指令碼