如何在文件内部创建加密的文件系统?


16

在flossstuff博客上找到了这个有趣的教程

它说明了如何创建一个空文件,将其格式化为ext4以及将其挂载为设备。

我想知道是否可以将其创建为加密的ext4文件系统。

我尝试使用palimpsest(在“系统”菜单中找到的磁盘实用程序)格式化已经创建的文件系统,但是由于它检测到正在使用的文件系统,因此它不起作用。

如果我尝试卸载文件系统,那将不会起作用,因为它无法检测到该设备(因为它不是像硬盘驱动器或USB驱动器之类的真实设备)。

所以我的问题是,是否有从一开始就将文件系统创建为加密的选项?我使用了以下命令:

创建一个200Mb大小的空文件:

dd if=/dev/zero of=/path/to/file bs=1M count=200

使其为ext4:

mkfs -t ext4 file

将其安装在我家的文件夹中:

sudo mount -o loop file /path/to/mount_point

mkfs命令有什么方法可以创建一个加密的ext4文件系统,要求输入解密密码?

我打算将其用作加密Dropbox中文件的一种方式。



如果要在备份文件时进行适当的加密,则可以考虑使用SpiderOak。更高的安全性和更少的麻烦。
landroni 2015年

Answers:


8

您也可以使用cryptmount加密文件系统,即使该文件系统在文件中也是如此。

cryptmount手册有一个非常简单和详细的解释,我的报告(修改)在这里,它做明确提及的是基于文件的文件系统。

  • 步骤1在中
    添加条目/etc/cryptmount/cmtab,如下所示:

    mycrypt {
        dev=/media/data/mycrypt dir=/home/enzotib/mycrypt
        fstype=ext4 mountoptions=defaults cipher=twofish
        keyfile=/etc/cryptmount/mycrypt.key
        keyformat=builtin
    }
    

    在哪里/media/data/mycrypt创建支持文件,dd并且/home/enzotib/mycrypt是所需的挂载点。

  • 步骤2
    产生一个秘密解密密钥

    sudo cryptmount --generate-key 32 mycrypt
    
  • 步骤3
    执行以下命令

    sudo cryptmount --prepare mycrypt
    

    然后将要求您输入设置密钥时使用的密码

  • 步骤4
    创建文件系统

    sudo mkfs.ext4 /dev/mapper/mycrypt
    
  • 步骤5
    执行

    sudo cryptmount --release mycrypt
    
  • 步骤6
    现在挂载文件系统

    mkdir /home/enzotib/mycrypt
    cryptmount -m mycrypt
    

    然后卸载

    cryptmount -u mycrypt
    

另外,如果您需要加密目录,则encfs可能值得考虑。


感谢您的回答,我已经创建了文件系统,将其加密并上传到Dropbox。稍后,我将尝试在另一台PC上挂载该文件。只是一件事,没有sudo可以完成吗?如果我想将文件和文件系统保持在我的家中(而不是在USB或hardrive之类的媒体中),命令将是相同的而没有sudo或cryptmount是否始终需要root特权?
animaletdesequia 2011年

1
@darent:似乎该命令仅在文件系统设置中需要root权限,但是如果映像文件和安装点归用户所有,则挂载/卸载是用户的操作。要在另一台机器上设置相同的图像文件,我想您应该复制/etc/cryptmount/mycrypt.key并跳过--generate-key步骤。
enzotib

我在最后一步中收到此错误:$ sudo cryptmount -m encriptat输入目标“ encriptat”的密码:e2fsck 1.41.14(2010年12月22日)fsck.ext4:Súperblocnovàlid,provant els blocs decòpiade seguretat。 .. fsck.ext4:超级块中的错误魔术数字/ dev / mapper / encriptat
animaletdesequia

1
@darent:您是否已按照步骤4所示创建文件系统?您是否一致用“ encriptat”代替“ mycrypt”?
enzotib

抱歉,错误是因为我输入的不是(sudo mkfs.ext4 / dev / mapper / mycrypt),而是(sudo mkfs.ext4 mycript)。我直接输入文件,而不是设备。现在,它可以完美运行。对于此消息的格式,我们深表歉意,不知道为什么我不能分隔行(如果按Enter键,它会发布注释而不是创建新行,或者可能是firefox故障……)干杯!编辑:现在我读了您的答案,encriptat名称不是问题(只是修改了您的帖子,并使用加泰罗尼亚语名称放置了文件,但这都是一致的)。Everithing现在工作正常,再次感谢:)
animaletdesequia 2011年

7

请遵循以下步骤来创建一个内部带有文件系统的加密文件:

1.创建给定大小的文件的更快方法是:

fallocate -l 128M /path/to/file

2.使用dm-crypt工具在文件中创建LUKS(Linux统一密钥设置)分区:

cryptsetup -y luksFormat /path/to/file

您可以检查文件是否为加密容器:

/path/to/file: LUKS encrypted file, ver 1 [aes, xts-plain64, sha1] UUID: 7e2af5a1-3fab-43ea-a073-3b9cc6073f00

3.打开加密的容器:

cryptsetup luksOpen /path/to/file data

data是设备映射器卷名称。您可以选择其他名称。

这将打开LUKS设备,并将其映射到我们提供的名称,在本例中,该文件在创建/dev/mapper/data

4.ext4在此设备上创建文件系统:

mkfs.ext4 /dev/mapper/data

5.然后创建挂载点:

mkdir /path/to/mount

6.并在此处安装设备:

mount /dev/mapper/data /path/to/mount

7.要卸载文件系统并关闭LUKS设备:

umount /path/to/mount
cryptsetup luksClose data

现在,您已经加密了带有ext4文件系统的LUKS容器。当您要使用它时,只需重复第3步和第6步。完成后,请调用第7步。

这篇文章对我很有帮助。

同样,您的容器有一天会用完空间。假设加密容器文件的大小为128 MB,我们希望将其大小增加到512 MB。要增加其容量,请执行以下步骤:

1.卸下并关闭LUKS设备(请参阅上面列表中的步骤7)。

2.增加容器文件大小:

 dd if=/dev/zero of=/path/to/file bs=384M count=1 oflag=append conv=notrunc

3.打开LUKS设备。

cryptsetup luksOpen /path/to/file data

4.调整LUKS设备的大小以匹配容器文件的大小。从手册页:

如果未指定--size(以扇区为单位),则使用基础块设备的大小。

因此,您可以:

cryptsetup resize data

5.然后调整ext4文件系统的大小:

e2fsck -f /dev/mapper/data
resize2fs /dev/mapper/data

6.现在您可以挂载文件系统了:

mount /dev/mapper/data /path/to/mount

1
我认为这个答案是最好的和最新的答案。应该选择它作为正确答案!
yurtesen

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.