我們時不時地能看到這樣的頭條新聞:“某公司損失了3千萬客戶的個人社會安全碼,以及其他個人敏感信息還有財務數據!我們不該憤怒嗎?
”通常都是“承包商”(注意為什麼從來都不會是雇員)在他的(似乎是)帶有千兆硬盤的筆記本上存儲了所有這些信息,然後這個筆記本丟失或者被盜走了,但是沒有人知道准確的時間和地點。或者是,某個供應商負責運輸一大盒備份磁帶,而顯然這個供應商“太窮了”,連帶有防盜鎖的汽車都買不起。對我來說,這些解釋都是無稽之談,甚至是荒謬;承包商怎麼會最先獲得所有的敏感數據?為什麼他們需要把所有的數據放到筆記本上?為什麼要讓買不起高安全性能的汽車的那些人來運送一大盒的敏感信息備份磁帶呢?他們怎麼會知道丟失了哪些數據,怎麼會知道這些數據是否被加密或者究竟有沒有被妥善保護?
還真是有不少無法回答的問題。本文的主題就是如何用加密文件系統在硬盤中保護敏感數據。這個方案是提供給那些移動用戶和需要在服務器和工作站中保護數據安全的人們的。我們將使用既簡單又功能強大的cryptsetup-luks。我們會創建一個加密的分區,只需在裝載時提供口令。然後你就可以像其他分區一樣地使用該分區了。
Debian,Ubuntu,還有Fedora都可以用cryptsetup-luks了。你不需要修改內核或者其他任何東西;你只要安裝就行了。
Debian和Ubuntu 系列上:
# aptitude安裝cryptsetup
在Fedora上:
#yum安裝cryptsetup-luks
讓系統做好准備
不幸的是,cryptsetup不能給你系統中現有的數據加密;因此你必須創建加密的分區,然後將數據轉移到新建的分區中。用GParted(Gnome分區編輯器)來管理分區很方便,所有主流的Linux版本上都有GParted。你可以用它重新設置分區大小、移動、刪除或者創建分區,並且可以選擇自己喜歡的文件系統格式化方式。它能夠支持你系統內核所支持的所有的分區類型以及文件系統,因此如果你機器上是雙系統的話,你甚至可以在Windows分區上使用該工具。如果是新的硬盤分區上的話,你可以用Gparted live CD。
本文中我們只探討怎樣給數據分區加密。我也知道許多方法可以給其他文件系統的、保存了潛在的敏感信息的那些分區加密,比如/var和/etc,但是這兩個都很復雜並且刁鑽,它們都不能能在啟動的時候加密。因此,我這裡只討論現有的比較成熟的這些,因為根據我自己的測試,其他那些方法還無法穩定工作。
你用一種文件系統將分區格式化並沒有什麼關系,所有東西都可以重寫,加密後文件格式也是可變的。
你將用密碼來保護你的加密分區。如果你把密碼弄丟了,那就太不幸了,你就無法取回這些數據了。
給分區加密
有了新的空白分區後,你可以用cryptsetup命令來給它加密。注意一定確保是在加密要保護的那個分區:
# cryptsetup --verbose --verify-passphrase -c aes-cbc-plain luksFormat /dev/sda2
當心!
這將把不可逆轉地改寫/dev/sda2 上的數據。
Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase:
Verify passphrase:
Command successful.
以上命令創建加密的分區。現在我們需要創建可以裝載的邏輯分區,並給它命名。本例中,我們給它命名為sda2,你也可以叫它test、fred、我的秘密分區或者任何你喜歡的名字:
# cryptsetup luksOpen /dev/sda2 sda2
Enter LUKS passphrase:
key slot 0 unlocked.
Command successful.
如下命令將顯示/dev/mapper路徑中的隱藏設備:
$ ls -l /dev/mapper
total 0
crw-rw---- 1 root root 10, 63 2007-06-09 18:38 control
brw-rw---- 1 root disk 254, 0 2007-06-09 19:46 sda2
現在把文件系統放到邏輯分區上:
# mkfs.ext3 /dev/mapper/sda2
你需要做一個裝載點,這樣你就能裝載並且使用這個新的、加密過的分區了。記住,你必須從/dev/mapper/路徑下使用該設備。我會把它放在根目錄下。注意哪些需要根權限的操作:
$ mkdir /home/me/crypted
# mount /dev/mapper/sda1 /home/me/crypted
確保它被裝載了,編寫一個測試文件:
# df -H
[...]
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/sda2 7.9G 152M 7.3G 3% /home/carla/crypted
# cd /home/me/crypted
# nano test
# ls
lost+found test
讓它對用戶可用
到目前為止一切順利!但還有一個大問題:只有本地才能訪問該分區。我們得讓普通用戶也能使用它。你可以在/etc/fstab中能夠管理這個虛擬分區,就像管理其他分區一樣。往/etc/fstab中加入一行,以便允許沒有特殊權限的用戶來加載或者卸載該分區:
/dev/mapper/sda2 /home/carla/crypted ext3 user,atime,noauto,rw,dev,exec,suid 0 0
這樣Carla可以自己加載這個分區了:
$ mount ~/crypted
但是Carla仍然無法往其中寫入數據。因此我們再次需要設置本地權限,把正確的權限和許可方如已經加載的隱藏設備:
# chown carla:carla /home/carla/crypted/
# chmod 0700 /home/carla/crypted/
好了那麼,很多人都可以像Carlas一樣了!但是我們需要讓Carla讀寫一些加密的文件夾,而讓其他人無法讀寫這些文件夾。
你可以卸載並且手動關閉加密分區:
{GetProperty(Content)}nbsp; umount crypted
# cryptsetup luksClose sda2
只有在打開加密設備的時候,你才需要輸入LUKS密碼。記住,如果丟了密碼,你就完蛋了。你可以刪除分區重新再來,但是數據是無法恢復的。打開加密設備並加載以後,你就可以像使用其它分區一樣使用它了。
你得用本地權限來運行cryptsetup。這對用戶來說可能不是很方便。我們也有很多針對這個問題的解決方法。其中一種就是使用sudo;Ubuntu用戶有現成的全功能的sudo。另一種方法是把它設置成在系統啟動的時候開啟,並在系統關閉的時候關閉。或者你也可能想要創建一些桌面圖標,以便讓用戶可以隨時按需要啟動和關閉它。