Цель данной заметки в следующем, в системе есть неиспользуемый жесткий диск, флешка и уже на его основе сделать зашифрованный раздел применительно к моей системе Ubuntu 12.04.5 Server amd64 задействовав cryptsetup с поддержкой LUKS. Поясню для всех, LUKS – (аббревиатура: Linux Unified Key Setup) – упрощенный стандарт использования шифрования на дисках. Работа LUKS строится следующим образом, в заголовок партиции добавляется информация об алгоритме шифрования, который человеку не надо помнить, а также возможность задавать несколько паролей доступа к устройству и возможность менять его без обнуления/форматирования устройства.
Информация по смонтированному диску в систему:
ekzorchik@srv-mon:~$ sudo fdisk -l /dev/sdb
Disk /dev/sdb: 8589 MB, 8589934592 bytes
Установим необходимые пакеты для работы с шифрованием:
ekzorchik@srv-mon:~$ sudo apt-get install cryptsetup libcryptsetup4 lvm2 -y
Первое создадим раздел ориентированный на работу LVM:
ekzorchik@srv-mon:~$ sudo fdisk /dev/sdb -b 2048
n,p,1,enter,+7G,t,8e,p,w
Зашифруем созданный раздел, на устройстве назначив на него созданный файл ключ, но предварительно его нужно еще создать, создаем:
ekzorchik@srv-mon:~$ sudo dd if=/dev/urandom of=/root/keyfile bs=1024 count=4
[sudo] password for ekzorchik:
4+0 records in
4+0 records out
4096 bytes (4.1 kB) copied, 0.000462886 s, 8.8 MB/s
Дадим права на данный ключ только пользователю root и с правами только на чтение:
ekzorchik@srv-mon:~$ sudo chmod 0400 /root/keyfile
Добавим для созданного раздела заголовок, что он будет работать как шифрованный:
ekzorchik@srv-mon:~$ sudo cryptsetup -y -v luksFormat /dev/sdb1
WARNING!
========
This will overwrite data on /dev/sdb1 irrevocably.
Are you sure? (Type uppercase yes): YES – вводим заглавными буквами
Enter LUKS passphrase:712mbddr@
Verify passphrase:712mbddr@
Command successful.
Добавим данный ключ файл при шифровании раздела:
ekzorchik@srv-mon:~$ sudo cryptsetup luksAddKey /dev/sdb1 /root/keyfile
[sudo] password for ekzorchik:712mbddr@
(вводим пароль, под которым будет производиться доступ к созданному разделу)
Enter any passphrase:712mbddr@
ekzorchik@srv-mon:~$
Теперь можно посмотреть заголовок раздела, как видно сейчас у меня задействован один ключ, но LUKS позволяет добавить всего 8 ключей, которые могут использоваться как различные типы доступа, но я их пока не буду использовать. Цель заметки другая.
ekzorchik@srv-mon:~$ sudo cryptsetup luksDump /dev/sdb1
LUKS header information for /dev/sdb1
Version: 1
Cipher name: aes
Cipher mode: cbc-essiv:sha256
Hash spec: sha1
Payload offset: 4096
MK bits: 256
MK digest: 3d b4 8a df be 3e 30 c4 ec 68 00 32 3c f4 c5 c7 40 07 91 31
MK salt: 17 09 2f 33 a0 e7 93 3b fc 1f cd bd a7 57 83 a3
77 9f 6c 13 f2 f1 7e 8e 67 fa 74 53 ae c2 20 aa
MK iterations: 41500
UUID: e6e959f7-e53f-443f-823b-314846421cdd
Key Slot 0: ENABLED
Iterations: 178650
Salt: 39 f5 10 db ff 6a dc d8 66 43 fe f3 ec 39 84 94
1e 1b c7 99 e3 f5 bf f0 fa f5 d0 93 f0 20 af a9
Key material offset: 8
AF stripes: 4000
Key Slot 1: ENABLED
Iterations: 183735
Salt: ad 84 9d 20 ea d2 cf a5 57 2f bd cc 4d 61 26 70
6e 7a 8d 0b 69 78 94 75 14 2b 56 57 9e 98 8a 0b
Key material offset: 264
AF stripes: 4000
Key Slot 2: DISABLED
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED
Если нужно удалить ключ, то:
ekzorchik@srv-mon:~$ sudo cryptsetup luksKillSlot /dev/sdb1 1
Enter any remaining LUKS passphrase:<указываем_пароль_712mbddr@>
Также можно узнать – зашифрован диск или нет, с помощью просмотра заголовка диска:
ekzorchik@srv-mon:~$ sudo hexdump -C /dev/sdb1 | head
[sudo] password for ekzorchik:
00000000 4c 55 4b 53 ba be 00 01 61 65 73 00 00 00 00 00 |LUKS….aes…..|
00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |…………….|
00000020 00 00 00 00 00 00 00 00 63 62 63 2d 65 73 73 69 |……..cbc-essi|
00000030 76 3a 73 68 61 32 35 36 00 00 00 00 00 00 00 00 |v:sha256……..|
00000040 00 00 00 00 00 00 00 00 73 68 61 31 00 00 00 00 |……..sha1….|
00000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |…………….|
00000060 00 00 00 00 00 00 00 00 00 00 10 00 00 00 00 20 |…………… |
00000070 3d b4 8a df be 3e 30 c4 ec 68 00 32 3c f4 c5 c7 |=….>0..h.2<…|
00000080 40 07 91 31 17 09 2f 33 a0 e7 93 3b fc 1f cd bd |@..1../3…;….|
00000090 a7 57 83 a3 77 9f 6c 13 f2 f1 7e 8e 67 fa 74 53 |.W..w.l…~.g.tS|
На заметку: Выделенным я отметил, что наглядно идет демонстрация того, что диск зашифрован.
Далее подмонтирую шифрованный раздел открыв его на произвольную метку, в моем случае я ее именую, как mydata:
ekzorchik@srv-mon:~$ sudo cryptsetup luksOpen /dev/sdb1 mydata
Enter passphrase for /dev/sdb1:712mbddr@
ekzorchik@srv–mon:~$
Проверяю, что мое устройство с назначенной меткой видится в каталоге /dev/mapper/:
ekzorchik@srv-mon:~$ ls /dev/mapper/
control mydata srv–mon–vg-root srv–mon–vg-swap_1
Далее я создам новую файловую систему на подмонтированном шифрованном разделе:
ekzorchik@srv-mon:~$ sudo mkfs.ext4 /dev/mapper/mydata
Далее я создам директорию в системе, на которую буду монтировать шифрованный раздел с файловой системой под него:
ekzorchik@srv-mon:~$ sudo mkdir /media/mydata
Далее произведу монтирование шифрованного устройства на каталог, чтобы с ним можно было работать, как и со всеми обычными в системе:
ekzorchik@srv-mon:~$ sudo mount /dev/mapper/mydata /media/mydata
Далее проверю состояние назначенной шифрованной метки на раздел:
ekzorchik@srv-mon:~$ sudo cryptsetup status mydata
/dev/mapper/mydata is active and is in use.
type: LUKS1
cipher: aes-cbc-essiv:sha256
keysize: 256 bits
device: /dev/sdb1
offset: 4096 sectors
size: 14675968 sectors
mode: read/write
Для того, чтобы после перезагрузки шифрованный раздел получал метку автоматические добавим строку в файл /etc/crypttab:
Синтаксис: <target name> <source device> <key file> <options>
Но предварительно нужно узнать идентификатор дискового раздела /dev/sdb1:
ekzorchik@srv-mon:~$ sudo lsblk -o name,uuid,mountpoint | grep sdb
sdb
└─sdb1 e6e959f7-e53f-443f-823b-314846421cdd
Далее чтобы метка монтировалась на каталог в системе автоматически при загрузке системы делаю так:
ekzorchik@srv-mon:~$ sudo nano /etc/fstab
/dev/mapper/mydata /media/mydata ext4 rw 0 0
Сохраняем внесенные изменения.
ekzorchik@srv-mon:~$ sudo nano /etc/crypttab
mydata /dev/disk/by-uuid/e6e959f7-e53f-443f-823b-314846421cdd /root/keyfile luks
Сохраняем внесенные изменения.
После изменения /etc/crypttab файла, нужно переобновить initramfs:
ekzorchik@srv-mon:~$ sudo update-initramfs -u -k all
update-initramfs: Generating /boot/initrd.img-3.13.0-35-generic
update-initramfs: Generating /boot/initrd.img-3.11.0-15-generic
А уже после можно перезагрузить систему и проверить, как система автоматически монтирует зашифрованный том:
ekzorchik@srv–mon:~$ sudo reboot
Проверяю, смонтировался ли каталог, ответ ниже – «ДА».
ekzorchik@srv-mon:~$ df -h | grep mydata
/dev/mapper/mydata 6.8G 16M 6.4G 1% /media/mydata
На заметку:
Иногда может понадобиться срочно, закрыть шифрованный раздел, делается это так:
ekzorchik@srv-mon:~$ sudo umount /media/mydata/
[sudo] password for ekzorchik:
ekzorchik@srv-mon:~$ sudo cryptsetup luksClose mydata
, а потом если данный раздел понадобиться его можно подключить так, не перезагружая систему:
Либо указывая пароль к шифрованному разделу:
ekzorchik@srv-mon:~$ sudo cryptsetup luksOpen /dev/sdb1 mydata
Enter passphrase for /dev/sdb1:<указываем пароль на шифрованный раздел>,в моем случае это: 712mbddr@
Либо указываем путь к файлу с ключом:
ekzorchik@srv-mon:~$ sudo cryptsetup –key-file /root/keyfile luksOpen /dev/sdb1 mydata
И монтируем на каталог предопределенный в файле /etc/fstab:
ekzorchik@srv-mon:~$ sudo mount –a
Работает. Вот как с помощью нескольких команд можно превратить небольшой раздел диска в шифрованный криптоконтейнер, защищенный как специфическим паролем (сложным) или на основе ключа файла. Второй способ конечно же более интересный и позволяет избавиться от запоминания того множества паролей которые Системный администратор и так вынужден помнить наизусть, в тоже время я являюсь противником того, что пароли нужно записывать и хранить. Правильней же организовывать доступ по ключам. На этом я хотел бы подвести итог это заметки и попрощаться так сказать до новый встреч. Следите за обновлениями. Удачи, с уважением автор блога ekzorchik.
Спасибо за заметку, все пошагово работает. Многое объяснили. Вот бы побольше таких реальных заметок было на блогах.