Как получить полезное полное шифрование диска с различными шифрованиями для разных пользователей

Я хочу иметь полное системное шифрование на своем ноутбуке. Но у меня есть два пользователя, один для дома и один для работы, и для них требуется отдельное шифрование. Конечно, я могу сделать полное шифрование диска с помощью dm-crypt и использовать второй уровень шифрования с ecryptfs для шифрования домашних каталогов. Однако, по-видимому, это не очень хорошая идея по соображениям производительности. Итак, как я могу настроить систему таким образом, чтобы:

  • весь жесткий диск зашифрован
  • когда пользователь 1 входит в систему, а пользователь 2 нет, данные пользователя 2 зашифровываются для пользователя 1 и наоборот
  • Мне нужно ввести один пароль при загрузке, который расшифровывает систему (например, в обычной настройке LVM / dm-crypt) и только второй, который регистрирует пользователя x и расшифровывает его раздел
  • производительность похожа на простое полное шифрование диска
  • решение должно работать вместе с ssd, т. е. оно должно поддерживать TRIM

Я хочу использовать ubuntu в качестве дистрибутива для этого, если это имеет значение.

  • Как я могу расшифровать мой зашифрованный / домашний раздел?
  • Что такое «заголовок файла» в файловых системах Linux?
  • Каков максимальный разрешенный размер файла (и папки) с помощью eCryptfs?
  • Не удалось переустановить GRUB на зашифрованную файловую систему
  • Есть ли инструмент для сопоставления открытого текста eryptfs и зашифрованных имен файлов?
  • Автоматический монтаж ecryptfs работает только после клонирования
  • Я сбрасываю свой пароль, и теперь я могу войти в систему, но без nautilus или меню программы
  • Скрытие зашифрованной папки в общей системе без доступа root (unshare -m)
  • 2 Solutions collect form web for “Как получить полезное полное шифрование диска с различными шифрованиями для разных пользователей”

    1. Не шифруйте весь жесткий диск (как в /dev/sda , сделайте это для каждого раздела (или, точнее, для файловой системы – см. Ниже).

    2. Для двух пользователей существуют отдельные файловые системы, установленные в домах. Я намеренно избегаю писать отдельные разделы, поскольку, хотя это обычный способ делать что-то, он сдерживает некоторые аспекты. Возможно, более удобно иметь один большой домашний раздел, который содержит большие файлы, которые содержат зашифрованные файловые системы и монтируются по мере необходимости. Преимуществом является упрощение изменения размеров домов пользователей, в то же время их разделение.

    3. Автоматические учетные записи при входе в систему возможны через PAM. Обратите внимание, что вы не хотите использовать один и тот же пароль для входа и для фактического шифрования данных . Вместо этого вы либо используете LUKS, либо имитируете его, сохраняя ключ шифрования в файле, который сам зашифрован паролем входа. Это гарантирует, что изменение пароля для входа не повлияет на зашифрованные данные, а только зашифрованный ключ и, следовательно, вам не придется заботиться о повторном шифровании всех пользователей дома).

    Основные инструкции:

    • разделение использует gdisk (также иногда называемый gptfdisk ), gptfdisk или любую другую соответствующую программу, читайте man-страницы для деталей (разделение немного выходит за рамки этого QA)

    • зашифрованные файловые системы на основе файлов. У меня есть некоторые возражения против дизайна LUKS, поэтому я обычно использую cryptsetup в режиме «простой», который имитирует LUKS в некоторых аспектах. Если вы выбираете LUKS, вы можете просто уменьшить шаги до cryptsetup (с соответствующим образом измененными параметрами)

      1. подготовьте ключ шифрования и пароль. Это интересная часть – для шифрования данных, которые вы хотите что-то с достаточной случайностью (на 8-буквенном пароле действительно недостаточно), а для пароля – что-то, что вы можете легко изменить (без необходимости повторной шифровки всей файловой системы) и достаточно просто помнить и вводить. Эти требования полностью противоречат друг другу. Следовательно, мы будем использовать тот же трюк, который делает LUKS (и который в действительности может считаться вариацией гибридной криптосистемы в некотором смысле)). Ключ шифрования может быть более или менее случайным – либо использовать некоторые действительно случайные данные (например, из /dev/random ), либо достаточно длинный хэш, например SHA-2 или SHA-3 (первый из них был разработан NSA, если вы задаетесь вопросом использовать его или нет в свете последних событий) достаточно длинной фразы.

        Достаточно долго в первом случае (и в случае действительно случайных данных) означает, что длина должна быть о выбранной длине ключа для используемого шифра плюс длина вектора инициализации . Во втором случае это означает, что это должно быть трудно переборщить . Использование хеша имеет то преимущество, что можно восстановить ключ, если он поврежден или потерян (при условии, что вы помните начальную кодовую фразу, которая была хэширована, конечно). Затем этот ключ зашифровывается и сохраняется в файле. Ключевая фраза для зашифрованного ключа в вашем случае будет такой же, как и пароль для входа.

         # set up the encrypted encryption key printf "Reasonably long and complicated passphrase" \ | openssl dgst -sha512 -binary \ | openssl enc -bf > /path/to/key.enc 

        openssl dgst -sha512 -binary производит двоичную форму хэша SHA-512 со своего стандартного ввода, openssl enc -bf шифрует его с помощью Blowfish – не стесняйтесь выбирать хеш и шифр по своему вкусу (Twofish или Rijndael достаточно хорошо разбираются, но другие шифры, доступные в ядре, тоже должны быть прекрасными).

        Сохранение ключа за пределами зашифрованного устройства имеет недостаток в том, что требуется дополнительная вещь помимо самих зашифрованных данных – LUKS хранит ключ в своих заголовках, поэтому он является автономным. С другой стороны, вы привязаны к определенному набору инструментов. Хотя он не разработан небрежно и присутствует на большинстве установок, вам нужны специальные инструменты для доступа к нему.

        С другой стороны, с помощью другого файла вы можете выбрать любой способ хранения ключа. Вы даже можете поместить его на съемный носитель, вставить его перед входом в систему и удалить его после установки файловой системы (возможно, вы даже можете подключить автоматический вход в систему при подключении носителя к компьютеру). Конечно, все это должно быть хорошо продумано, поскольку применяется принцип безопасности «Не изобретайте свой собственный крипто» (см., Например, этот пост в Security SE ), что может быть аргументом в пользу использования LUKS. Резервное копирование ключа, очевидно, легко.

      2. создать пустой файл, в котором будет храниться файловая система

         dd if=/dev/zero of=/path/to/backing_file.enc bs=1M count=X 
      3. создать зашифрованное устройство

         openssl enc -bf -d -in /path/to/key.enc 2>/dev/null \ | cryptsetup create \ -c twofish-cbc-essiv:sha256 \ -s 256 \ -h plain \ encryptedfs /path/to/backing_file.enc 

        openssl enc -bf -d запрашивает пароль на stdin и пытается расшифровать ключ шифрования. cryptsetup create ... encryptedfs /path/to/backing_file.enc создал зашифрованное DM-устройство с именем encryptedfs поддерживаемое ранее созданным файлом. Важным вариантом является -c который выбирает шифрование и его режим работы

      4. заполнить устройство нулями – это эффективно помещает «случайный мусор» в файл резервной копии и делает его менее очевидным, каково содержимое файла (в противном случае вы могли бы сказать, где были написаны сканирование для блоков, которые не обнуляются с шага 2).

         dd if=/dev/zero of=/dev/mapper/encryptedfs bs=1M 
      5. Создание файловой системы

         mkfs.[favourite_filesystem] [tuning options] /dev/mapper/encryptedfs 
      6. Поместите соответствующую строку в /etc/fstab в случае, если вы хотите делать все самостоятельно или в /etc/crypttab если хотите какую-то интеграцию с системными инструментами.

    • для автоматического (un) монтажа при входе / выходе из системы, я буду ссылаться на документацию pam_mount .

    Я могу подумать о двух ценных способах достижения такой системы без двойного шифрования дома.

    • отдельный домашний раздел: создайте отдельный раздел, который будет установлен в /home . Затем каждый пользователь шифрует свой дом через encfs .
    • отдельный домашний раздел для каждого пользователя: каждый пользователь получает отдельный раздел для своего дома, который сам зашифрован с использованием dm-crypt . Затем этот раздел устанавливается на /home/user при входе в систему.

    Конечно, плюс шифрование / 😉

    В обоих случаях дома могут автоматически монтироваться во время процесса входа в систему, если вы используете один и тот же пароль для входа и шифрования. (может быть сконфигурирован, например, /etc/security/pam_mount.conf.xml , есть много howtos). Хотя первый метод не шифрует имена папок ваших пользователей, используя второй метод, все шифруется. Поэтому я бы предпочел (и фактически использовать) метод два 😉

    Linux и Unix - лучшая ОС в мире.