通過密碼OpenSSL的,我們知道我們可以使用此命令加密使用OpenSSL文件:安全地通過stdin
openssl aes-256-cbc -a -salt -in twitterpost.txt -out foo.enc -pass stdin
的密碼會從標準輸入讀取。因此,爲了事先提供密碼,我們需要做的只是前面的
到上述命令。我的問題是:我怎樣才能更安全地做到這一點?上述方法看起來不夠安全。
我很感激這方面的一些評論,所以我可以更好地理解這個問題。
通過密碼OpenSSL的,我們知道我們可以使用此命令加密使用OpenSSL文件:安全地通過stdin
openssl aes-256-cbc -a -salt -in twitterpost.txt -out foo.enc -pass stdin
的密碼會從標準輸入讀取。因此,爲了事先提供密碼,我們需要做的只是前面的
到上述命令。我的問題是:我怎樣才能更安全地做到這一點?上述方法看起來不夠安全。
我很感激這方面的一些評論,所以我可以更好地理解這個問題。
幾乎所有你使用的機制都會被root用戶窺探,所以記住這一點。
echo選項將顯示在'ps
'列表中,使其容易受到普通用戶探聽和查找密碼的影響。
您可以使用-pass file:filename
使用文件,所以你可以使用:
sumask=$(umask)
umask 077
rm -f passfile
cat >passfile <<EOM
someGoodPassword
EOM
umask $sumask
此創建文件,通過其他賬戶(但仍是root可讀)不可讀。一個假設腳本僅用於創建密碼文件,就好像您重複該過程一樣,它往往位於文件中,因此您需要chmod go-rwx
文件使其他用戶無法讀取該文件。
然後使用:
openssl aes-256-cbc -a -salt -in twitterpost.txt -out foo.enc -pass file:passfile
進行加密,使用預先創建密碼文件。
其他機制-pass env:ENVVAR
使用環境變量(再一次得到它在那裏沒有透露它的伎倆)
將密碼放入bash或其他腳本文件中,併爲其設置600個權限。這將只允許您查看該文件,並且密碼將不會在任何地方顯示。
短版
使用命名管道。
openssl aes-256-cbc -a -salt -in twitterpost.txt -out foo.enc -pass file:<(echo -n "someGoodPassword")
龍版
使用命名管道。你可以用bash創建它
<(*output*)
例如,
<(echo -n "content") # without -n echo will add a newline
它會打開一個命名管道,通常是一個FIFO隊列,您將在進程列表類似
/dev/fd/63
看到這將是僅可由當前用戶,將被自動關閉讀取完成後,您不必擔心權限並清理磁盤(如果程序崩潰,管道將關閉,而由另一個應用程序建議的由您創建的文件將保留在磁盤上)。
這樣它會以最快的方式關閉,就在命令讀完之後,並且不用等待它完成任務(我只是做了一個測試:加密一些千兆字節並嘗試讀取命名管道(它是可見的在進程列表中):即使openssl花費時間進行加密,命名管道也會立即關閉)。
您的意見
如果計算機已經被第二應用程序損害獲得此 密碼,那麼用戶有一些嚴重的安全問題擔心 有關。其實,這可能是一些軟件專門用來攻擊 我自己的軟件
如果您的計算機被黑客入侵和攻擊者的相同的用戶權限,你就完了。舉個例子,攻擊者可以很容易地修改你的.bashrc到別名openssl,這樣它就可以開始一個假設的「evil-openssl」來複制你的密碼和數據,然後把所有的東西都交給真正的openssl,給你帶來虛假的安全感。這就是說,我不是安全專家,所以如果任何人想讓我陷入遺忘(並告訴我爲什麼),那麼不用客氣。
如果我理解正確的,你的演唱會約
$ echo "someGoodPassword" | openssl (...) -pass stdin
是,密碼會在進程列表中的所有用戶的時間短一些量可見。可以很容易地使用bash的<<<
重定向周圍的工作(不會在普通的舊POSIX殼工作,雖然):
$ openssl (...) -pass stdin <<<"someGoodPassword"
此構造支持可變插值(<<<"$password"
)和命令輸出可以進一步管道或重定向到文件照常。
因此,如果我有一些軟件讓用戶在某個用戶界面中鍵入密碼,然後將此密碼寫入此文件(使用正確的權限),然後它調用這些終端命令,您會說是安全的?從這個意義上說:如果計算機已被第二個應用程序入侵以獲取此密碼,那麼該用戶有一些嚴重的安全問題需要擔心。實際上,它可能是一些專門用來攻擊我自己軟件的軟件:)你對此有何想法? – Enchilada 2011-06-12 13:06:19
這會讓事情變得相對安全,但是如果有專門設計來攻擊你的程序的應用程序,那麼所有的投注都關閉 - 我們可以在輸入密碼時窺探鍵盤,我們可以讀取I/O,因爲文件是正在寫入,我們可以讀取文件,我們可以讀取您的環境。幾乎沒有保護是100%安全的 - 您可以使用'打開文件,取消鏈接,但保持文件句柄打開並傳遞句柄'技巧,因此文件系統上沒有密碼跟蹤(使用fd:number作爲參數-pass)使用UI的應用程序也使用fd – Petesh 2011-06-12 19:43:48
如果這是gnome中桌面應用程序的一部分,則可以使用gnome-keyring作爲密碼的安全存儲位置,因爲它是加密的並且通常不可訪問當用戶沒有登錄時(KDE有kwallet IIRC)。 Adobe AIR應用程序也有一個密碼存儲機制(我不知道AIR的安全機制),但由於您使用的是shell腳本語法,因此我認爲這些並不是真正的選擇。 – Petesh 2011-06-12 19:57:10