eCryptfs и шифрование домашнего каталога в Linux






Многие обращали внимание на предложение Ubuntu во время установки зашифровать домашний каталог пользователя. Я до недавних пор всегда его игнорировал из соображений «хрен знает, что они там выдумали, разбираться неохота», но однажды любопытство пересилило и нашлось свободное для познания сей тайны время. Всех, кому интересно, приглашаю под кат.




Лучший способ научиться чему-то — это сделать самостоятельно. В качестве подопытного кролика было решено взять Debian 6.0.3, оказавшуюся под рукой и не шифровавшей домашние каталоги пользователей. На ней весь процесс и производился. Если у вас в качестве ОС используется нечто совсем далёкое, гарантий, что процесс настройки будет таким же — никаких.

Как это работает

Для организации защиты ваших персональных данных в Ubuntu разработчики предпочли eCryptfs — файловую систему, работающую «поверх» любой другой обычной ФС и прозрачно шифрующую/дешифрующую содержимое файлов. Криптографические метаданные eCryptfs хранит в заголовках каждого файла, таким образом вы можете без проблем переносить любой файл между различными системами. Всё это счастье реализовано на уровне ядра Linux, обеспечивая хороший уровень производительности по сравнению с FUSE-шифрованием (например, EncFS).

Установка

Всё, что нужно для работы eCryptfs, во всех современных Linux-дистрибутивах имеются по умолчанию «из коробки». Если же ядро Linux вы собирали самостоятельно, то удостоверьтесь, что в вашей сборке присутствует необходимый модуль:

Далее, для работы с eCryptfs нам понадобятся userspace-инструменты, которые в Debain/Ubuntu легко устанавливаются из пакета:

Монтирование eCryptfs

Чтобы лучше понять и увидеть на практике, как работает eCryptfs, смонтируем какой-нибудь каталог и посмотрим, что происходит в реальности. Для начала создадим пустой каталог, который будем шифровать:

Теперь смонтируем созданный каталог используя eCryptfs:

Обратите внимание, что исходным и целевым каталогом команде mount указан один и тот же каталог. Это несколько «нетрадиционно» для операции монтирования, однако вполне допустимо и удобно. Если вас это запутывает, вы можете использовать разные точки с более осмысленными именами, вроде:

После ввода команды вам необходимо ввести пароль для ключа шифрования:

Введите пароль, не забывая о том, что его утеря будет означать невозможность получения данных! После ввода пароля вам будет предложено выбрать алгоритм шифрования, с по-умолчанию выбранным AES:

Далее вам необходимо выбрать размер ключа:

Значением следующей опции вы разрешаете или запрещаете доступ к файлам, которые не были зашифрованы при помощи eCrypfs:

Шифровать или нет имена файлов:

Далее вы увидите сводку выбранных опций (их можно использовать в опциях монтирования в будущем):

Если вы впервые монтируете и/или сигнатура этого монтирования не сохранена в кэше, то вас вежливо предупредят о том, что вы могли ввести пароль неверно:

Если всё ок, можно подтверждать монтирование:

Чтобы избежать в будущем появления вышеуказанного предупреждения, вы можете добавить сигнатуру монтирования eCryptfs в файл:

Если всё прошло успешно, вы получите соответствующее сообщение:

Теперь скопируем что-нибудь в смонтированный каталог:

Посмотрим его содержимое и размер:

Теперь отмонтируем eCryptfs и посмотри, как изменился наш файл:

Заглянув же вовнутрь файла, вы увидите там лишь двоичные данные.

pam_ecryptfs

Ещё одной довольно интересной и полезной штукой, идущей в поставке eCryptfs, является PAM-модуль pam_ecryptfs. Вызывается этот модуль во время логина пользователя и работает следующим образом. Если в домашнем каталоге обнаруживается файл ~/.ecryptfs/wrapped-passphrase, а также файл ~/.ecryptfs/auto-mount то модуль pam_ecryptfs расшифровывает содержимое файла ~/.ecryptfs/wrapped-passphrase, используя пароль пользователя. Далее расшифрованное содержимое используется в качестве пароля при монтировании каталога ~/.Private в точку ~/Private. Таким образом, пользователю не нужно дополнительно монтировать каталог с личными зашифрованными данными, всё происходит автоматически. Для того, чтобы модуль работал, он должен быть соответствующим образом объявлен в /etc/pam.d/common-auth:

и в /etc/pam.d/common-session:

Зашифрованный персональный каталог Private

Чтобы пользователям было сухо и комфортно при самостоятельном создании Private-каталогов, разработчики включили в поставку eCryptfs специальный shell-скрипт ecryptfs-setup-private, который делает всю работу по подготовке персонального шифрованного хранилища:

  1. создаёт каталоги  ~/.Private и ~/Private;
  2. шифрует пароль монтирования и сохраняет его в ~/.ecryptfs/wrapped-passphrase;
  3. позволяет настроить опции автомонтирования/размонтирования и т. п.

Работает сценарий очень просто и при запуске в режиме «по умолчанию» не требует никаких дополнительных параметров:

