将 LVM 上的 /tmp、/swap 及 /home 加密
这份指引将会协助你采用 cryptsetup LUKS 将 /tmp、/swap 及 /home 加密。我会假设你已经拥有一个安装好的系统,而需要将 /tmp、/swap 及 /home 加密。我也假设 /home 内 藏有你的数据,因此请小心地将 /home 备份才继续前进。CentOS wiki 内有另一份指引,但它针对将文件加密,而不是分区,因此我希望有一份特别针对 /tmp、/swap 及 /home 的指引。这份指引假设你需要将整个分区加密,因此它们现有的数据将会被删除。
1. 系统:
CentOS 5.x
2. 参考:
Encrypted Filesystem
Encrypted /tmp & /swap
3. 系统设置
除非你在安装时没有选择 base,而选择不安装任何东西,否则你应该已经拥有加密时所需的工具。请先检查,然后继续前进。
# rpm -q cryptsetup device-mapper util-linux # modprobe dm_crypt # lsmod | grep dm_crypt
4. 将 /home 备份
我应该不必再告诉你,但请确定你已经将 /home 备份到一个外置存储器,然后才继续前进!就算你的本地磁盘有空间,你亦不应将备份放在现有磁盘上,因为你将要在本地的文件系统上动工。
# cp -arfp /home /some/external/storage
5. 将 /swap 加密
让我们先将 /swap 加密,检查它能运作,然后才转移到 /tmp。我会推荐你将主机关掉,虽然你不想的话也不是必须的。由于直到下次开机前 swap 都不会再被访问,你可以立即将它加密。请现在就创建 /etc/crypttab 这个文件,并加入 swap 的参数。
# vim /etc/crypttab swap /dev/vg0/swap /dev/urandom swap,cipher=aes-cbc-essiv:sha256
请依照你的磁盘区群组名称及布局,修改路径来迎合你的需要。这里指定加密系统在开机时采用 AES 的 SHA 256 位元加密法。每次开机所产生的新密钥将会在系统中一直生效。关机的时候,这条密钥不再有效,因此 /swap 便受到保护。
接着,编辑 /etc/fstab 来反映这些改动。
/dev/mapper/swap none swap defaults 0 0
这样便完成了 swap 的加密。你现在可以重新开机并查看 swap 已被重新启用,或者你可以直接改动 /tmp。
6. 将 /tmp 加密
加密 /tmp 的步骤与 /swap 的稍有不同。你须要在 /etc/fstab 被读入后,利用一个脚本来挂载 /tmp。这个脚本要归功给 clasohm.com,也就是我找到它的地方。当 /etc/fstab 获处理后,一个加密的磁盘区便会被创建起来。基于 /tmp 的访问方法(我假设),/tmp 需要特别的处理。
首先,在 /etc/crypttab 内加入所需的记录,并从 /etc/fstab 中注释掉用来正常挂载 /tmp 的记录。
# vim /etc/crypttab tmp /dev/vg0/tmp /dev/urandom tmp,cipher=aes-cbc-essiv:sha256 # vim /etc/fstab # 请紧记将下列一行改为注释。 #/dev/vg0/tmp /tmp ext3 defaults 1 2
复制来自 clasohm.ocm 的脚本,并将它放置在 /etc/init.d 内。
# vim /etc/init.d/cryptotmp #!/bin/bash # # cryptotmp setup crypted tmp partition # # chkconfig: 2345 01 90 # description: adds crypted tmp partition. . /etc/init.d/functions # See how we were called. case "$1" in start) mount /dev/mapper/tmp /tmp restorecon /tmp action "Adding encrypted tmp" touch /var/lock/subsys/cryptotmp ;; stop) rm -f /var/lock/subsys/cryptotmp ;; *) echo $"Usage: $0 {start|stop}" exit 1 esac exit 0
将脚本设为可执行的,并将 chkconfig 执行在它身上。
# chmod +x /etc/init.d/cryptotmp # chkconfig --add cryptotmp
它的原理与设置 /swap 相同。系统开机时,将会产生一条新的密钥来加密 /tmp。当系统关机的时候,这条密钥将会被丢弃,因此 /tmp 便受到保护。然而,假若你的脚本将东西写入 /tmp,请留意 /swap 及 /tmp 的内容在开机时将会被清除。另外,clasohm.co 声称当 /swap 及 /tmp 被密后,你便不能将系统悬置在磁盘上,这是可以理解的。要在加密 /home 分区前检查一切是否运作正常,请重新开机,并确定它能使用 /swap 及 /tmp 引导服务。
7. 将 /home 加密
接着让我们将 /home 加密。同样地,你可以立即进行这一步,但如果你登录了这台机器,请先注销你的帐户,并进到 root 的命令行。你须要卸下 /home 好让你能够将这个分区加密,然后在上面重新创建一个文件系统。我在这里再三警告,将你的 /home 备份安置在你本地磁盘以外的地方!
如果你仍未这样做,请现在备份。然后卸下 /home。
# cp -arfp /home /some/external/storage # umount /home
在容器上设置 LUKS 的密码。请确定你选择一个强效的密码,意思就是它包含大写字母、小写字母、符号、及数字。你的加密靠赖它了,因此不防采用一个长的密码。
# cryptsetup luksFormat /dev/vg0/home WARNING! ======== This will overwrite data on /dev/vg0/home irrevocably. Are you sure? (Type uppercase yes): YES Enter LUKS passphrase: Verify passphrase: Command successful.
接着,利用你创建的密码打开加密的分区。
# cryptsetup luksOpen /dev/vg0/home home Enter LUKS passphrase:
请将随机数据写入设备内,好叫查看磁盘的人不能估计当中藏有多少数据。如果你拥有一个大的分区,这样做需时颇长,因此请去喝杯咖啡、梳打、或啤酒才返回来。你可以跳过这一步,但花时间来做它能增强加密的功效。
# dd if=/dev/urandom of=/dev/mapper/home
由于 dd 不显示状况,下面是一个查看程序进行了多久的技巧。首先,找出以上 dd 指令的进程编号,然后利用 watch 及 kill 来显示状况的信息。
# ps uxa | grep dd # watch -n 20 kill -USR1 PID
现在你须要在分区上创建文件系统。
# mke2fs -j -O dir_index /dev/mapper/home # tune2fs -l /dev/mapper/home
最后,关闭已加密的分区。
# crypsetup luksClose home
正如 /swap 一样,你须要编辑 /etc/fstab 并加入正确的路径。
# vim /etc/fstab #/dev/vg0/home /home ext3 defaults 1 2 /dev/mapper/home /home ext3 defaults 1 2
最后,将路径加入 /etc/crypttab 内。如果你单单指定分区及 home 目录这两参数,那么每次开机时你都会被问及用来保护数据的 LUKS 密码。你可以做一些别出心裁的事情,例如将你的金钥放置在 USB 存储器上,并且在开机时自动挂载它。但我看不见有这个需要。
# vim /etc/crypttab home /dev/vg0/home
现在尝试重新开机。它应该引导并询问 LUKS 密码。输入它,然后计算机使会挂载 /home 目录。接着你可以与旧的数据进行同步,很快你便拥有通过加密而受保护的 /tmp、/swap 及 /home。假如有人偷了你的硬件,你的数据应该仍然安全。当然,如果你想将其它分区加密,你只需取代 /home 这个路径便是了。举个例说,你将机器备份在家中的一个备份目录里。我会复制以上的设置到家中的桌上计算机,并且将那用来存储笔记本备份的 /srv 目录也加密。此外,如果你依然不太明白加密这玩意,请用 Knoppix 等 live CD 开机,然后探索文件系统并尝试挂载 /home。
有关 Knoppix 及 LVM 的提示:当开机完成后,请执行以下两个指令以确保 Knoppix 检查磁盘区群组。
# vgscan # vgchange -a y
现在你将会看见 /dev/vg0/home 分区存在,但你不能直接用 mount 来挂载它。你须要用 cryptsetup luksOpen 及 luksClose 来访问这个分区。因此,这就证明了你的分区是安全的。一如既往,请修正任何错漏、留下改善推荐、等等。另外,也多谢 clasohm.net 协助将 /tmp 及 /swap 加密,以及提供在开机时挂载 /tmp 的脚本。
8. 加入 LUKS 金钥
你应该可以为一个加密的设备加入四至五条金钥,因此假若你需要允许另一个人访问磁盘,请这样做。
# cryptsetup luksAddKey /dev/vg0/home
9. 有关调整 LVM 尺寸的备注
由于你进行了加密,这个短小的备注是关于日后调整 LVM 尺寸。你可以使用正常的指令,但你须要紧记一件事:当你将逻辑磁盘区扩展后,你须要使用加密了的映射设备来调整尺寸,而不是一般的 LVM 路径。
# lvextend -L+512M /dev/vg0/home # resize2fs /dev/mapper/home
普遍来说,你会以 /dev/vg0/home 作为 resize2fs 的路径,但由于文件系统并不是真的挂载在那里,请以加密文件系统的路径取代它。
Translation of revision 6