[FrontPage] [TitleIndex] [WordIndex

This is a read-only archived version of wiki.centos.org

将 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


2023-09-11 07:23