Монтируемый при загрузке зашифрованный раздел
Материал из База знаний проекта Russian Fedora
Настоящая статья описывает способ получения шифрованный раздела, который:
- не требует ввода пароля для монтирования
- монтируется по ключу, находящемуся на внешнем носителе;
- монтируется при загрузке;
- в случае отсутствия ключа не выдающий никаких запросов об этом.
Наиболее очевидная уязвимость в этой конструкции - наличие ключа на внешнем носителе, который, скорее всего, можно скопировать постороннему.
Достижение нашей цели производится с помощью LUKS, cryptsetub и ds-crypt в Fedora 16.
Создание зашифрованного диска
LUKS работает с блочными устройствами, это значит, что зашифровать можно только раздел целиком. Для шифрования отдельных файлов или папок на носителе (например, домашней папки) можно воспользоваться пакетом ecryptfs-utils. Все команды производить под sudo.
- Таким образом, любым удобным способом (самый простой - Дисковая утилита), создаём пустой раздел, он будет являться контейнером для создания зашифрованного раздела. В данном руководстве за такой раздел примем /dev/sda3
- Для повышения устойчивости шифрования настоятельно рекомендуется наполнить раздел случайными данными. Данные команды утичтожают все данные с выбранного устройства. Если у вас есть время и/или шифруемый раздел не слишком велик, воспользуйтесь командой:
dd if=/dev/urandom of=/dev/sda3
В противном случае командаbadblocks -c 10240 -s -w -t random -v /dev/sda3
сделает это быстрее, но менее качественно. - Лучший ключ - состоящий из случайной последовательности символов. Лучший генератор случайных чисел - /dev/random. Генерируем ключ key длиной 256 байт на флэшке c файловой системой fat или ext4 (допустим, она примонтирована как /media/flash) и запрещаем его изменение:
dd if=/dev/random of=/media/flash/key bs=1 count=256 chmod 0444 /media/flash/key
- Шифруем устройство с помощью сгенерированного ключа. Устройство должно быть отмонтировано. cryptsetup попросит ввести YES для подтверждения. Данная команда уничтожит все данные с устройства.
cryptsetup luksFormat /dev/sda3 /media/flash/key
- Убедимся в том, что всё прошло хорошо. Первая команда должна написать Success, вторая команда даст информацию по зашифрованному разделу.
cryptsetup isLuks /dev/sda3 && echo Success cryptsetup luksDump /dev/sda3
- Для дальнейших действий желательно узнать UUID контейнера з
- Открываем /etc/crypttab. В Fedora он пустой, поэтому заполняем его следующим образом:
Замена ключа шифрования
Если ключ скомпрометирован или просто прошло достаточно много времени с начала его использования, его необходимо заменить. Как и прежде, выполняем от рута команды для генерации нового шифрованного ключа, затем добавляем его в зашифрованный контейнер, а старый удаляем.Считаем, что зашифрованное устройство - /dev/sda3, а флэшка смонтирована как /media/flash. Новый ключ будет newkey.
- Генерируем ключ:
dd if=/dev/random of=/media/flash/newkey bs=1 count=256 chmod 0444 /media/flash/newkey
- Смотрим, какой слот занят ключом:
cryptsetup luksDump /dev/sda3
- добавляем новый ключ к старому
cryptsetup luksAddKey /dev/sda3 /media/flash/newkey
- Убеждаемся, что он добавился
cryptsetup luksDump /dev/sda3
- удаляем старый (если он был в Slot 0)
cryptsetup --key-file /media/flash/newkey luksKillSlot /dev/sda3 0
- на всякий случай убедимся, что он удалился из slot 0
cryptsetup luksDump /dev/sda3
- подключаем раздел с новым ключём, монтируем как /media/crypted (созданный предварительно), проверяем содержимое, если примонтировался - старый ключ можно удалить (а можно и не удалять, он уже ничем не поможет)
cryptsetup luksOpen /dev/sda3 crypted --key-file /media/flash/newkey mount /dev/mapper/crypted /media/crypted
