以非 root 用户身份打开 LUKS 卷?

以非 root 用户身份打开 LUKS 卷?

我正在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// chgrpchmod您应该能够阻止其他用户myvault

不确定如何将 GPG2 引入其中,但根据cryptmount联机帮助页,可以在cmtab文件中指定密钥文件和密码。

相关内容