Шифрование жесткого диска в Linux при помощи dm-crypt
9 января 2017
После перехода на Arch Linux у меня возникла проблема выбора решения для шифрования домашнего каталога. Отсутствие шифрования — не вариант, потому что как минимум ноутбук могут украсть. Мне не хочется потом в панике бегать менять пароли и сбрасывать сессии на всех сайтах, от которых утекли куки. Сначала я попробовал encfs. Но это решение быстро потеряло все мои данные (не говоря уже про известную проблему с длинными именами файлов), поэтому от него пришлось отказаться. На Reddit многие посоветовали dm-crypt, на нем я в итоге и остановился.
Примечание: Если вы читали более раннюю статью Шифрование жесткого диска во FreeBSD с помощью geli, вам может быть интересно узнать, что dm-crypt — решение полностью аналогичное, только команды называются по-другому. Еще из достойных альтернатив, пожалуй, стоит обратить внимание на VeraCrypt, актуальный нынче форк знаменитого TrueCrypt.
Итак, создаем файл размером 200 Гб под зашифрованный диск:
sudo chown eax:eax /home/.eax
Создаем loop-устройство:
Инициализируем зашифрованный диск (потребуется дважды ввести пароль):
-s 512 luksFormat /dev/loop0
Открываем зашифрованный диск:
В результате появится устройсто /dev/mapper/eax_home. Создаем на нем ФС:
Монтируем зашифрованный диск:
Меняем права на файловой системе:
Копируем содержимое нашего домашнего каталога. Затем отмонтируем зашифрованный диск:
Закрываем зашифрованный диск:
Отсоединяем loop-устройство:
Теперь архивируем и удаляем содержимое /home/eax, затем монтируем в него зашифрованный диск. Если все работает нормально — удаляем бэкап.
Скрипт /home/mount.sh для автоматизации монтирования:
set -e
losetup /dev/loop0 /home/.eax
cryptsetup luksOpen /dev/loop0 eax_home
mount /dev/mapper/eax_home /home/eax
Скрипт /home/umount.sh, выполняющие обратные действия:
set -e
umount /home/eax
cryptsetup luksClose eax_home
losetup -d /dev/loop0
Когда оригинальных данных на диске не осталось, можно заполнить свободное место мусором:
# наберитесь терпения, это надолго (особенно без rng-tools!)
sudo dd if=/dev/urandom of=./random.tmp bs=10M count=6300
sync
sudo rm random.tmp
Наконец, чтобы временные файлы (те же черновики электронных писем, создаваемые Mutt) писались на зашифрованный раздел, в ~/.bashrc следует дописать:
mkdir -p $TMPDIR
Также с помощью dm-crypt можно зашифровать вообще всю файловую систему целиком, но это уже тема для отдельной статьи. Как обычно, куда больше информации о dm-crypt вы найдете в манах, а также в замечательной Arch Wiki.
Метки: Linux, Безопасность, Криптография.
Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.