亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

教你加密Root文件系統(tǒng)(圖)

互聯(lián)網   發(fā)布時間:2008-10-08 19:02:19   作者:佚名   我要評論
當你不能依靠物理安全來保證你文件的安全時,是時候采取額外的步驟加密文件系統(tǒng)了,雖然本文涉及到的是基于PowerPC的系統(tǒng),但原則上來說也適用于其他架構的系統(tǒng)。   在另一篇文章“實現(xiàn)加密的home目錄”中,我描寫了如何透明地加密home目錄,本文敘述另一個技術實現(xiàn)--
當你不能依靠物理安全來保證你文件的安全時,是時候采取額外的步驟加密文件系統(tǒng)了,雖然本文涉及到的是基于PowerPC的系統(tǒng),但原則上來說也適用于其他架構的系統(tǒng)。
  在另一篇文章“實現(xiàn)加密的home目錄”中,我描寫了如何透明地加密home目錄,本文敘述另一個技術實現(xiàn)--加密的root文件系統(tǒng),我論述了GNU/Linux啟動過程和軟件需求,并提供了一些指令,對Open Firmware做了一下介紹,以及其他一些有關的考慮事項。我用于教學的系統(tǒng)是一臺基于PowerPC架構的新世界蘋果iBOOK電腦,運行Fedora Core 3預覽版,不考慮細節(jié),本文涉及到的概念和程序可以應用到任何設備、架構或操作系統(tǒng)。我提供的指令假設你有一個多余的USB閃存盤并且你系統(tǒng)的支持從USB設備啟動。
  同時,我還假設讀者能輕松應用源代碼補丁并編譯程序,對于Fedora Core 3 Test 3版本,mkinitrd和啟動腳本軟件包需要打補丁以支持加密的root文件系統(tǒng),需要掌握基本的分區(qū)管理和創(chuàng)建文件系統(tǒng)的知識,執(zhí)行一個基本的Linux發(fā)行版安裝超出了本文要求的范疇。
  在呈現(xiàn)有關的技術步驟之前,一個高層概念必須先討論:信任。信任與加密技術和認證總是糾纏在一起的,對任何有電子密鑰的設備都可以假設它是可信任的。例如:當自動提款機(ATM)與我的銀行賬號共用個人識別號(PIN)時,我會信任ATM不會將我的PIN與不適當的第三方進行共享。同樣,當我給我的計算機提供一個加密密鑰時,我假設這個密鑰不會與任何其他人進行共享,我會信任這臺計算機在我們之間保守秘密。
  那么,你能信任你的計算機嗎?除非你無論到哪里都帶著它,否則你真的不能信任它,即使磁盤已經經過加密處理也不行。設想這樣一個情景:在你睡覺時,有人偷走了你的計算機,小偷將計算機中加密的內容做了一份拷貝,雖然沒有加密密鑰而對他來說毫無意義,但是他可以用更惡魔的內容替換筆記本電腦加密的內容,然后再將電腦放回去,當你第二天醒來時,計算機提示你輸入加密密碼,但是這時你提供的密鑰會傳輸給小偷,他得到密鑰后就有一份數據和密鑰的拷貝了,他就可以讀取你的文件了。
  這個情景可能顯得比較牽強,但是它說明了一點,你不能信任你的筆記本電腦,始終保持你的眼睛你離開它很重要,因此,無論如何優(yōu)秀地實現(xiàn)你的加密系統(tǒng),要建立在信任的基礎前提條件下才行。
  網絡確保我們可以信任計算機的啟動過程,我們需要將其從計算機中分隔出來,考慮這個問題:你攜帶你的汽車鑰匙而不是攜帶你的汽車。你的密鑰自身概念上與你的汽車鑰匙一樣。你可以更容易地保護你的密鑰,因此你不用隨時隨地都攜帶上你的計算機,我們將用這個密鑰提供啟動計算機需要的軟件,閃存盤將充當密鑰的角色,通過保護啟動系統(tǒng)最初的軟件,除加密密鑰外,我們可以有效地降低啟動過程被劫持的風險。
  你需要連接你的計算機是如何啟動的,因為解鎖一個加密的root文件系統(tǒng)是對整體的引導過程有影響,目前穩(wěn)定的內核版本是2.6,可選擇使用initramfs來幫助啟動,在lwn.net上有一篇文檔“initramfs來了”, initramfs是一個cipo歸檔,內核知道如何解壓到基于RAM的磁盤上,這個解壓的文件系統(tǒng)包括一個傳統(tǒng)的載入內核掛載root文件系統(tǒng)的模塊的腳本,在我們的樣例中,這個腳本也用于解鎖加密的root文件系統(tǒng),關于這個主題更多的信息可以在文件buffer-format.txt和initrd.txt中找到,這兩個文件都在Linux內核源代碼發(fā)布包中。
  對Linux有若干個文件系統(tǒng)加密接口是可用的,Jari Ruusu的Loop-AES就是這樣一個項目,有多個cryptoloop變種提供一個加密的loopback設備,本文集中講述最近2.6Linux內核提供的dm-crypt接口,這個接口目前已經被Fedora項目吸收,dm-crypt模塊由Fedora內核包提供,還需要一個靜態(tài)鏈接cryptsetup,這個實用程序簡化了dm-crypt設備的管理,最后,還需要parted和hfsutils來管理啟動文件系統(tǒng)。
  不幸的是,F(xiàn)edora Core的anaconda安裝程序還不支持在盒子外安裝加密文件系統(tǒng),網絡繞過這個限制,你必須保留一個空閑分區(qū)安裝Fedora,格式化空閑分區(qū)為一個加密文件系統(tǒng),然后拷貝原始安裝數據到新的加密文件系統(tǒng)上,網絡簡化,我們假設Fedora已經安裝到兩個分區(qū)上:/dev/hda4,掛載到/home和/dev/hda5,掛載到/,因為/home下還沒有用戶目錄,直到Fedora安裝完畢,我們可以使用/dev/hda4作為我們的備用分區(qū),/dev/hda3作為swap分區(qū)。
  安裝Fedroa Core 3,掛載/dev/hda4到/home,/dev/hda5掛載到/,不要添加非root用戶,因為/home稍后將被清除干凈,至此,你應該擁有一個全功能的Linux系統(tǒng)了。
  在設置加密文件系統(tǒng)之前,你應該隨意分區(qū),這樣排除一個潛在關于磁盤內容的信息漏洞,圖1示范了一個抽象的半滿磁盤,它沒有恰當進行隨機排列,圖2示范了一個恰當隨機排列的磁盤,在格式化之前包含一個加密的文件系統(tǒng),注意,從圖1中可以獲取到一些關于它的內容的知識(如它們跨越了磁盤的二分之一),圖2提供了一個沒有那么豪華的對手,假如這樣,磁盤可以很容易被清空,分區(qū)隨機排列是通過用隨機數據重寫它的內容實現(xiàn)的:dd if=/dev/urandom of=/dev/hda4,這個過程可能要花很長的時間,因為創(chuàng)建隨機數據有些困難的。
  

  圖1
  

  圖2隨機排列的分區(qū)隱藏了使用量
  要在/dev/hda4上創(chuàng)建一個加密的ext3文件系統(tǒng),使用下面的步驟:
  1)確認aes,dm-mod,dm-crypt模塊已經載入內核
  2)卸載將要托管加密root文件系統(tǒng)的分區(qū)/dev/hda4
  #umount /dev/hda4
  3)創(chuàng)建一個隨機256位加密密鑰并存儲在/etc/root-key
  #dd if =/dev/urandom of=/etc/root-key bs=1c count=32
  這個密鑰稍后將拷貝到閃存盤。
  4)創(chuàng)建一個dm-crypt設備,使用前面創(chuàng)建的密鑰加密
  #cryptsetup -d /etc/root-key create /dev/hda4
  現(xiàn)在訪問/dev/mapper/root在/dev/hda4上提供了一個加密層,默認情況下,cryptsetup創(chuàng)建一個aes加密的dm-crypt設備并任務密鑰大小為256位。
  5)在/dev/mapper/root上創(chuàng)建一個ext3文件系統(tǒng)
  #mkfs.ext3 /dev/mapper/root
  6)掛載新文件系統(tǒng)
  #mkdir /mnt/encroot
  #mount /dev/mapper/root /mnt/encroot
  7)現(xiàn)在你已經有一個加密文件系統(tǒng)了,你必須用/dev/hda5(原始的root文件系統(tǒng))的內容來填充它
  #cp -ax / /mnt/encroot
  8)最后,在/mnt/encroot/crypttab中創(chuàng)建一個條目以便不同的實用程序知道文件系統(tǒng)是如何配置的:
  root /dev/hda4 /etc/root-key cipher=aes
  現(xiàn)在我們的加密文件系統(tǒng)已經準備好了,需要理解更多關于目標架構的啟動過程,通常,計算機有一個固件程序來掌管系統(tǒng)啟動的全過程,保護固件程序超出了本文的范疇,因此我們假設系統(tǒng)固件程序是可以信任的,大多數讀者可能對BIOS比較熟悉,它是PC平臺的啟動固件程序,我主要討論的是Open Firmware,它用于計算機制造廠商如蘋果,sun和IBM啟動系統(tǒng)。
