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

Naf*_*Kay 6 dm-crypt gpg 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
Run Code Online (Sandbox Code Playgroud)

这里有很多东西不是最优的,即块设备加密不提供密码认证等。

在任何情况下,我都无法以非 root 用户身份打开此设备:

$ gpg2 --decrypt zulu-key.gpg | \
    cryptsetup open -d - zulu.bin zulu
Cannot initialize device-mapper, running as non-root user.
Run Code Online (Sandbox Code Playgroud)

我本质上需要的是一个完整的文件系统,它被加密但存储在一个文件中。我需要能够随意打开和关闭这个加密的文件系统,而无需提升权限。

我曾想过简单地创建一个 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
Run Code Online (Sandbox Code Playgroud)

将以下内容添加到/etc/cryptmount/cmtab

LUKS {
    keyformat=luks
    dev=/home/user/zulu.bin  keyfile=/home/user/zulu.bin
    dir=/home/user/myvault/       fstype=ext2
}
Run Code Online (Sandbox Code Playgroud)

作为root,运行以下命令:

cryptmount --generate-key 32 LUKS
cryptmount --prepare LUKS
mke2fs /dev/mapper/LUKS
cryptmount --release LUKS
Run Code Online (Sandbox Code Playgroud)

现在用户可以通过键入来安装图像

cryptmount LUKS
Run Code Online (Sandbox Code Playgroud)

并通过键入卸载

cryptmount -u LUKS
Run Code Online (Sandbox Code Playgroud)

通过使用chown// ,您应该chgrp能够chmod阻止其他用户myvault

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