cryptsetup

更新時間: 25/12/11

介紹:

cryptsetup 是一個符合 LUKS(Linux Unified Key Setup) 加密方式的軟件

LUKS 是指它有一個 standardizes 的 partition header 或 file header

此 header 是用來儲存設定值及加密的 key!!

因此無需個別的設定檔了 !!!

好處是在A機上加密了, 不用仕何設置的情況下就可在B機上解密.

 


 

安裝:

apt-get install cryptsetup

root@debian:~# cryptsetup --version
cryptsetup 1.1.3

 


 

測試

重點在於 Format, Open, Close 這三個操作

  • luksFormat
  • luksOpen
  • luksClose

 

# dd if=/dev/zero of=/root/cryfile bs=1M count=10
# losetup /dev/loop0 /root/cryfile

# modprobe dm_mod

# cryptsetup luksFormat /dev/loop0

# cryptsetup luksOpen /dev/loop0 cryfs

 

# mkfs.ext4 /dev/mapper/cryfs
# mkdir /mnt/crypt
# mount /dev/mapper/cryfs /mnt/crypt/

 

使用完後, 卸載它:

# umount /mnt/crypt/

# cryptsetup luksClose /dev/mapper/cryfs

# losetup -d /dev/loop0

 


 

其他

 

查看是否加密了的東西來:

luksUUID

# cryptsetup luksUUID /dev/sda1
Device /dev/sda1 is not a valid LUKS device.

# cryptsetup luksUUID /dev/loop0
279467cf-edca-404c-9e88-dba32878a3e7

 

東西的詳細情況:

luksDump

# cryptsetup luksDump /dev/loop0

..............

Key Slot 0: ENABLED

Key Slot 1: DISABLED
...............

Key Slot 7:

 


後備 Key

 

luksAddKey/ luksKillSlot/ luksRemoveKey

# cryptsetup luksAddKey /dev/loop0

# cryptsetup luksKillSlot /dev/loop0    0
Enter any remaining LUKS passphrase:

# cryptsetup luksRemoveKey /dev/loop0
Enter LUKS passphrase to be deleted:
key slot 1 selected for deletion.
Enter any remaining LUKS passphrase:


 

備份重要的 Header

 

luksHeaderBackup / luksHeaderRestore

# cryptsetup luksHeaderBackup /dev/loop0 --header-backup-file /root/cry-header

# cryptsetup luksHeaderRestore /dev/loop0 --header-backup-file ./cry-header

P.S. Backup Header 時是不用 Password 的

      不會對加密了的Data有影響

       只有無 Header 或 master key size 及data offset 一致時才可 restore

 


 

cryptdisks

 

cryptdisks, cryptdisks_start 及 cryptdisks_stop 都是 cryptsetup 的 wrapper 來

它們都是根據 crypttab 去 掛載加密了的 Disk 的.

 

/etc/crypttab 的格式:

# <target name> <source device>         <key file>      <options>

# target name: resulting encrypted block device (/dev/mapper/name)
# source device: block device / UUID

wrapper 會把 source device 解密後掛到 target name 上

 

Example:

/etc/init.d/cryptdisks

cryptdisks_start <target name>

 

/etc/default/cryptdisks

會決定 checkargs 時的 program

Default: CRYPTDISKS_CHECK=blkid

 

有用的 checkargs  Option:

  • noauto
  • checkargs=ext4
  • luks
  • noearly (Default 在 mount lvm, evms, raid 前是有一次的, 後又一次)

 

Example:

# 輸入 pw 去 mount

# <target name> <source device>         <key file>      <options>
cryptfs UUID=279467cf-edca-404c-9e88-dba32878a3e7 none luks

# 用 key file 去 mount

echo -n "testing" > /etc/crypt.key

# <target name> <source device>         <key file>      <options>
cryptfs UUID=279467cf-edca-404c-9e88-dba32878a3e7 /etc/crypt.key luks

注意, keyfile 一定要用 echo -n 去建立, 否則會多了 /n