На следующий запрос введите ваш пароль, который используете при аутентификации в системе:

После вам будет предложено ввести пароль, который будет использоваться при монтировании. Если не заполнять это поле, то пароль будет сгенерирован автоматически:

Очередное напоминание для забывчивых:

создание файлов, каталогов и тестирование:

И, наконец, сообщение о том, что теперь достаточно перевойти в систему, чтобы начать пользоваться благами цивилизации:

Заново авторизуйтесь с системе и посмотрите, смонтировался ли каталог ~/.Private:

Всё отлично, самое время проверить работоспособность нашего нового хранилища:

Теперь, когда вы выйдите из системы, модуль pam_ecryptfs автоматически размонтирует точку ~/Private, таким образом оставив ваши данные в зашифрованном каталоге ~/.Private. Если вы не хотите, чтобы каталог ~/Private монтировался и/или размонтировался автоматически, удалите соответственно файл ~/.ecryptfs/auto-mount и/или ~/.ecryptfs/auto-umount.

Также имейте ввиду, что сценарий ecryptfs-setup-private принимает ряд опций, при помощи которых вы можете управляет его поведением:

Полное шифрование домашнего каталога

Идея хранения критически-важных данных в отдельном каталоге очень даже недурна собой, но не лишена очевидного недостатка. А именно: вы обязаны постоянно выбирать, что нужно шифровать, а что не нужно. Ну, или хранить вообще всё в Private-каталоге, что, мягко-говоря, не очень удобно. Вместо того, чтобы выделять отдельный каталог, не лучше ли зашифровать вообще весь домашний каталог? Именно это и предлагает вам Ubuntu при установке, и именно eCryptfs она для этого использует!

Если вы при установке выбрали опцию, показанную на скриншоте в начале статьи, то вы уже являетесь счастливым защищённым от врага пользователем. Если же это не так, но вам очень хочется спрятать от чужих глаз свои данные в случае чего и вы уже поняли, что eCryptfs — это именно то, что вам нужно для этого, то нет проблем!

Основная загвоздка при полном шифровании домашнего каталога состоит в том, что необходимо «вынести» каталог с зашифрованными данными за пределы точки монтирования. Разработчики Ubuntu решили проблему очень просто:

То есть, в домашнем каталоге находится лишь символическая ссылка, следуя которой, eCryptfs монтирует нужный каталог. При этом, точка монтирования переопределена в файле ~/.ecryptfs/Private.mnt и указывает на домашний каталог пользователя, т. е., в данном случае, на /home/ashep. Гениально и просто!

Чтобы избавить вас от необходимости перемещать файлы и настраивать вручную все пути и символические ссылки, разработчики предлагают shell-сценарий ecryptfs-migrate-home, который проделает всю «грязную» работу за вас. Также разработчики предупреждают о том, что этот сценарий может сделать ваши данные недоступными, если вдруг что-то пойдёт не так, поэтому обязательно сделайте резервную копию перед тем, как будете запускать скрипт! Также перед запуском убедитесь, что в системе установлены утилиты rsync и lsof, а также в том, что на разделе, где находится /home, имеется достаточно свободного места.

Сценарий необходимо запускать от root, передав в качестве параметра логин пользователя, который «мигрирует». Пользователь не должен находится в системе, а также от его имени не должно быть запущено ни одного процесса.

Если всё пройдёт успешно, то, как требует сценарий, мигрировавший пользователь должен войти в систему до перезагрузки. Также обратите внимание, что скрипт оставляет копию незашифрованных данных в отдельном каталоге (в приведённом примере это /home/ashep.81yFQbNJ), который необходимо удалить после того, как пользователь определит, что всё прошло успешно.

Теперь, когда мигрировавший пользователь войдёт в систему, его домашний каталог будет смонтирован следующим образом:

при этом ~/.Private является символической ссылкой на каталог за пределами домашней папки:




eCryptfs и шифрование домашнего каталога в Linux: 4 комментария

  1. Признаться, классная, объёмная и полезная статья. Я обычно использую truecrypt или же шифрую нужные данные с помощью gpg, но это все вручную. Любой, кто поменяет пароль от рута на моей учётке, без проблем откроет и браузер, где сохранены пароли на некоторые форумы, к примеру. Тут, как я понимаю, будет сложнее добыть информацию.

  2. Aleksdem, если вы с TrueCrypt будете использовать пароли вместо ключей или же хранить ключи так, чтобы до них нельзя было добраться, получив доступ к машине, то и получить доступ к данным будет практически нереально.

    А eCryptfs понравилась мне лично из-за того, что умеет делать модуль pam_ecryptfs. В остальном — всё те же алгоритмы и уровень защиты.

  3. Привет всем, при установке ubuntu server также надо шывровать домашний каталог?

    p.s. Наперед спасибо за ответ

  4. проверил на debian 6

    зашифровал дом. каталог пользователя test

    # su test

    и вуаля — все файлы доступны

    подозреваю, что это так же будет работать под любым судоером, следовательно имеет смысл только в системе с одним судоером и то надо тестить, не знаю как сбрасывается пароль в системе без рута

Комментарии запрещены.