[FrontPage] [TitleIndex] [WordIndex

This is a read-only archived version of wiki.centos.org

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


2023-09-11 07:23