FreeBSD GELI磁盘加密
服务器上的备份文件、内部资料和业务数据,除了需要访问权限控制,还可以通过磁盘加密降低存储介质丢失后的泄露风险。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
- 本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com(#改为@)。
- 本站原创内容未经允许不得转载,转载请注明出处“站长百科”和原文地址。