如何在具有新 4.1 内核的 Ubuntu 15.04 上创建 ext4 加密分区?

如何在具有新 4.1 内核的 Ubuntu 15.04 上创建 ext4 加密分区?

我可以ext4在 Ubuntu 15.04 上使用内核 4.1 创建新的加密分区吗?

答案1

首先声明:我没有在 Ubuntu 上执行此操作,而是在安装了 Debian“Stretch”的机器上使用我启用的自定义 Linux 4.2.3 内核执行此操作EXT4_FS_ENCRYPTION

给出的指示凯梅奥对我来说,它并不像发布的那样工作。有些东西被遗漏了(命令行参数和步骤)。

  • e2fsprogs如上图更新
  • 生成随机盐。我使用以下方法将其存储在“安全的地方”:

    head -c 16 /dev/urandom | xxd -p >~/tmp-salt.txt
    echo 0x`cat ~/tmp-salt.txt` >~/.cryptoSalt
    
  • 为了在文件系统上使用 ext4 加密,必须在超级块中设置“加密”标志。这不是创建 ext4 文件系统时的默认设置。使用 e2fsprogs 1.43 或更高版本中的“tune2fs”实用程序,设置“加密”选项:

    sudo tune2fs -O encrypt /dev/sda4
    
  • 挂载或重新挂载文件系统,以便内核知道更改(也许是自动的,但我只在单独的分区上执行过此操作,所以我不确定。)

  • 在启用加密的文件系统上创建一个目录:

    sudo mkdir -p /secret/home/$USER
    sudo chown $USER:$USER /secret/home/$USER
    
  • 在密钥环中创建密钥,并用它来设置要加密的目录的策略(sudo这里不需要该命令):

    $ /usr/sbin/e4crypt add_key -S s:`cat ~/.cryptoSalt`
    Enter passphrase (echo disabled):
    Added key with descriptor [0132fed69f946c86]
    $ /usr/bin/e4crypt set_policy 0132fed69f946c86 /secret/home/$USER
    Key with descriptor [0132fed69f946c86] applies to /secret/home/theuser.
    
  • 每次重启后,add_key都可以使用该命令设置目录及其后代的解密密钥:

    $ /usr/sbin/e4crypt add_key -S s:`cat ~/.cryptoSalt`
    Enter passphrase (echo disabled):
    Added key with descriptor [0132fed69f946c86]
    

    输入上一步使用的相同密码,您不必记住描述符十六进制字符串。

  • 您也可以add_key直接使用。这将使用文件系统特定的盐(因此该分区下的所有文件夹都将具有相同的盐)

    $ /usr/sbin/e4crypt add_key /secret/home/$USER
    Added key with descriptor [0132fed69f946c86]
    Key with descriptor [0132fed69f946c86] applies to /secret/home/theuser.
    

答案2

Linux 4.1 附带了新的 Ext4 功能,用于加密文件系统的目录。加密密钥存储在密钥环中。要开始使用,请确保您已启用内核CONFIG_KEYS选项CONFIG_EXT4_FS_ENCRYPTION,并且您拥有内核 4.1 或更高版本。

首先,你需要将 e2fsprogs 至少更新到 1.43 版,在撰写本文时,该版本仍处于 WIP 阶段,因此我们需要从git 存储库

$ git clone git://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git

e4crypt 源已禁用其源代码中的相关部分,请通过编辑 misc/e4crypt.c 并删除第 714 行附近的这两行来启用它:

    printf("arg %s\n", argv[optind]);
    exit(0);

现在构建并安装新的 e2fsprogs:

$ sudo apt-get install devscripts build-essential gettext texinfo pkg-config debhelper m4
$ debuild
$ sudo dpkg -i e2fsprogs_1.43-WIP_amd64.deb

现在检查你的版本,它应该是 1.43-WIP:

# e2fsck -V
e2fsck 1.43-WIP (18-May-2015)
        Using EXT2FS Library version 1.43-WIP, 18-May-2015

要使用密钥,我们需要安装keyutils包:

$ sudo apt-get install keyutils

让我们创建一个要加密的目录。只能在空目录上设置加密策略:

$ sudo mkdir -p /encrypted/dir

首先生成一个随机盐值并将其存储在安全的地方:

$ head -c 16 /dev/random | xxd -p
877282f53bd0adbbef92142fc4cac459

现在生成一个新密钥并将其添加到你的密钥环中:每次刷新钥匙串(重新启动)时都应重复此步骤

$ sudo e4crypt -S 0x877282f53bd0adbbef92142fc4cac459
Enter passphrase (echo disabled): 
Added key with descriptor [f88747555a6115f5]

现在您知道了密钥的描述符。请确保已将密钥添加到钥匙串中:

$ keyctl show
Session Keyring
1021618178 --alswrv   1000  1000  keyring: _ses
 176349519 --alsw-v   1000  1000   \_ logon: ext4:f88747555a6115f5

几乎完成了。现在为目录设置加密策略:

$ e4crypt set_policy f88747555a6115f5 /encrypted/dir

就这样。如果您尝试访问磁盘而不将密钥添加到钥匙串中,文件名及其内容将被视为加密的乱码。在文件系统上运行旧版本的 e2fsck 时要小心 - 它会将加密文件名视为无效。

相关内容