我可以ext4
在 Ubuntu 15.04 上使用核心 4.1 建立新的加密分割區嗎?
答案1
首先聲明一下:我沒有在 Ubuntu 上執行此操作,而是在使用我啟用的自訂 Linux 4.2.3 核心安裝了 Debian“Stretch”的電腦上執行此操作EXT4_FS_ENCRYPTION
。
給出的指令公里不完全按照發布的方式為我工作。遺漏了一些內容(命令列參數和步驟)。
- 更新
e2fsprogs
如上圖 產生隨機鹽。我使用以下方法將其儲存在“安全的地方”:
head -c 16 /dev/urandom | xxd -p >~/tmp-salt.txt echo 0x`cat ~/tmp-salt.txt` >~/.cryptoSalt
為了在檔案系統上使用 ext4 加密,必須在超級區塊中設定「加密」標誌。這不是創建 ext4 檔案系統時的預設設定。使用 e2fsprogs 1.43 或更高版本中的“tune2fs”實用程序,設定“加密”選項:
sudo tune2fs -O encrypt /dev/sda4
掛載或重新掛載檔案系統,以便核心知道更改(也許它是自動的,但我只在單獨的分區上執行此操作,所以我不確定。)
在啟用加密的情況下安裝的檔案系統上建立一個目錄:
sudo mkdir -p /secret/home/$USER sudo chown $USER:$USER /secret/home/$USER
在密鑰環中建立密鑰並使用它來設定要加密的目錄的策略(
sudo
這裡不需要該命令):$ /usr/sbin/e4crypt add_key -S s:`cat ~/.cryptoSalt` Enter passphrase (echo disabled): Added key with descriptor [0132fed69f946c86] $ /usr/bin/e4crypt set_policy 0132fed69f946c86 /secret/home/$USER Key with descriptor [0132fed69f946c86] applies to /secret/home/theuser.
每次重新啟動後,
add_key
可以使用此命令設定用於解密目錄及其後代的金鑰:$ /usr/sbin/e4crypt add_key -S s:`cat ~/.cryptoSalt` Enter passphrase (echo disabled): Added key with descriptor [0132fed69f946c86]
輸入上一個步驟中使用的相同密碼,您不必記住描述符十六進位字串。
也可以
add_key
直接使用。這將使用檔案系統特定的鹽(因此該分割區下的所有資料夾都將具有相同的鹽)$ /usr/sbin/e4crypt add_key /secret/home/$USER Added key with descriptor [0132fed69f946c86] Key with descriptor [0132fed69f946c86] applies to /secret/home/theuser.
答案2
Linux 4.1 附帶了一個新的 Ext4 功能來加密檔案系統的目錄。加密密鑰儲存在密鑰環中。首先,請確保您已啟用核心CONFIG_KEYS
選項CONFIG_EXT4_FS_ENCRYPTION
並且具有 4.1 或更高版本的核心。
首先,您需要將 e2fsprogs 更新至至少版本 1.43,在撰寫本文時該版本仍處於 WIP 狀態,因此我們需要從git 儲存庫:
$ git clone git://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git
e4crypt 來源已停用其原始程式碼中的相關部分,透過編輯misc/e4crypt.c 並刪除第 714 行附近的這兩行來啟用它:
printf("arg %s\n", argv[optind]);
exit(0);
現在建置並安裝新的 e2fsprogs:
$ sudo apt-get install devscripts build-essential gettext texinfo pkg-config debhelper m4
$ debuild
$ sudo dpkg -i e2fsprogs_1.43-WIP_amd64.deb
現在檢查您的版本,它應該是 1.43-WIP:
# e2fsck -V
e2fsck 1.43-WIP (18-May-2015)
Using EXT2FS Library version 1.43-WIP, 18-May-2015
要使用金鑰,我們需要安裝該keyutils
軟體包:
$ sudo apt-get install keyutils
讓我們建立一個要加密的目錄。只能在空目錄上設定加密策略:
$ sudo mkdir -p /encrypted/dir
首先產生一個隨機鹽值並將其儲存在安全的地方:
$ head -c 16 /dev/random | xxd -p
877282f53bd0adbbef92142fc4cac459
現在產生一個新金鑰並將其新增至您的鑰匙圈:每次刷新鑰匙圈(重新啟動)時都應重複此步驟
$ sudo e4crypt -S 0x877282f53bd0adbbef92142fc4cac459
Enter passphrase (echo disabled):
Added key with descriptor [f88747555a6115f5]
現在您知道了金鑰的描述符。確保您已將鑰匙新增至鑰匙圈:
$ keyctl show
Session Keyring
1021618178 --alswrv 1000 1000 keyring: _ses
176349519 --alsw-v 1000 1000 \_ logon: ext4:f88747555a6115f5
快完成了。現在為目錄設定加密策略:
$ e4crypt set_policy f88747555a6115f5 /encrypted/dir
就這樣。如果您嘗試存取磁碟而不將金鑰新增至鑰匙圈中,檔案名稱及其內容將被視為加密的亂碼。在檔案系統上執行舊版本的 e2fsck 時要小心 - 它會將加密的檔案名稱視為無效。