UNIX分區(qū)加密

2018-11-24 15:23 更新

有(許多)其他替代方法來加密磁盤,我只呈現(xiàn)我所知道和使用的方法。請記住,安全只是系統(tǒng)還未經(jīng)過實際考驗而已。入侵者可以輕易通過鍵盤事件記錄密碼。此外,當(dāng)已經(jīng)加載了分區(qū),其數(shù)據(jù)是可以自由訪問的,并不會阻止入侵者去訪問它。

Linux

這部分我們使用可用于 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)簽,但可以為任何字符串。

dm-crypt with LUKS

LUKS 和 dm-crypt 是較好的加密技術(shù),并且可為同一個分區(qū)設(shè)置多個口令,更改密碼也很方便??珊唵屋斎?nbsp;# cryptsetup --help 來測試 LUKS 是否可用。如果沒有顯示任何關(guān)于 LUKS 的信息,可看下面Without LUKS 的介紹。第一步如果需要的話創(chuàng)建一個分區(qū):fdisk /dev/sdc。

創(chuàng)建加密分區(qū)

# 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ū)

Attach

# cryptsetup luksOpen /dev/sdc1 sdc1
# mount -t ext3 /dev/mapper/sdc1 /mnt

Detach

# umount /mnt
# cryptsetup luksClose sdc1

dm-crypt without LUKS

# 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

兩個流行的 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è)置。

創(chuàng)建加密分區(qū)

# 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

Attach

# geli attach -k /root/ad1.key /dev/ad1
# fsck -ny -t ffs /dev/ad1.eli                      # 檢查文件系統(tǒng)# mount /dev/ad1.eli /mnt

Detach

Detach 步驟會在關(guān)機時自動完成。

# umount /mnt
# geli detach /dev/ad1.eli

/etc/fstab

加密分區(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
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號