NetBSD/macppc的安裝指令對Open Firmware做了一個充分的介紹,我們對使用Open Firmware命令行接口配置計算機從一個閃存盤啟動非常感興趣,Open Firmware允許你查看連接到計算機的設備和設置固件程序變量的值。
  在一個新世界(G3或更新的)蘋果計算機初始化啟動過程中,可以通過暫停選擇性命令來訪問Open Firmware提示符。
  變量boot-device用于確定系統(tǒng)將從哪個設備啟動,printenv命令允許查看當前的值:
  > printenv
  [...]
  boot-devicehd:,\\:txbihd:,\\:txbi
  這實際上意味著通過執(zhí)行在第一塊IDE磁盤上HFS類型txbi的文件來實現(xiàn)啟動的,第二:txbi前的字符作為解釋一個HFS文件類型的標志,否則,txbi可能被理解為文件路徑,假如這樣,標志hd實際上是更復雜的/pci@f4000000/ata-6@d/disk@0的一個別名,這個字符串通過子系統(tǒng)變量表現(xiàn)了路徑,你可以使用Open Firmware命令查看設備對應的別名。
  網絡正確地設置boot-device,我們需要找出Open Firmware認出的我們閃存盤的名字,通過ls命令顯示閃存盤路徑,并打印出設備樹:
