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

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

首先是免责声明:我没有使用Ubuntu,但在使用自定义Linux 4.2.3内核安装了Debian“Stretch”的EXT4_FS_ENCRYPTION上,我启用了EXT4_FS_ENCRYPTION

kmeaw给出的说明与我发布的完全不同。 省略了一些事情(命令行参数和步骤)。

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

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

     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] 

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

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

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

Linux 4.1附带了一个新的Ext4function来加密文件系统的目录。 加密密钥存储在密钥环中。 要开始使用,请确保已启用CONFIG_KEYSCONFIG_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 – 它会将加密的文件名视为无效。