Bash

導出包含密碼的變數然後重置它是否安全?

  • February 14, 2017

我的腳本需要多次呼叫需要密碼的程序,只能作為環境變數傳遞。因為我只想向使用者詢問密碼一次,所以我這樣做了:

read -s PASSPHRASE
export PASSPHRASE
program some_option
program some_other_option
program yet_another_option
PASSPHRASE=""

據我了解,PASSPHRASE變數的內容只能由目前 shell 訪問,並且program在三個呼叫期間,然後變數被重置,其他任何人都無法訪問密碼。

我是對的,還是我做錯了?

我擔心系統上的其他使用者(不包括root)以及在我的使用者帳戶上執行的其他程序。

定義“安全”

  1. root 可以隨時讀取所有內容,因此 root 沒有什麼是安全的
  2. 使用者 U 的環境變數對其他使用者是安全的
  3. 使用者 U 和程序 P 的環境變數不受使用者 U 執行的程序 Q 的影響

因此,root 可以在短時間內讀取該環境變數,而由同一使用者執行的其他程序可以在短時間內讀取該環境變數

解決方案:

  1. 自己的根,或信任根
  2. 不要使用同一使用者執行其他程序
  3. 以自己的使用者身份執行這些程序

如果您不想導出 env var,可以這樣呼叫命令:

$PASSPHRASE command-name -option

可能會讓事情變得更安全一些,但由同一使用者執行的其他程序仍然可能會通過一些技巧(ktrace/strace,調試)看到它們

引用自:https://unix.stackexchange.com/questions/345009