2011-06-12 51 views
8

通過密碼OpenSSL的,我們知道我們可以使用此命令加密使用OpenSSL文件:安全地通過stdin

openssl aes-256-cbc -a -salt -in twitterpost.txt -out foo.enc -pass stdin 

的密碼會從標準輸入讀取。因此,爲了事先提供密碼,我們需要做的只是前面的

到上述命令。我的問題是:我怎樣才能更安全地做到這一點?上述方法看起來不夠安全。

我很感激這方面的一些評論,所以我可以更好地理解這個問題。

回答

13

幾乎所有你使用的機制都會被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使用環境變量(再一次得到它在那裏沒有透露它的伎倆)

+0

因此,如果我有一些軟件讓用戶在某個用戶界面中鍵入密碼,然後將此密碼寫入此文件(使用正確的權限),然後它調用這些終端命令,您會說是安全的?從這個意義上說:如果計算機已被第二個應用程序入侵以獲取此密碼,那麼該用戶有一些嚴重的安全問題需要擔心。實際上,它可能是一些專門用來攻擊我自己軟件的軟件:)你對此有何想法? – Enchilada 2011-06-12 13:06:19

+1

這會讓事情變得相對安全,但是如果有專門設計來攻擊你的程序的應用程序,那麼所有的投注都關閉 - 我們可以在輸入密碼時窺探鍵盤,我們可以讀取I/O,因爲文件是正在寫入,我們可以讀取文件,我們可以讀取您的環境。幾乎沒有保護是100%安全的 - 您可以使用'打開文件,取消鏈接,但保持文件句柄打開並傳遞句柄'技巧,因此文件系統上沒有密碼跟蹤(使用fd:number作爲參數-pass)使用UI的應用程序也使用fd – Petesh 2011-06-12 19:43:48

+1

如果這是gnome中桌面應用程序的一部分,則可以使用gnome-keyring作爲密碼的安全存儲位置,因爲它是加密的並且通常不可訪問當用戶沒有登錄時(KDE有kwallet IIRC)。 Adobe AIR應用程序也有一個密碼存儲機制(我不知道AIR的安全機制),但由於您使用的是shell腳本語法,因此我認爲這些並不是真正的選擇。 – Petesh 2011-06-12 19:57:10

1

將密碼放入bash或其他腳本文件中,併爲其設置600個權限。這將只允許您查看該文件,並且密碼將不會在任何地方顯示。

11

短版

使用命名管道。

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,給你帶來虛假的安全感。這就是說,我不是安全專家,所以如果任何人想讓我陷入遺忘(並告訴我爲什麼),那麼不用客氣。

0

如果我理解正確的,你的演唱會約

$ echo "someGoodPassword" | openssl (...) -pass stdin 

是,密碼會在進程列表中的所有用戶的時間短一些量可見。可以很容易地使用bash的<<<重定向周圍的工作(不會在普通的舊POSIX殼工作,雖然):

$ openssl (...) -pass stdin <<<"someGoodPassword" 

此構造支持可變插值(<<<"$password")和命令輸出可以進一步管道或重定向到文件照常。