將 LVM 上的 /tmp、/swap 及 /home 加密
這份指引將會協助你採用 cryptsetup LUKS 將 /tmp、/swap 及 /home 加密。我會假設你已經擁有一個安裝好的系統,而需要將 /tmp、/swap 及 /home 加密。我也假設 /home 內 藏有你的資料,因此請小心地將 /home 備份才繼續前進。CentOS wiki 內有另一份指引,但它針對將檔案加密,而不是分割區,因此我希望有一份特別針對 /tmp、/swap 及 /home 的指引。這份指引假設你需要將整個分割區加密,因此它們現有的資料將會被刪除。
系統:
CentOS 5.x
參考:
Encrypted Filesystem
Encrypted /tmp & /swap
系統設置
除非你在安裝時沒有選取 base,而選擇不安裝任何東西,否則你應該已經擁有加密時所需的工具。請先檢查,然後繼續前進。
# rpm -q cryptsetup device-mapper util-linux # modprobe dm_crypt # lsmod | grep dm_crypt
將 /home 備份
我應該不必再告訴你,但請確定你已經將 /home 備份到一個外置儲存器,然後才繼續前進!就算你的本地磁碟有空間,你亦不應將備份放在現有磁碟上,因為你將要在本地的檔案系統上動工。
# cp -arfp /home /some/external/storage
將 /swap 加密
讓我們先將 /swap 加密,檢查它能運作,然後才轉移到 /tmp。我會建議你將主機關掉,雖然你不想的話也不是必須的。由於直到下次開機前 swap 都不會再被存取,你可以立即將它加密。請現在就建立 /etc/crypttab 這個檔案,並加入 swap 的參數。
# vim /etc/crypttab swap /dev/vg0/swap /dev/urandom swap,cipher=aes-cbc-essiv:sha256
請依照你的磁碟區群組名稱及佈局,修改路徑來迎合你的需要。這裡指定加密系統在開機時採用 AES 的 SHA 256 位元加密法。每次開機所產生的新密鑰將會在系統中一直生效。關機的時候,這條密鑰不再有效,因此 /swap 便受到保護。
接著,編輯 /etc/fstab 來反映這些改動。
/dev/mapper/swap none swap defaults 0 0
這樣便完成了 swap 的加密。你現在可以重新開機並查看 swap 已被重新啟用,或者你可以直接改動 /tmp。
將 /tmp 加密
加密 /tmp 的步驟與 /swap 的稍有不同。你須要在 /etc/fstab 被讀取後,利用一個腳本來掛載 /tmp。這個腳本要歸功給 clasohm.com,也就是我找到它的地方。當 /etc/fstab 穫處理後,一個加密的磁碟區便會被建立起來。基於 /tmp 的存取方法(我假設),/tmp 需要特別的處理。
首先,在 /etc/crypttab 內加入所需的記錄,並從 /etc/fstab 中注釋掉用來正常掛載 /tmp 的記錄。
# vim /etc/crypttab tmp /dev/vg0/tmp /dev/urandom tmp,cipher=aes-cbc-essiv:sha256 # vim /etc/fstab # 請緊記將下列一行改為註釋。 #/dev/vg0/tmp /tmp ext3 defaults 1 2
複製來自 clasohm.ocm 的腳本,並將它放置在 /etc/init.d 內。
# vim /etc/init.d/cryptotmp #!/bin/bash # # cryptotmp setup crypted tmp partition # # chkconfig: 2345 01 90 # description: adds crypted tmp partition. . /etc/init.d/functions # See how we were called. case "$1" in start) mount /dev/mapper/tmp /tmp restorecon /tmp action "Adding encrypted tmp" touch /var/lock/subsys/cryptotmp ;; stop) rm -f /var/lock/subsys/cryptotmp ;; *) echo $"Usage: $0 {start|stop}" exit 1 esac exit 0
將腳本設為可執行的,並將 chkconfig 執行在它身上。
# chmod +x /etc/init.d/cryptotmp # chkconfig --add cryptotmp
它的原理與設定 /swap 相同。系統開機時,將會產生一條新的密鑰來加密 /tmp。當系統關機的時候,這條密鑰將會被丟棄,因此 /tmp 便受到保護。然而,假若你的腳本將東西寫入 /tmp,請留意 /swap 及 /tmp 的內容在開機時將會被清除。另外,clasohm.co 聲稱當 /swap 及 /tmp 被密後,你便無法將系統懸置在磁碟上,這是可以理解的。要在加密 /home 分割區前檢查一切是否運作正常,請重新開機,並確定它能使用 /swap 及 /tmp 啟動服務。
將 /home 加密
接著讓我們將 /home 加密。同樣地,你可以立即進行這一步,但如果你登入了這台機器,請先登出你的帳戶,並進到 root 的指令行。你須要卸下 /home 好讓你能夠將這個分割區加密,然後在上面重新建立一個檔案系統。我在這裡再三警告,將你的 /home 備份安置在你本地磁碟以外的地方!
如果你仍未這樣做,請現在備份。然後卸下 /home。
# cp -arfp /home /some/external/storage # umount /home
在容器上設置 LUKS 的密碼。請確定你選擇一個強效的密碼,意思就是它包含大寫字母、小寫字母、符號、及數字。你的加密靠賴它了,因此不防採用一個長的密碼。
# cryptsetup luksFormat /dev/vg0/home WARNING! ======== This will overwrite data on /dev/vg0/home irrevocably. Are you sure? (Type uppercase yes): YES Enter LUKS passphrase: Verify passphrase: Command successful.
接著,利用你建立的密碼開啟加密的分割區。
# cryptsetup luksOpen /dev/vg0/home home Enter LUKS passphrase:
請將隨機數據寫入裝置內,好叫檢視磁碟的人無法估計當中藏有多少資料。如果你擁有一個大的分割區,這樣做需時頗長,因此請去喝杯咖啡、梳打、或啤酒才返回來。你可以跳過這一步,但花時間來做它能增強加密的功效。
# dd if=/dev/urandom of=/dev/mapper/home
由於 dd 不顯示狀況,下面是一個檢視程序進行了多久的技巧。首先,找出以上 dd 指令的進程編號,然後利用 watch 及 kill 來顯示狀況的資訊。
# ps uxa | grep dd # watch -n 20 kill -USR1 PID
現在你須要在分割區上建立檔案系統。
# mke2fs -j -O dir_index /dev/mapper/home # tune2fs -l /dev/mapper/home
最後,關閉已加密的分割區。
# crypsetup luksClose home
正如 /swap 一樣,你須要編輯 /etc/fstab 並加入正確的路徑。
# vim /etc/fstab #/dev/vg0/home /home ext3 defaults 1 2 /dev/mapper/home /home ext3 defaults 1 2
最後,將路徑加入 /etc/crypttab 內。如果你單單指定分割區及 home 目錄這兩參數,那麼每次開機時你都會被問及用來保護資料的 LUKS 密碼。你可以做一些別出心裁的事情,例如將你的金鑰放置在 USB 儲存器上,並且在開機時自動掛載它。但我看不見有這個需要。
# vim /etc/crypttab home /dev/vg0/home
現在嘗試重新開機。它應該啟動並詢問 LUKS 密碼。輸入它,然後電腦使會掛載 /home 目錄。接著你可以與舊的資料進行同步,很快你便擁有透過加密而受保護的 /tmp、/swap 及 /home。假如有人偷了你的硬件,你的資料應該仍然安全。當然,如果你想將其它分割區加密,你只需取代 /home 這個路徑便是了。舉個例說,你將機器備份在家中的一個備份目錄裡。我會複製以上的設置到家中的桌上電腦,並且將那用來儲存筆記型電腦備份的 /srv 目錄也加密。此外,如果你依然不太明白加密這玩意,請用 Knoppix 等 live CD 開機,然後探索檔案系統並嘗試掛載 /home。
有關 Knoppix 及 LVM 的提示:當開機完成後,請執行以下兩個指令以確保 Knoppix 檢查磁碟區群組。
# vgscan # vgchange -a y
現在你將會看見 /dev/vg0/home 分割區存在,但你不能直接用 mount 來掛載它。你須要用 cryptsetup luksOpen 及 luksClose 來存取這個分割區。因此,這就證明了你的分割區是安全的。一如既往,請修正任何錯漏、留下改善建議、等等。另外,也多謝 clasohm.net 協助將 /tmp 及 /swap 加密,以及提供在開機時掛載 /tmp 的腳本。
加入 LUKS 金鑰
你應該可以為一個加密的裝置加入四至五條金鑰,因此假若你需要允許另一個人存取磁碟,請這樣做。
# cryptsetup luksAddKey /dev/vg0/home
有關調整 LVM 大小的備註
由於你進行了加密,這個短小的備註是關於日後調整 LVM 大小。你可以使用正常的指令,但你須要緊記一件事:當你將邏輯磁碟區延伸後,你須要使用加密了的對映裝置來調整大小,而不是一般的 LVM 路徑。
# lvextend -L+512M /dev/vg0/home # resize2fs /dev/mapper/home
普遍來說,你會以 /dev/vg0/home 作為 resize2fs 的路徑,但由於檔案系統並不是真的掛載在那裡,請以加密檔案系統的路徑取代它。
Translation of revision 6