Bash
導出包含密碼的變數然後重置它是否安全?
我的腳本需要多次呼叫需要密碼的程序,只能作為環境變數傳遞。因為我只想向使用者詢問密碼一次,所以我這樣做了:
read -s PASSPHRASE export PASSPHRASE program some_option program some_other_option program yet_another_option PASSPHRASE=""
據我了解,
PASSPHRASE
變數的內容只能由目前 shell 訪問,並且program
在三個呼叫期間,然後變數被重置,其他任何人都無法訪問密碼。我是對的,還是我做錯了?
我擔心系統上的其他使用者(不包括
root
)以及在我的使用者帳戶上執行的其他程序。
定義“安全”
- root 可以隨時讀取所有內容,因此 root 沒有什麼是安全的
- 使用者 U 的環境變數對其他使用者是安全的
- 使用者 U 和程序 P 的環境變數不受使用者 U 執行的程序 Q 的影響
因此,root 可以在短時間內讀取該環境變數,而由同一使用者執行的其他程序可以在短時間內讀取該環境變數
解決方案:
- 自己的根,或信任根
- 不要使用同一使用者執行其他程序
- 以自己的使用者身份執行這些程序
如果您不想導出 env var,可以這樣呼叫命令:
$PASSPHRASE command-name -option
可能會讓事情變得更安全一些,但由同一使用者執行的其他程序仍然可能會通過一些技巧(ktrace/strace,調試)看到它們