LUKS 自动化脚本
这些脚本可通过回路设备将 LUKS 加密文件系统的创建、挂载、及卸下自动化。
create_encrypted_fs
# 利用 LUKS 在一个回路设备上创建一个加密文件系统的指令壳脚本。
# 来自 Paul Heinlein 放在下面连结的样例
# http://wiki.centos.org/zh/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_FILEumount_encrypted_fs
# 利用 LUKS 卸下回路设备上的加密文件系统的指令壳脚本。
# 来自 Paul Heinlein 放在下面连结的样例
# http://wiki.centos.org/zh/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
firemount_encrypted_fs
# 利用 LUKS 重新挂载回路设备上的加密文件系统的指令壳脚本。
# 来自 Paul Heinlein 放在下面连结的样例
# http://wiki.centos.org/zh/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_FILETranslation of revision 7