[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/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


2023-09-11 07:24