對於 OpenSSL,bash 中有兩種使用環境變數作為密碼的方法:
pass:"${var}"
和env:var
。
我想知道哪種方法提供了最大的安全性,因為手冊頁使得它看起來ps
可以在作為 傳遞時讀取密碼pass:"${var}"
,並且也可以使用env:var
.
OpenSSL 手冊頁的相關部分:
傳遞短語參數
有幾個命令接受密碼參數,通常分別使用 -passin 和 -passout 作為輸入和輸出密碼。這些允許從各種來源獲取密碼。這兩個選項都採用單一參數,其格式如下所述。如果沒有給予密碼參數且需要密碼,則系統會提示使用者輸入密碼:通常會在關閉回顯的情況下從目前終端讀取該密碼。
密碼:密碼
實際密碼是密碼。由於密碼對實用程式(如 Unix 下的「ps」)可見,因此僅應在安全性不重要的情況下使用此形式。
環境:變數
從環境變數var取得密碼。由於其他進程的環境在某些平台上是可見的(例如某些 Unix 作業系統下的 ps),因此應謹慎使用此選項。
答案1
手冊頁對此事非常明確,您應該使用環境:變數方法。
手冊頁是正確的,所有命令列參數都可以透過 ps 看到全部用戶在系統上。
alice$ openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:16384 -aes-128-cbc -pass pass:123456
evil$ ps aux|grep openssl
alice 17594 115 0.0 17108 4424 pts/6 R+ 11:02 0:03 openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:16384 -aes-128-cbc -pass pass:123456
如果您使用環境變量,其他使用者(root 除外)將只能看到該變數的名稱,而看不到其內容。
alice$ OPENSSLPW=123456
alice$ openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:16384 -aes-128-cbc -pass env:OPENSSLPW
evil$ ps aux|grep openssl
alice 17713 115 0.0 17108 4424 pts/6 R+ 11:02 0:03 openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:16384 -aes-128-cbc -pass env:OPENSSLPW