> dev / ls
[...]
/pci@f2000000
[...]
/usb@1b,1
[...]
/disk@1
[...]
    現(xiàn)在我們知道了一點關于計算機固件程序的知識,我們必須花些時間研究固件初始化執(zhí)行程序:bootloader。通常,運行在蘋果PowerPC架構上的Linux系統(tǒng)使用一個叫做yaboot的程序來啟動系統(tǒng),yaboot與LILO或GRUB類似,它包含兩個關鍵程序:ofboot.b和yaboot。ofboot.b提供第一階段啟動過程,實際上,ofboot.b的工作決定了啟動什么操作系統(tǒng),例如:如果一臺電腦上同時安裝了Mac OS X和Linux系統(tǒng),ofboot.b執(zhí)行Mac OS X或Linux的bootloader,如果用戶選擇載入Linux,ofboot.b執(zhí)行yaboot,第二階段啟動過程,然后yaboot載入Linux內核和initrd。圖3提供了一個基于PowerPC架構的Linux如何使用一個加密的root文件系統(tǒng)啟動的實例。
  

  圖3
  用Open firmware啟動一個基于PowerPC系統(tǒng)的過程
  我們的可移動啟動設備需要ofboot.b和yaboot程序,一個Linux內核和一個包括加密密鑰的initrd文件。蘋果目前基于PowerPC的架構預設它的啟動介質格式化為HFS。
  1)使用parted程序在閃存盤上創(chuàng)建正確的可啟動的分區(qū)(我的是64MB大小,用設備節(jié)點/dev/sda訪問) 
