有(許多)其他替代方法來加密磁盤,我只呈現(xiàn)我所知道和使用的方法。請記住,安全只是系統(tǒng)還未經(jīng)過實際考驗而已。入侵者可以輕易通過鍵盤事件記錄密碼。此外,當(dāng)已經(jīng)加載了分區(qū),其數(shù)據(jù)是可以自由訪問的,并不會阻止入侵者去訪問它。
這部分我們使用可用于 2.6 內(nèi)核的 Linux dm-crypt (device-mapper)。在這個實例中,讓我們加密 /dev/sdc1
分區(qū),它可為任何其他分區(qū)、磁盤、USB或者用 losetup
創(chuàng)建的基于文件的分區(qū)。對于基于文件的分區(qū),我們使用 /dev/loop0
???nbsp;鏡像文件分區(qū)。Device mapper 利用標(biāo)簽來標(biāo)識一個分區(qū)。我們使用 sdc1
作為此標(biāo)簽,但可以為任何字符串。
LUKS 和 dm-crypt 是較好的加密技術(shù),并且可為同一個分區(qū)設(shè)置多個口令,更改密碼也很方便??珊唵屋斎?nbsp;# cryptsetup --help
來測試 LUKS 是否可用。如果沒有顯示任何關(guān)于 LUKS 的信息,可看下面Without LUKS 的介紹。第一步如果需要的話創(chuàng)建一個分區(qū):fdisk /dev/sdc
。
# dd if=/dev/urandom of=/dev/sdc1 # 可選
# cryptsetup -y luksFormat /dev/sdc1 # 這破壞了在 sdc1 上的數(shù)據(jù)
# cryptsetup luksOpen /dev/sdc1 sdc1
# mkfs.ext3 /dev/mapper/sdc1 # 創(chuàng)建 ext3 文件系統(tǒng)
# mount -t ext3 /dev/mapper/sdc1 /mnt
# umount /mnt
# cryptsetup luksClose sdc1 # Detach 已加密的分區(qū)
# cryptsetup luksOpen /dev/sdc1 sdc1
# mount -t ext3 /dev/mapper/sdc1 /mnt
# umount /mnt
# cryptsetup luksClose sdc1
# cryptsetup -y create sdc1 /dev/sdc1 # 或任何其他分區(qū)像 /dev/loop0
# dmsetup ls # 檢查一下,將顯示:sdc1 (254, 0)
# mkfs.ext3 /dev/mapper/sdc1 # 只有第一次要這么做!
# mount -t ext3 /dev/mapper/sdc1 /mnt
# umount /mnt/
# cryptsetup remove sdc1 # Detach 已加密的分區(qū)
這樣做等同于(非 mkfs 部分) re-attach 分區(qū)。如果密碼不正確,mount 命令將會失敗。對于這個例子,只要簡單的移除 sdc1 (cryptsetup remove sdc1
)并重建即可。
兩個流行的 FreeBSD 磁盤加密模塊為 gbde
和 geli
。我現(xiàn)在使用 geli
原因是它夠快并且它使用加解密硬件加速設(shè)備。詳情可看 FreeBSD 使用手冊 18.6。geli
模塊必須已編譯或加載進內(nèi)核:
options GEOM_ELI
device crypto # 內(nèi)核配置文件中加入這兩行
# echo 'geom_eli_load="YES"' >> /boot/loader.conf # 也可以在系統(tǒng)引導(dǎo)時加載或者做:kldload geom_eli
我為一個典型的磁盤加密使用這些設(shè)置,其使用了一個口令和一個加密主密鑰(master key)的密鑰。這意味著你需要密碼和生產(chǎn)的密鑰 /root/ad1.key
來 attach 分區(qū)。主密鑰存儲在這個加密分區(qū)中并且不可見。看下面為 USB 或 映像文件的加密設(shè)置。
# dd if=/dev/random of=/root/ad1.key bs=64 count=1 # 加密主密鑰的密鑰
# geli init -s 4096 -K /root/ad1.key /dev/ad1 # 對于磁盤也可用 -s 8192
# geli attach -k /root/ad1.key /dev/ad1 # 將 /dev/ad1 與所生成的密鑰 /root/ad1.key 關(guān)聯(lián)
# dd if=/dev/random of=/dev/ad1.eli bs=1m # 可選,需要很長時間
# newfs /dev/ad1.eli # 創(chuàng)建文件系統(tǒng)# mount /dev/ad1.eli /mnt
# geli attach -k /root/ad1.key /dev/ad1
# fsck -ny -t ffs /dev/ad1.eli # 檢查文件系統(tǒng)# mount /dev/ad1.eli /mnt
Detach 步驟會在關(guān)機時自動完成。
# umount /mnt
# geli detach /dev/ad1.eli
加密分區(qū)在 /etc/fstab 中配置成自動加載。系統(tǒng)啟動時會詢問加密分區(qū)的密碼。對于本例下列設(shè)置是必須的:
# grep geli /etc/rc.conf
geli_devices="ad1"
geli_ad1_flags="-k /root/ad1.key"
# grep geli /etc/fstab
/dev/ad1.eli /home/private ufs rw 0 0
加密一個 USB stick 或者映像文件使用密碼而不是密鑰來得更方便。這種情況下,沒有必要隨身攜帶額外的密鑰文件。所做步驟同上面非常相似,只是不需要密鑰文件。讓我們來加密一個 1 GB 的映像文件/cryptedfile
。
# dd if=/dev/zero of=/cryptedfile bs=1M count=1000 # 1 GB 文件
# mdconfig -at vnode -f /cryptedfile
# geli init /dev/md0 # 僅用密碼加密
# geli attach /dev/md0
# newfs -U -m 0 /dev/md0.eli
# mount /dev/md0.eli /mnt
# umount /dev/md0.eli
# geli detach md0.eli
現(xiàn)在可以把這個映像文件加載成僅需密碼的文件系統(tǒng)。
# mdconfig -at vnode -f /cryptedfile
# geli attach /dev/md0
# mount /dev/md0.eli /mnt
更多建議: