歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> Linux文化

了解Linux 磁盤加密的方法


  隨著智能手機的計算能力和存儲能力的提高,手機中將會存放越來越多的私有數據,這些數據的洩密可能造成嚴重後果。手機信息安全一直是我們的重點之一,對於一些重要的功能我們要求鑒權後才能使用,但這只能擋住初級的黑客,只能防君子不能防小人,所以我們希望把重要的數據進行加密後再保存。為此,今天花了一點時間去了解Linux 磁盤加密的方法。

  方法一:cryptoloop

  下載並編譯util-linux

  http://www.paranoiacs.org/~sluskyb/hacks/util-linux/losetup-combined.patch

  http://ftp.cwi.nl/aeb/util-linux/util-linux-2.12.tar.gz

  http://hydra.azilian.net/util-linux-2.12-kernel-2.6.patch

  tar zxvf util-linux-2.12.tar.gz

  cd util-linux-2.12

  patch -p1 < ../losetup-combined.patch

  patch -p1 < ../util-linux-2.12-kernel-2.6.patch

  (如果有_syscall5之類編譯錯誤,將它換成新的調用方式syscall)

  make;make install

  編譯內核(已經支持cryptoloop則跳過此步)

  make menuconfig

  Device Drivers >Block Devices>Loopback device support

  BLK_DEV_CRYPTOLOOP

  加載模塊

  modprobe cryptoloop

  (以及加密模塊)

  創建loop設備

  dd if=/dev/zero of=~/cryptoloop.image bs=1M count=10

  losetup -e aes-256 /dev/loop0 ~/cryptoloop.image

  (提示輸入密碼)

  創建文件系統並加載

  mkfs.ext3 /dev/loop0

  mkdir /mnt/crypto

  mount -t ext3 ~/cryptoloop.image /mnt/crypto/ -oencryption=aes-256

  (提示輸入密碼)

  卸載

  umount /mnt/crypto

  losetup -d /dev/loop0

  重新加載

  losetup -e aes-256 /dev/loop0 ~/cryptoloop.image

  mount -t ext3 ~/cryptoloop.image /mnt/crypto/ -oencryption=aes-256

  cryptoloop的實現比較簡單,可以看看drivers/block/cryptoloop.c中的代碼。loop設備在讀寫之前會調用lo_do_transfer函數,該函數再調用所安裝的transfer插件。cryptoloop就是一種transfer的實現。至於使用哪種transfer及transfer的參數(如密碼),這可以通過LOOP_SET_STATUS64的ioctrl系統調用來完成(mount命令就是這樣實現的)。

  cryptoloop的缺點是只能針對loop設備,而且對日志型文件系統無效。

  方法二:device-mapper crypto

  下載並編譯cryptsetup(已經有了就跳過)

  wget http://www.saout.de/misc/dm-crypt/cryptsetup-0.1.tar.bz2

  cd cryptsetup-0.1

  ./configure;make;make install

  編譯內核(已經支持則跳過此步)

  make menuconfig

  Device Drivers > Multi-device support (RAID and LVM)

  CONFIG_BLK_DEV_DM

  CONFIG_DM_CRYPT

  加載模塊

  modprobe dm-crypt

  (以及加密模塊)

   創建loop設備

  dd if=/dev/zero of=~/dm-crypt.image bs=1M count=10

  losetup /dev/loop0 ~/dm-crypt.image

  建立device-mapper

  cryptsetup -y create dm-crypt /dev/loop0

  (提示輸入密碼)

  創建文件系統並加載

  mkfs.ext3 /dev/mapper/dm-crypt

  mount /dev/mapper/dm-crypt /mnt/crypto

  卸載

  umount /mnt/crypto/

  cryptsetup remove dm-crypt

  losetup -d /dev/loop0

  重新加載

  cryptsetup -y create dm-crypt /dev/loop0

  mount /dev/mapper/dm-crypt /mnt/crypto

  device-mapper crypto 的實現在drivers/md目錄下,相對來說要復雜得多,沒有來得及仔細閱讀。

  方法三:ecryptfs

  下載並編譯

  http://people.redhat.com/~dhowells/keyutils/keyutils-1.2.tar.bz2

  tar jxf keyutils-1.2.tar.bz2

  cd keyutils-1.2

  make;make install

  tar jxf ecryptfs-20070306.tar.bz2

  cd ecryptfs-20070306/ecryptfs-util

  ./configure;make;make install

  編譯內核

  make menuconfig

  File systems>Miscellaneous filesystems

  CONFIG_ECRYPT_FS

  加載模塊

  modprobe ecryptfs

  (以及加密模塊)

  加載

  mkdir /root/crypt

  mkdir /mnt/crypt

  mount -t ecryptfs /root/crypt /mnt/crypt

  (提示輸入密碼和算法)

   卸載

  umount /mnt/crypt

  重新加載

  mount -t ecryptfs /root/crypt /mnt/crypt

   (提示輸入密碼和算法)

  看來ecryptfs的特點是能夠對目錄進行加密,而不必加密整個磁盤。直接讀取原始目錄中的文件,只能讀到加密後的數據,要正確讀取數據,只有先把該目錄用ecryptfs文件系統格式加載到另外一個目錄,之後才能讀取。而在加載時要指定密碼和加密算法,這就起到保密作用。如果加載時指定錯誤的密碼或加密算法,仍然可以加載而不會出錯,但讀出的數據是無效的。

  ecryptfs的代碼在fs/ecryptfs目錄下,只有比較新的kernel版本才有,我用的是linux-2.6.21。它的實現與前面兩種方法不同,它完全是按文件系統的方式來實現的。

  以上幾種加密方法,在加載時都要輸入密碼,為了使用上的方便,可以與PAM+libpam-mount插件集成起來,用當前用戶的密碼作為加密的密碼,這樣就只需要在登錄時輸入一次就夠了。


Copyright © Linux教程網 All Rights Reserved