用 eCryptfs 建立加密的目錄
eCryptfs 是一個檔案系統加密的工具,它可以用來在家目錄中建立一個加密的目錄 ~/Private
並在使用者登入時自動掛載,登出時自動卸載。這個目錄可以用來存放像 ssh key 或是 thunderbird 設定檔之類的個人資料,這樣連 root 都沒辦法取得你的資料了,也不需要每次電腦送修都要換 key/passphrase 了。
eCryptfs 有兩個部份,一個是
kernel module,另一個是 userspace 的管理工具。
1. 安裝 ecryptfs-utils
1-1 設定 kernel module
Kernel module 通常已經內建於 Linux kernel 裡面,但是不一定會在開機時自動載入。以下以 openSUSE 12.3 為例,說明如何設定 eCryptfs 的 kernel module。開啟 /etc/modules-load.d/custom.conf
,並在裡面加入 ecryptfs
一行,重新開機後就會自動載入 eCryptfs kernel module 了。
輸入 lsmod | grep ecryptfs
檢查有沒有載入 eCryptfs module,如果有出現類似以下的輸入就代表已經設定完成:
1-2 設定自動認證掛載 eCryptfs
eCryptfs 利用 PAM
來自動在登入的時候掛載加密的目錄。在這裡同樣的,我將以 openSUSE 12.3 為例說明如何設定 PAM (其他的 distribution 設定方式可能不相同,在此不一一列出,請自行查詢)。
首先先切換目錄到 /etc/pam.d
: cd /etc/pam.d
我們要把這行 auth required pam_ecryptfs.so unwrap
加到下面這行後面:
輸入 grep -n "auth.*pam_unix\.so" *
來找到以下這行,用文字編輯器開啟後,在這行後面加上 auth required pam_ecryptfs.so unwrap
:
接下來,輸入 grep -n "password.*pam_unix\.so" *
找到以下這行,並在它的前面加上 password optional pam_ecryptfs.so
:
最後,輸入 grep -n "session.*pam_unix\.so" *
找到以下這行並在它的後面加上session optional pam_ecryptfs.so
如此就完成了 eCryptfs 的設定,重新開機後繼續下面的步驟。
1-3 安裝 userspace 工具
我們要使用 eCryptfs 只要安裝userspace 的工具,在套件管理程式裡面搜尋安裝 ecryptfs-utils
即可。如果你用的是 openSUSE,可以輸入以下指令安裝:
2. 建立 ~/Private 目錄
輸入以下指令建立你自己的 ~/Private
目錄,注意前面不要加 sudo
。
重新登入後,應該就會看到一個空的 ~/Private
目錄,若是目錄裡面不是空的,而含有 Access-Your-Private-Data.desktop
和 README.txt
兩個檔案,代表~/Private
並沒有成功掛載。
實際加密後的資料存在 ~/.Private
裡面,保留了目錄結構和權限,檔名和檔案內容則是加密後的結果。
密碼管理
eCrypts 會詢問你的登入密碼(login passphrase)和一個掛載密碼(mount passphrase)。你或許會覺得奇怪,為什麼要用兩組密碼呢?這是因為登入密碼可能會經常改變,但是我們希望在修改密碼的時候不需要重新加密所有檔案。eCryptfs 會用掛載密碼來加密檔案,然後再用登入密碼來加密掛載密碼,並將加密後的掛載密碼存在~/.ecryptfs/wrapped-passphrase
這個檔案裡面。這樣當使用者修改登入密碼的時候,eCryptfs 就只要重新加密掛載密碼,而不用重新加密所有檔案。
因此,當使用者修改登入密碼之後,必須手動執行ecryptfs-rewrap-passphrase ~/.ecryptfs/wrapped-passphrase
來重新加密掛載密碼。雖然看起來很奇怪,但這不是一個 bug,而是一個正確的設計。一個理由是 eCryptfs 需要知道原來的登入密碼才能解密加密後過的掛載密碼,另一個理由是若不是這樣的話,root 只要修改某個使用者的密碼就可以取得他的檔案,eCryptfs 就失去它的功能了。
手動掛載 ~/Private
若是修改了登入密碼但是沒有執行 ecryptfs-rewrap-passphrase
,重新登入後會發現~/Private
裡面只有 Access-Your-Private-Data.desktop
和 README.txt
兩個檔案。這時候可以執行 ecrypt-mount-private
來掛載 ~/Private,它會詢問你的登入密碼,注意這時要輸入的是舊的登入密碼。
手動卸載 ~/Private
執行 ecrypt-umount-private
即可卸載 ~/Private。
將要加密的檔案移至 ~/Private
設定好登入自動掛載之後,就可以把需要加密的檔案移到 ~/Private
並建立 symlink。舉例來說,以下這些就是我的 home 裡面需要加密的目錄。
首先,先關閉這些程式(Thunderbird 和 Pidgin),然後把這些目錄移到 ~/Private
之後,再建立 symbolic link 讓程式以為目錄還在 home 裡面:
如此一來,只要登出之後,連 root 都沒辦法存取你的 private key、e-mail 和聊天紀錄了。
參考資料
https://wiki.archlinux.org/index.php/ECryptfs#Auto-mounting
http://ecryptfs.org/