我正在cryptsetup
创建一个基于 LUKS 文件的设备来将信息存储在:
# create a file as a container
dd if=/dev/zero of=zulu.bin bs=1024 count=102400
# create a key
dd if=/dev/urandom bs=1 count=8192 2>/dev/null | \
base64 | \
cut -b 1-8192 | \
tr -d '\n' | \
gpg2 --output zulu-key.gpg -aser DEADBEEF
# format the file-based "device"
gpg2 --decrypt zulu-key.gpg | \
cryptsetup luksFormat --iter-time=10000 --hash sha256 \
--cipher aes-cbc-essiv:sha256 --key-size 256 --key-file - \
zulu.bin
这里有很多事情不太理想,即块设备加密不提供加密身份验证等。
无论如何,我无法以非 root 用户身份打开该设备:
$ gpg2 --decrypt zulu-key.gpg | \
cryptsetup open -d - zulu.bin zulu
Cannot initialize device-mapper, running as non-root user.
我本质上需要的是一个加密但存储在文件中的整个文件系统。我需要能够随意打开和关闭这个加密的文件系统,而无需提升权限。
我考虑过简单地创建一个 tmpfs 或 ramfs,然后简单地dd
将“设备”直接连接到 GnuPG,然后我就可以获得 GnuPG 的加密、身份验证和不可否认性,但我不确定这是否可行。
是否有一种众所周知的方法来分配任意大小的文件系统作为通过 GnuPG 静态加密的文件,可以在 RAM 中打开,然后可以再次通过管道传输到 GnuPG 进行加密以使设备再次离线?作为普通用户可以使用 FUSE 执行此操作吗?
我的用例是需要一个任意大小的加密文件系统,以便将文件写入所述文件系统的程序根本不需要知道加密;当“关闭”设备并将密文作为文件写入磁盘时,GnuPG 会处理加密。
答案1
在您的主文件夹中创建一个空白图像和文件夹:
cd
dd if=/dev/zero of=zulu.bin bs=1024 count=102400
mkdir myvault
将以下内容添加到/etc/cryptmount/cmtab
:
LUKS {
keyformat=luks
dev=/home/user/zulu.bin keyfile=/home/user/zulu.bin
dir=/home/user/myvault/ fstype=ext2
}
作为root
,运行以下命令:
cryptmount --generate-key 32 LUKS
cryptmount --prepare LUKS
mke2fs /dev/mapper/LUKS
cryptmount --release LUKS
现在用户可以通过键入来安装图像
cryptmount LUKS
并通过键入卸载
cryptmount -u LUKS
通过使用chown
// chgrp
,chmod
您应该能够阻止其他用户myvault
。
不确定如何将 GPG2 引入其中,但根据cryptmount
联机帮助页,可以在cmtab
文件中指定密钥文件和密码。