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_FILE
umount_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 fi
remount_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_FILE
Translation of revision 7