LUKS 自動化腳本
這些腳本可透過回路裝置將 LUKS 加密檔案系統的建立、掛載、及卸下自動化。
create_encrypted_fs
# 利用 LUKS 在一個回路裝置上建立一個加密檔案系統的指令殼腳本。 # 來自 Paul Heinlein 放在下面連結的範例 # http://wiki.centos.org/zh-tw/TipsAndTricks/EncryptedFilesystem # 經 Phil Schaffner 改寫 # 建立一個適合你需要的空白檔案。一個乎合指令行上以 MB 指定大小的 # 稀疏檔案會被建立起來。沒有真正的資料塊會被寫入,因為我們稍後會 # 強行分派資料塊。 if [ "$#" -lt 2 ]; then echo $"Usage: $(basename $0) <path_to_file> <size_in_MB>" exit 1 fi SECRET_PATH=$(dirname $1) SECRET_FILE=$(basename $1) SECRET_FS=$SECRET_PATH/$SECRET_FILE if [ ! -d $SECRET_PATH ]; then echo "Directory $SECRET_PATH to hold encrypted filesystem does not exist!" exit 1 fi if [ -f $SECRET_FS ]; then echo "File $SECRET_FS already exists. Refusing to overwrite!" exit 1 fi expr "$2 + 1" 2> /dev/null if [ $? = 0 ]; then SECRET_SIZE=$2 else echo "Second parameter should be file size in MB." exit 1 fi # df 要採用 -P(POSIX),否則它會加入分行符號。 # 這是由 Jim Anstadt 發現的 FREE_SPACE=$(df -P -m $SECRET_PATH |grep / | awk '{ print $4 }') if [ $SECRET_SIZE -gt $FREE_SPACE ]; then echo "Not enough space on device for a $SECRET_SIZE MB file!" df -m $SECRET_PATH exit 1 fi dd of=$SECRET_FS bs=1M count=0 seek=$SECRET_SIZE # 收緊檔案的存取權 chmod 600 $SECRET_FS # 將檔案與回路裝置掛鈎 LOOP_DEV=$(losetup -f) losetup $LOOP_DEV $SECRET_FS # 加密裝置內的資料。cryptsetup 會利用 Linux 的裝置對映器來建立 # /dev/mapper/$SECRET_FILE。-y 這個選項指定你將會被問及密碼兩次 #(有一次作檢查之用)。首個指令磁碟區初始化,並設定一條原始金鑰 # 。第二個指令開啟分割區並建立一個對映(在這裡是 # /dev/mapper/$SECRET_FILE)。 cryptsetup -y luksFormat $LOOP_DEV cryptsetup luksOpen $LOOP_DEV $SECRET_FILE # 檢查傳回狀況,並重覆直至沒有問題 while [ ! $? = 0 ]; do cryptsetup luksOpen $LOOP_DEV $SECRET_FILE done # 檢查它的狀況(選擇性) cryptsetup status $SECRET_FILE # 現在我們將新加密的裝置填滿零。這會強制分派資料塊。由於這些零已 # 被加密,它們對外就看似隨機的資料,即管有人將藏有加密檔案系統的 # 檔案弄到手上,要找尋被加密的資料塊差不多是沒可能。 dd if=/dev/zero of=/dev/mapper/$SECRET_FILE # 建立一個檔案系統及檢查它的狀況 mke2fs -j -O dir_index /dev/mapper/$SECRET_FILE tune2fs -l /dev/mapper/$SECRET_FILE # 將新檔案系統掛載在一個方便的位置 mkdir -p /mnt/cryptofs/$SECRET_FILE mount /dev/mapper/$SECRET_FILE /mnt/cryptofs/$SECRET_FILE df -m /dev/mapper/$SECRET_FILE
umount_encrypted_fs
# 利用 LUKS 卸下回路裝置上的加密檔案系統的指令殼腳本。 # 來自 Paul Heinlein 放在下面連結的範例 # http://wiki.centos.org/zh-tw/TipsAndTricks/EncryptedFilesystem # 經 Phil Schaffner 改寫 if [ "$#" -lt 1 ]; then echo $"Usage: $(basename $0) <path_to_file>" exit 1 fi SECRET_PATH=$(dirname $1) SECRET_FILE=$(basename $1) SECRET_FS=$SECRET_PATH/$SECRET_FILE if [ ! -f $SECRET_FS ]; then echo "File $SECRET_FS does not exist!" exit 1 fi # 卸下檔案系統 umount /mnt/cryptofs/$SECRET_FILE # 移除裝置對映 cryptsetup luksClose $SECRET_FILE # 找尋回路裝置並移除它 LOOP_DEV=$(losetup -a | grep $SECRET_FS | cut -f 1 -d ':') if [ -z $LOOP_DEV ]; then echo "No loopback device found for ${SECRET_FS}!" else losetup -d $LOOP_DEV fi
remount_encrypted_fs
# 利用 LUKS 重新掛載回路裝置上的加密檔案系統的指令殼腳本。 # 來自 Paul Heinlein 放在下面連結的範例 # http://wiki.centos.org/zh-tw/TipsAndTricks/EncryptedFilesystem # 經 Phil Schaffner 改寫 if [ "$#" -lt 1 ]; then echo $"Usage: $(basename $0) <path_to_encrypted_file>" exit 1 fi SECRET_PATH=$(dirname $1) SECRET_FILE=$(basename $1) SECRET_FS=$SECRET_PATH/$SECRET_FILE if [ ! -f $SECRET_FS ]; then echo "File $SECRET_FS not found!" exit 1 fi # 將檔案與回路裝置掛鈎 LOOP_DEV=$(losetup -f) losetup $LOOP_DEV $SECRET_FS # 加密裝置內的資料。 cryptsetup luksOpen $LOOP_DEV $SECRET_FILE # 檢查傳回狀況,並重覆直至沒有問題 while [ ! $? = 0 ]; do cryptsetup luksOpen $LOOP_DEV $SECRET_FILE done # 檢查它的狀況(選擇性) cryptsetup status $SECRET_FILE # 將新檔案系統掛載在一個方便的位置 if [ ! -d /mnt/cryptofs/$SECRET_FILE ]; then mkdir -p /mnt/cryptofs/$SECRET_FILE fi mount /dev/mapper/$SECRET_FILE /mnt/cryptofs/$SECRET_FILE df -m /dev/mapper/$SECRET_FILE
Translation of revision 7