非互動式 ecryptfs 目錄加密/解密
我可以從腳本中解密 ecryptfs Private 目錄嗎?
我對此類活動的基本案例是進行遠端備份。想像一下,您有一台機器(稱為 privatebox),其中包含一個加密的私有目錄,用於儲存您的照片(或其他一些敏感資訊)。它僅在登錄時解密。假設您希望能夠在遠端電腦上編寫腳本,該腳本將登錄到 privatebox,解密目錄以添加照片,然後重新加密並註銷。所有這些都不需要使用者互動步驟(也許它從 cron 執行)。請注意,私人郵箱的密碼不會以純文字或任何形式儲存在私人郵箱中。並且由於它會被加密(更新期間除外),如果有人獲得 SD 卡等,它將受到保護。
這樣的腳本會像這樣工作(在我看來):
- 在使用密碼加密的 privatebox 上設置私有目錄
- 將 ssh 密鑰從本地機器設置到 privatebox,以便您可以非互動方式使用 ssh(cron 可以登錄)
- 然後呢?如果您知道密碼,如何以非互動方式解密私人文件夾?
似乎 ecryptfs 專門設計為不允許這樣做(即使使用 SSH 密鑰欺騙,您仍然必須手動掛載您的私有目錄)。
基本上,我正在尋找的是“ecryptfs-mount-private”的非互動式版本或類似的東西,如果有人知道解決方案的話。就像是:
% ecryptfs-mount-private -p $PASSPHRASE
我可以在哪里傳遞密碼而不必輸入密碼。
如果 ecryptfs 不能做到這一點,有沒有人知道替代方案?謝謝!
好的,我想通了。感謝您對 Xen2050 的幫助,我在這裡沒有足夠的聲譽來給您投票(還)。
這是適用於我的 bash 腳本:
#Set this variable to your mount passphrase. Ideally you'd get this from $1 input so that the actual value isn't stored in bash script. That would defeat the purpose. mountphrase='YOURMOUNTPASSPHRASE' #Add tokens into user session keyring printf "%s" "${mountphrase}" | ecryptfs-add-passphrase > tmp.txt #Now get the signature from the output of the above command sig=`tail -1 tmp.txt | awk '{print $6}' | sed 's/\[//g' | sed 's/\]//g'` rm -f tmp.txt #Remove temp file #Now perform the mount sudo mount -t ecryptfs -o key=passphrase:passphrase_passwd=${mountphrase},no_sig_cache=yes,verbose=no,ecryptfs_sig=${sig},ecryptfs_cipher=aes,ecryptfs_key_bytes=16,ecryptfs_passthrough=no,ecryptfs_enable_filename_crypto=no /home/user/.Private /home/user/Private
請注意,我必須禁用文件名加密才能使其正常工作。當我嘗試使用文件名加密時,在掛載過程中出現庫錯誤。為了不進行文件名加密,您必須在創建 Private/ 目錄時使用以下內容:
ecryptfs-setup-private -n
這現在對我有用。
有些人會說“為什麼要這樣做?”,好吧,我並不總是希望在每次登錄時都掛載我的私人數據。我想要一種快速安裝數據的方法,不需要我使用我的實際使用者登錄密碼。想像一下,我想與其他人共享數據?我必須給他們我的密碼。使用掛載密碼可以讓我擁有一個比我的登錄更安全的掛載密碼。如果您想自動掛載數據並將片語儲存在某處(可能在 U 盤上作為解鎖數據的密鑰),這也很有用。我永遠不想將我的登錄密碼以純文字形式儲存在任何地方。但是,如果您知道數據的內容,並且知道數據本身的私密性不如您自己的帳戶,那麼這是一個很好的解決方案。