数字化技能提升教程,数字化时代生存宝典

FreeBSD GELI磁盘加密

浏览:106

服务器上的备份文件、内部资料和业务数据,除了需要访问权限控制,还可以通过磁盘加密降低存储介质丢失后的泄露风险。FreeBSD提供的GELI可以在块设备层进行加密,解锁后再交给文件系统使用。本教程以一块独立空白数据盘为例,完成加密、挂载和重新解锁。

一、操作前的准备

本文使用以下示例配置:

  • 独立空白磁盘:ada1
  • 数据分区:ada1p1
  • 加密后的设备:/dev/ada1p1.eli
  • 挂载目录:/secure
  • 密钥文件:/root/geli-keys/ada1p1.key

以下命令以root身份执行。

分区、加密初始化和创建文件系统都属于高风险操作。只能在确认没有需要保留的数据、且未被系统使用的测试盘上执行,不能直接套用到系统盘或已有业务数据盘。 本流程不提供已有数据的原地加密。

二、确认目标磁盘

先查看磁盘、分区和挂载情况:

geom disk list
gpart show
mount
swapinfo

如果系统使用ZFS,还应检查:

zpool status

请结合磁盘容量、序列号和实际用途确认目标设备。本例假设已经确认ada1是新加入的空白测试盘;其他环境必须替换设备名称。

在空白磁盘上创建GPT分区表和一个数据分区:

gpart create -s GPT ada1
gpart add -a 1M -t freebsd-ufs ada1
gpart show ada1

-a 1M用于分区对齐,后续以新建的ada1p1作为加密对象。如果磁盘已有分区表,应先停下来核对,不要为了继续教程而强制删除。

三、加载GELI并生成密钥文件

加载模块:

kldload geom_eli

如果提示模块已经加载,无需重复操作。

创建受限目录,并生成随机密钥文件:

umask 077
mkdir -p /root/geli-keys
chmod 700 /root/geli-keys

dd if=/dev/random of=/root/geli-keys/ada1p1.key bs=64 count=1
chmod 600 /root/geli-keys/ada1p1.key

生成密钥的命令只执行一次,不要覆盖已有密钥文件。 本例随后使用“密钥文件+口令”解锁,两者需要同时保留。

四、初始化加密分区

再次确认设备名称后执行:

geli init -s 4096 \
  -K /root/geli-keys/ada1p1.key \
  /dev/ada1p1

按提示输入并确认新口令。这里没有使用跳过口令的参数,因此后续解锁仍需要输入口令。

初始化完成后,立即备份GELI元数据:

mkdir -p /root/geli-backup
chmod 700 /root/geli-backup

geli backup /dev/ada1p1 /root/geli-backup/ada1p1.eli
chmod 600 /root/geli-backup/ada1p1.eli

元数据备份包含恢复加密访问所需的重要信息,但不包含分区中的业务文件。应将元数据、密钥文件安全备份到独立位置,并单独保管口令,不能只留在同一台服务器上。

五、解锁并创建文件系统

使用密钥文件解锁:

geli attach \
  -k /root/geli-keys/ada1p1.key \
  /dev/ada1p1

输入口令后,检查加密设备:

ls -l /dev/ada1p1.eli
geli status

成功后会出现带.eli后缀的设备。后续创建文件系统和挂载,都应操作这个设备。

下面的newfs仅用于首次创建文件系统,会破坏目标设备上已有的文件系统内容。日后重新解锁时绝对不要再次执行。

newfs -U /dev/ada1p1.eli

该命令在解锁后的设备上创建UFS文件系统,-U启用Soft Updates。

随后挂载:

mkdir -p /secure
mount -t ufs /dev/ada1p1.eli /secure
df -h /secure

检查/secure对应的设备是否为/dev/ada1p1.eli,避免将文件写到未挂载时的普通目录中。

六、验证写入与重新解锁

写入一份测试文件:

printf 'GELI storage test\n' > /secure/check.txt
cat /secure/check.txt

结束使用前,先离开挂载目录,再卸载并断开设备:

cd /
umount /secure
geli detach /dev/ada1p1

如果卸载提示设备繁忙,应先停止访问该目录的程序,不要直接强制断开。卸载文件系统和断开GELI设备是两个步骤。

重新解锁并挂载:

geli attach -k /root/geli-keys/ada1p1.key /dev/ada1p1
mount -t ufs /dev/ada1p1.eli /secure
cat /secure/check.txt

预期能够读取之前保存的内容。这里不需要重新分区、初始化或格式化。

七、重启后如何使用

本例采用手动解锁,不配置开机自动挂载。重启后,确认GELI模块已加载,再执行上一节的geli attach和mount即可。

如果需要在开机时自动加载模块,可在/boot/loader.conf中加入:

geom_eli_load="YES"

自动加载模块不等于自动解锁数据盘。使用口令的自动解锁流程还涉及启动时交互,远程服务器应先准备可用的控制台。

八、常见问题

1. 加密后,运行中的程序还能读取文件吗?

可以。解锁并挂载后,具备相应文件权限的程序仍能访问数据。GELI不能代替系统权限、安全更新和业务隔离。

2. 元数据备份能恢复误删文件吗?

不能。元数据备份用于恢复加密设备的相关信息,文件误删仍需要依靠数据备份。

3. 忘记口令,可以重新初始化吗?

不要这样处理。重新初始化不是找回口令的方法,可能让原有数据无法再解密。应先检查是否保留了有效的密钥、口令和恢复材料。

九、总结

建议先在测试盘上完成一次“创建、写入、卸载、解锁、读取”的完整验证,再考虑保存正式资料。后续维护的重点是保管解锁材料、保留独立数据备份,以及避免重复执行初始化和格式化命令。

广告合作

广告合作

QQ群号:4114653

QQ群号:4114653

温馨提示:
  1. 本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com(#改为@)。
  2. 本站原创内容未经允许不得转载,转载请注明出处“站长百科”和原文地址。