# parted /dev/sda
(parted) mklabel mac
(parted) print
Disk geometry for /dev/sda: 0.000-62.500 megabytes
Disk label type: mac
Minor Start End Filesystem Name Flags
1 0.000 0.031 Apple
(parted) mkpart primary hfs 0.031 62.500
(parted) print
Disk geometry for /dev/sda: 0.000-62.500 megabytes
Disk label type: mac
Minor Start End Filesystem Name Flags
1 0.000 0.031 Apple
2 0.031 62.500 untitled
(parted) set 2 boot on
(parted) name 2 Apple_Boot
(parted) quit
  2)在啟動分區(qū)上創(chuàng)建HFS文件系統(tǒng)
  # hformat /dev/sda2
  3)通過修改/mnt/encroot/etc/yaboot.conf配置yaboot啟動恰當的設備,下面是一個最小配置例子:
  
boot=/dev/sda2
ofboot=/pci@f2000000/usb@1b,1/disk@1:2
partition=2
install=/usr/lib/yaboot/yaboot
magicboot=/usr/lib/yaboot/ofboot
default=linux
image=/vmlinux
label=linux
root=/dev/hda4
initrd=/initrd.gz
read-only
  值/pci@f2000000/usb@1b,1/disk@1:2來自我們先前檢查的Open Firmware設備樹,/pci@f2000000/usb@1b,1/disk@1是PCI總線f2000000上的第一塊USB磁盤,最有興趣的是:2意味著分區(qū)2
  4)安裝啟動程序和內核到/dev/sda2:
# ybin --config /mnt/encroot/etc/yaboot.conf -v
# mount /dev/sda2 /media/usbstick
# cp /boot/vmlinux /media/usbstick
  就此,initrd必須被安裝到閃存盤上,F(xiàn)edora提供了一個叫做mkinitrd的工具來創(chuàng)建initrd,然而,在寫本文的時候,mkinitrd還不支持加載一個加密的root文件系統(tǒng),補丁在https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=124789,一旦應用了補丁,mkinitrd就可以讀取/etc/crypttab并創(chuàng)建一個恰當的initrd了:
  1. mkinitrd --authtype=paranoid -f /media/usbdisk/initrd.gz
  2. umount /media/usbstick
  文件/mnt/encroot/etc/fstab應該被更新反映出變化:
  /dev/mapper/root / ext3 defaults 1 1
有加密的swap或完全沒有swap空間是一個加密文件系統(tǒng)的先決條件。原因可以在文章“實現(xiàn)加密的home目錄”和BugTraq郵件列表中的一篇“Mac OS X在磁盤上存儲登陸/密鑰鏈/密碼”中找到。當給啟動腳本軟件包應用了https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=127378的補丁后,F(xiàn)edora允許用戶使用一個隨機生成的會話密鑰加密他們的swap分區(qū),因為swap空間在重新啟動時通常不需要一致,當系統(tǒng)關閉時會話密鑰也不保存,要啟用加密的swap,完成下面的步驟:
  1)添加下面的行到/mnt/encroot/etc/fstab,替換任何先前的swap記錄:
  /dev/mapper/swap swap swap defaults 0 0
  2)添加下面的行到/mnt/encroot/etc/crypttab告訴系統(tǒng)如何完成加密:
  swap /dev/hda3 /dev/urandom swap
  至此我們應該可以重新啟動系統(tǒng)并使用我們的加密文件系統(tǒng),再說一次,我們需要暫停啟動選項命令進入Open Firmware提示符。
  正如上面說到的,閃存盤第二個分區(qū)路徑是/pci@f2000000/usb@1b,1/disk@1:2。了解了這一點,我們可以建立路徑/pci@f2000000/usb@1b,1/disk@1:2,\ofboot.b。在分區(qū)號和文件系統(tǒng)路徑之間的分隔符是‘,’,\ofboot.b是文件系統(tǒng)路徑,\與Unix的/類似。
  
