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


Answers:


9

首先免责声明:我尚未在Ubuntu上完成此操作,而是在使用启用了自定义Linux 4.2.3内核的Debian“ Stretch”安装的计算机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]
    

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

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

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

Arch Wiki中的文章建议阅读以下博客文章,该文章的作者编写了一个程序来简化某些步骤:blog.quarkslab.com/…在编写本文时,16.04仍在开发中,并且具有两个相应的内核配置选项集,尽管e2fsprogs仍为1.42版。
LiveWireBT

好吧...我尝试了这些说明,但文件夹被阻止了……在以下文件上cp .. /secret/home/$USER/.«cp:无法创建常规文件'/secret/home/alexis/test-top-secret-image.svg':不是必需的密钥可用»。我只是听从您的指示,所以我想有些变化。
亚历克西斯·威尔克

/usr/bin/e4crypt” 的第二个实例缺少“ / [s] bin”中的“ s”。
亚历克西斯·威尔克

3

Linux 4.1附带了一个新的Ext4功能,用于加密文件系统的目录。加密密钥存储在密钥环中。首先,请确保已启用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-它将加密的文件名视为无效。


该答案存在严重的格式问题。我试图尽我所能地进行改进,但对我来说却没有意义,为什么人们显然会尝试使用markdown格式,处理复杂的命令并同时在Arch Wiki中进行类似的编辑,但随后看起来预览中呈现的垃圾,并决定将其保留为原样。没有令人满意的解释或进一步的参考资料为什么必须删除这些行。此外,建议以非预期的方式使用debuild(对于非debianized软件包,Debian中有一个实验性软件包)并且不起作用。-1
LiveWireBT
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.