2013年7月31日

CentOS Disk Encryption (LUKS) 筆記

LUKS(Linux Unified Key Setup) / dm-crypt 是 CentOS  所使用的 block 層加密技術,其使用 kernel device mapper subsystem 來映對並進行加解密的動作,使用者則透過 cryptsetup 工具進行設定。另外要特別注意到該技術是利用應對的方式處理加解密,所以在讀寫資料時,應讀寫 device-mapping 裝置(Ex: /dev/mapper/luke-UUID),而不是直接讀取實際的裝置(Ex: /dev/sdb1)

功能
  • 可使用 passphrase (password) 或 key (金鑰) 方式加解密
  • 可加密一般的 partition, LVM physical volumes, LVM logical volumes, software RAID 及 SWAP
  • 透過Anaconda安裝時,只能選擇用 passphrase 加密方式
  • 可設定多組key或密碼 (key slot)

手動建立加密磁區

  • 需求套件 cryptsetup-luks, device-mapper, util-linux
  • 利用 fidsk 或 parted 建立磁碟分割,以/dev/sdb1為例
  • 清除磁碟上原有的資料(Option)
    shell># dd if=/dev/urandom of=/dev/sdb1
  • 初始化加密磁區並設定加密方式,此步驟可選擇使用 passphrase 或 key 加密
    注意此步驟會將硬碟資料清除!
    shell># cryptsetup luksFormat /dev/sdb1
  • 確認是否成功
    shell># cryptsetup isLuks /dev/sdb1 && echo Success
  • Dump加密格式資料
    shell># cryptsetup luksDump /dev/sdb1
  • 建立 mapped device,名稱建議使用 luks-UUID較具意義,該指令執行後會建立 /dev/mapper/luks-UUID 的裝置 (UUID請自行帶入磁碟的UUID)
    shell># cryptsetup luksOpen /dev/sdb1 luks-`cryptsetup luksUUID /dev/sdb1`
  • 確認 mapped device資訊
    shell># dmsetup info luks-UUID
  • 格式化磁區
    shell># mkfs.ext3 /dev/mapper/luks-UUID
  • 掛載。因為前面有輸入過密碼,掛載的時候並不會再提示一次
    shell># mount /dev/mapper/luks-UUID /mnt
  • 設定/etc/crypttab
    這個檔案用在開機時建立mapped device及加密相關設定,可以透過此設定檔自動載入密碼,詳細設定資訊參閱 man crypttab,下面為該檔的格式:

    device-mapping-name     device       password     options
    device 建議使用UUID,格式為 UUID=12345-123456-123122345,也可以用 /dev/sdb1

    所以在 /etc/crypttab 裡新增如下一行,none代表開機時要輸入密碼
    luks-UUID     UUID=UUID   none
  • 設定開機掛載(此步驟看需求)
    shell># vim /etc/fstab

    新增
    /dev/mapper/luks-UUID    /mount-point   ext3   defaults 1 2
  • 重開機測試

建立金鑰檔

基本上這個金鑰檔你可以自己建立,利用編輯器撰寫密碼或用亂數產生,甚至你可以自己建立SSL憑證的private key來使用

例如:

用亂數建立金鑰
shell># dd if=/dev/urandom of=/root/keyfile bs=32 count=1
shell># chmod 600 /root/keyfile

將金鑰新增到 key slot,新增過程你必須輸入 key slot 0 的密碼
shell># cryptsetup luksAddKey /dev/sdb1 /root/keyfile

設定開機讀取金鑰,可避免掉開機手動輸入密碼的程序
shell># vim /etc/crypttab
luks-UUID    UUID=UUID    /root/keyfile

刪除 key slot

先Dump luks header 的資料以取得 key slot 號碼
shell># cryptsetup luksDump /dev/sdb1

確認要刪除的 key slot 號碼後執行下面的指令即可刪除
shell># cryptsetup luksKillSlot /dev/sdb1 2


沒有留言:

張貼留言