如何在Debian上创建一个随机密钥,加密的交换分区,将其称为“ by-uuid”?


8

明智的做法是,如果在GNU / Linux系统上实现了任何类型的块设备加密,也要对交换分区进行加密,因为任何解密的数据都可以随时以明文形式写入交换。

在debian手册页上查看“ crypttab”,我看到了一个在启动时创建随机密钥交换分区的示例,因此随着引导的进行,密钥是随机设置的,并且只有系统本身知道:

# Encrypted swap device
cswap /dev/sda6 /dev/urandom cipher=aes-cbc-essiv:sha256,hash=ripemd160,size=256,swap

在此示例中,交换设备由常规dev路径引用,即 /dev/sda6

例如,如果插入了USB驱动器,则绝对设备路径可能会更改,并在启动时重新分配。如果用户/dev/sda6碰巧是一个与预期不同的分区,并且随后被随机交换数据覆盖,则用户将非常不高兴!

因此,解决方案似乎是:使用UUID代替设备路径(因为UUID不应更改),替换/dev/sda6/dev/disk/by-uuid/<whatever the uuid of dev/sda6 is>

但是……这就是问题所在:每次cryptsetup在引导时重新创建加密的交换分区时,都会为其生成一个新的UUID!h!

因此,我们需要以某种方式保留此加密文件系统的UUID。我认为cryptsetup可以通过其--offset开关来做到这一点,从而允许保留LUKS标头和UUID。

我找到了以下URL:https : //wiki.archlinux.org/index.php/System_Encryption_with_LUKS#Using_UUIDs_with_encrypted_swap_partitions

有谁知道如何在Debian OS上实现针对Arch Linux所述的解决方案?该文档中引用的初始化脚本似乎在Debian OS上不存在

谢谢!

编辑 一个人可以使用以下命令使用ecryptfs达到相同的目的(加密的交换空间): ecryptfs-setup-swap 避免困扰设备加密的问题。看看这个AskUbuntu查询


“人们可以使用ecryptfs达到相同的目的,而不会遇到困扰设备加密的问题。” 否,因为ecryptfs-setup-swap它只是为您配置dm-crypt/ 的助手crypttab。与ecryptfs文件级驱动程序一样,它不能处理整个分区,因此将其分配到dm-crypt。您可能会发现此方法更加用户友好,但是最终您并没有取得任何不同。如果有的话,这种方法(包括UUID)的怪癖可能使我比起我刚从第一手原则开始做时更加困惑……尽管我学到了更多。
underscore_d

Answers:


6

每次cryptsetup在引导时重新创建加密的交换分区时,都会为其生成一个新的UUID!h!

在/ etc / crypttab中,使用/ dev / disk / by-id代替/ dev / disk / by-UUID来引用您的交换分区。例如,用于交换的/ etc / fstab条目可能是

#<file system> <mount point> <type> <options> <dump> <pass>
/dev/mapper/cswap none swap sw 0 0

然后,/ etc / crypttab中正确的对应条目将类似于

# <name> <device> <password> <options>
cswap /dev/disk/by-id/ata-SAMSUNG_SSD_830_Series_S0XYNEAC762041-part5 /dev/urandom swap,cipher=aes-cbc-essiv:sha256,size=256

请注意,上面的设备由/ dev / disk / by-id引用,您可以通过在CLI上键入以下内容来查找驱动器:

ls -lF /dev/disk/by-id

注意,通过ID名称指的是型号和序列号,这是极不可能的重叠与任何其他设备可能会堵塞英寸
cscracker

...这可能是一件好事,对于可能会想知道的读者来说是一件好事。您不想配置加密的交换,因为/dev/sdaN有一天要插入另一张磁盘,然后发现您的内核命名顺序已经改变,并且您的非交换分区之一已被破坏。UUID也会很好,但是我认为关键问题是它存储在分区的前几个字节中,因此我们得到了这里讨论的不兼容的“鸡与蛋”方案。
underscore_d

3

在我的/ etc / crypttab中,

# <target name>  <source device>        <key file>   <options>
swap             /dev/mapper/cswap      /dev/random  swap

/ dev / mapper / cswap是由LVM创建的逻辑卷,它负责正确分配逻辑卷名,而与驱动器号无关。它还允许我轻松调整交换分区的大小。


0

尝试实施解决方案的其余部分,而忽略init文件。似乎只有一部分init脚本可以保护您。Debian不能以这种方式保护您,或者当您尝试使用它启动时,它会给您错误消息,希望可以将您带到正确的位置。

我还要注意IIRC Debian和ArchLinux的/ etc / crypttab具有不同的格式(我知道这是疯狂的,但是几年前我从Ubuntu移到Arch,最终决定使用纯bash而不是与crypttab混在一起)。


感谢您的答复。是的,我同意Arch脚本是一个健全性检查,以确保该分区看起来像是交换分区。但是我在想要插入USB驱动器,然后重新启动以找到正在使用的非交换分区。我想我会流下真正的眼泪...我为我能得到的所有健全性检查而感激!
2011年

那不应该发生,因为您首先使用它的UUID来找到它。因此,它所能找到的只是交换分区,或者什么也没有。
idupree

0

运行ecryptfs-setup-swap或手动运行:

此配置在启动时使用随机生成的密钥,并且不支持休眠到硬盘!您应该通过自己的DE电源管理实用程序禁用休眠功能,并将其设置为“紧急时关闭”,以避免数据丢失!

切换到管理员/ root帐户

su root或sudo每个命令

禁用掉期

交换-a

找到现有的交换分区

lsblk

例如:sda3 8:3 0 8G 0部分[SWAP]

覆盖旧交换

dd if = / dev / zero bs = 1024000 of = / dev / sda <#>

例如:dd if = / dev / zero bs = 1024000 of = / dev / sda3

FSTAB设置

vim / etc / fstab

将旧的SWAP设备替换为crypttab映射器名称:/ dev / mapper / cswap

OLD UUID = d03f3d8e-7888-48a5-b3cc-41de8dbbcfdc交换交换默认值为0 0

/ dev / mapper / cswap none swap pri = 1,默认0 0

加密设置

ls -lF / dev / disk / by-id

例如:ata-HGST_HTS545050A7E680_TEK55D4F0BU3GV-part3-> ../../sda3

vim / etc / crypttab

cswap / dev / disk / by-id / ata-HGST_HTS545050A7E680_TEK55D4F0BU3GV-part3 / dev / urandom swap,cipher = aes-cbc-essiv:sha256,size = 256

主动加密交换

重新启动计算机

验证加密交换操作

dmsetup -C信息

示例:cswap 253 0 L--w 2 1 0 CRYPT-PLAIN-cswap

lsblk

示例├─sda38:3 0 8G 0部分
│└─cswap253:0 0 8G 0隐窝[SWAP]

猫/ proc /掉期

示例:文件名类型大小已使用优先级/ dev / dm-0分区8385532 0 -1

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.