> dir /pci@f2000000/usb@1b,1/disk@1:2,\
Untitled GMT File/Dir
Size/ date time TYPE Name
bytes 9/ 3/ 4 21:44:41 ???? ???? initrd.gz
2212815 8/28/ 4 12:24:21 tbxi UNIX ofboot.b
3060 9/ 3/ 4 2:21:20 ???? ???? vmlinux
141868 9/28/ 4 12:24:22 boot UNIX yaboot
914 9/28/ 4 12:24:22 conf UNIX yaboot.conf
  這就確定了Open Firmware可以讀取啟動系統(tǒng)需要的文件,設置boot-device變量的值為/pci@f2000000/usb@1b,1/disk@1:2,\ofboot.b使得系統(tǒng)可以從閃存盤啟動:
  setenv boot-device /pci@f2000000/usb@1b,1/disk@1:2,\ofboot.b
  一旦系統(tǒng)從加密root文件系統(tǒng)成功啟動,必須清除掉/dev/hda5上的所有數據,可以使用隨機排列root文件系統(tǒng)分區(qū)同樣的方法來實現(xiàn):
  dd if=/dev/urandom of=/dev/hda5
  你可能想對hda5重寫幾次,要想了解處理干凈一個磁盤,請查看美國安全部門編寫的“National Industrial Security Program Operating Manual”第八章。
  根據一個安全處理原則,/dev/hda5可能被掛載為/home,/home文件系統(tǒng)也應該被加密,幸運的是,這是一個簡單的過程,因為系統(tǒng)不需要/home啟動,象創(chuàng)建root文件系統(tǒng)一樣創(chuàng)建/home文件系統(tǒng)
  1)確認aes,dm-mod,dm-crypt模塊已經載入內核
  2)卸載/dev/hda5
  #umount /dev/hda5
  3)創(chuàng)建一個隨機256位加密密鑰,存儲在/etc/home-key
  #dd if=/dev/urandom of=/etc/home-key bs=1c count=32
  4)創(chuàng)建一個dm-crypt設備,用剛剛生成的密鑰加密
  #cryptsetup -d /etc/home-key create home /dev/hda5
  5)在/dev/mapper/home上創(chuàng)建一個ext3文件系統(tǒng)
  #mkfs.ext3 /dev/mapper/home
  6)掛載新文件系統(tǒng)
  #mount /dev/mapper/home /home
  7)在/etc/crypttab中創(chuàng)建一個條目,讓各種實用程序都清楚文件系統(tǒng)是如何配置的
  root /dev/hda5 /etc/home-key cipher=aes
  8)最后,為/home更新/etc/fstab條目
  /dev/mapper/home /home ext3 defaults 1 2
  至此,可以添加非root系統(tǒng)賬號了,設置加密root文件系統(tǒng)的過程就結束了。
  加密你所有數據可能很危險,如果加密密鑰丟失,你的數據就丟失了,就因為這個原因,備份你的包含有你的密鑰的閃存盤很重要,同樣,備份加密數據對應的明文也很重要,如果你保存有一張可啟動的緊急救援磁盤,重新考慮應該放哪些系統(tǒng)組件在上面或許很有意義,你的root和home文件系統(tǒng)、密鑰、parted、hfsutils、加密技術有關的內核模塊以及cryptsetup腳本的拷貝都應該放進去。
  這個技術在保護你的數據方面究竟有什么實際好處?在《Secrets and Lies》這本書中,作者Bruce Schneier提出了一個有用的手段來評估這個技術,一個攻擊樹可以用于模型危險,圖4呈現(xiàn)了一個攻擊我們加密文件系統(tǒng)的樹型圖,值得注意的是這顆攻擊樹不是完整的,可能隨時間推移會發(fā)生改變。
  

  圖4攻擊者如何讀取加密文件系統(tǒng)的數據
  通過使用本文討論的技術和一點創(chuàng)新的想法,確保你磁盤上的數據對常見的偷竊行為更具抵抗性是可能的,跟蹤攻擊種類的發(fā)展比了解防御更重要,盡管還有其他的技術用于保護基于網絡的或其他類型的攻擊,但本文討論的技術對整個系統(tǒng)安全的目標具有重要意義。

相關文章

最新評論