Jump to content

# eCryptfs (Русский)

2 languages

- English
- 日本語

From ArchWiki

Состояние перевода: На этой странице представлен перевод статьи eCryptfs. Дата последней синхронизации: 24 июля 2022. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

В статье описывается базовое использование eCryptfs. Статья проведёт вас через процесс установки зашифрованной домашней директории, в которой вы можете хранить личные/секретные данные.

Реализация eCryptfs отличается от реализации dm-crypt, которая предоставляет слой шифрования блочного устройства, в то время как eCryptfs является файловой системой — стековая криптографическая файловая система. О сравнении двух методов шифрования можно прочитать в статье Data-at-rest encryption (Русский)#Сравнение типов шифрования. Отличительной особенностью eCryptfs является то, что шифрование работает поверх существующей файловой системы; eCryptfs может быть смонтирован на любой существующий каталог и не требует отдельного раздела (или предварительного выделения места).

## Основы

Как уже упоминалось выше, eCryptfs не требует создавать отдельный раздел или предварительно выделять место. Вместо этого вы можете смонтировать eCryptfs поверх любого отдельного каталога для его защиты. Это включает, например, весь домашний каталог пользователя или отдельные каталоги внутри него. Все метаданные, необходимые для работы с шифрованием, хранятся в заголовках файлов, поэтому зашифрованные данные можно легко перемещать, хранить для резервного копирования и восстанавливать. Есть и другие преимущества, но есть и недостатки, например, eCryptfs не подходит для шифрования разделов целиком, что также означает, что вы не можете с его помощью защитить подкачку (но вы, конечно, можете использовать его совместно с dm-crypt для шифрования подкачки). Если вы только начинаете работать с шифрованием диска, шифрование подкачки и другие моменты, на которые стоит обратить внимание, рассматриваются в разделе Data-at-rest encryption (Русский)#Подготовка.

Несколько моментов для ознакомления с eCryptfs:

- Так как eCryptfs это стековая ФС, монтирование eCryptfs означает монтирование зашифрованного каталога в другую незашифрованную точку монтирования (каталог).
- Существует возможность совместного использования зашифрованного каталога несколькими пользователями. Однако шифрование выполняется одним паролем, поэтому пароль тоже должен быть общим для всех. Также можно совместно использовать каталог с разными зашифрованными файлами (разные пароли).
- Некоторые термины eCryptfs, используемые в документации:
  - В документации eCryptfs и в этой статье каталог, в котором хранятся данные в зашифрованном виде, называется нижним (lower), а каталог, в котором отображаются расшифрованные данные, — верхним (upper). Хотя это и не относится к данной статье, файловая система Overlay, представленная в Linux 3.18, использует то же обозначение верхних/нижних каталогов для объединения файловых систем.
  - Пароль монтирования (mount passphrase или key) — это то, что даёт доступ к зашифрованным файлам, то есть выполняет разблокировку зашифрованных данных. eCryptfs использует термин «wrapped passphrase» для обозначения криптографически защищённого пароля монтирования.
  - `FEKEK` означает File's Encryption Key Encryption Key — ключ шифрования, которым шифруются ключи шифрования файлов (смотрите документацию ядра).
  - `FNEK` означает File Name Encryption Key, ключ для (опционального) шифрования имён файлов, хранящихся в зашифрованном каталоге.

Перед использованием eCryptfs проверьте применимость следующих недостатков.

### Недостатки

- Простота использования

  Пакет ecryptfs-utils предоставляет несколько различных способов настройки eCryptfs. Высокоуровневые #Инструменты Ubuntu наиболее просты в использовании, но они жёстко кодируют путь к нижнему каталогу и другие настройки, что ограничивает их полезность. Пакет также включает низкоуровневые инструменты, которые полностью настраиваются, но они несколько сложнее в использовании по сравнению с альтернативами вроде EncFS.

- Длина имени файла

  Имена файлов длиной более 143 байт не могут быть зашифрованы (с опцией `FNEK`), если используется файловая система с максимальной длиной имени файла 255 байт.[1] Это может нарушить работу некоторых программ в вашем домашнем каталоге (например, кэширование Symfony).

- Монтирование сетевых хранилищ

  eCryptfs имеет давние баги при использовании поверх NFS и, возможно, других сетевых файловых систем, например, #При подключении через Mosh может произойти сбой монтирования на удалённом хосте. Всегда можно использовать eCryptfs в локальном каталоге, а затем скопировать зашифрованные файлы из локального каталога на сетевой хост. Однако, если вы хотите установить eCryptfs непосредственно поверх NFS, без локальной копии файлов, eCryptfs может упасть или вести себя некорректно. Если вы сомневаетесь, EncFS может быть лучшим выбором в этом случае.

- Разрежённые файлы

  Разрежённые файлы, записанные в eCryptfs, будут создавать более крупные, не разрежённые зашифрованные файлы в нижнем каталоге. Например, в каталоге eCryptfs выполнение команды `truncate -s 1G file.img` создаст зашифрованный файл размером 1 ГБ в нижней файловой системе с соответствующими требованиями к ресурсам (дисковое пространство, пропускная способность). Если бы тот же файл был создан на незашифрованной файловой системе или файловой системе, использующей шифрование блочного устройства, он занял бы всего несколько килобайт.

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

## Установка и монтирование

Перед началом посмотрите документацию eCryptfs.

eCryptfs входит в ядро с версии 2.6.19, но для работы с ней, вам нужны дополнительные инструменты: ecryptfs-utils и keyutils.

После установки загрузите модуль ядра:

    # modprobe ecryptfs

Чтобы примонтировать eCryptfs, нужны пользовательские инструменты из пакета ecryptfs-utils. К сожалению, из-за плохого дизайна этих инструментов лучше выбирать один из следующих трёх способов настройки eCryptfs с различными компромиссами:

1. Высокоуровневые #Инструменты Ubuntu, которые настраивают всё автоматически, но требуют, чтобы нижний каталог был `~/.Private/`, и позволяют использовать только одну зашифрованную файловую систему на пользователя.
2. #ecryptfs-simple, доступный в AUR, который является простым способом монтирования файловых систем eCryptfs, используя любой нижний каталог и верхний каталог.
3. #Ручная настройка, которая включает отдельные шаги для загрузки пароля и монтирования eCryptfs, но позволяет полностью контролировать каталоги и настройки шифрования.

### Инструменты Ubuntu

Большинство удобных инструментов, устанавливаемых пакетом ecryptfs-utils, предполагают очень специфическую настройку eCryptfs, а именно ту, которая официально используется в Ubuntu (где она может быть выбрана в качестве опции при установке). К сожалению, эти варианты не просто заданы по умолчанию, а фактически жёстко закодированы в этих инструментах. Если эта настройка не соответствует вашим потребностям, то вы не сможете использовать удобные инструменты и вам придётся следовать шагам из раздела #Ручная настройка.

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

- у каждого пользователя есть только один зашифрованный каталог, контролируемый этими инструментами:
  - или каталог `$HOME` полностью,
  - или один каталог с зашифрованными данными (по умолчанию `~/Private/`, но это можно изменить).
- нижний каталог всегда `~/.Private/`
  (если шифруется домашний каталог целиком, это будет символическая ссылка на `/home/.ecryptfs/пользователь/.Private/`)
- используемые параметры шифрования:
  - cipher: AES
  - key length: 16 bytes (128 bits)
  - key management scheme: passphrase
  - plaintext passthrough: enabled
- настройки зашифрованного каталога хранятся в файлах внутри каталога `~/.ecryptfs/`:
  (если шифруется домашний каталог целиком, это будет символическая ссылка на `/home/.ecryptfs/пользователь/.ecryptfs/`)
  - `Private.mnt` [текстовый файл] — содержит путь к верхнему каталогу (точке монтирования, например `/home/lucy` или `/home/lucy/Private`)
  - `Private.sig` [текстовый файл] — содержит подпись, используемую для идентификации пароля монтирования в списке ключей ядра
  - `wrapped-passphrase` [бинарный файл] — пароль монтирования, зашифрованный паролем пользователя
  - `auto-mount`, `auto-umount` [пустые файлы] — если они существуют, то модуль `pam_ecryptfs.so` (если он загружен) будет автоматически монтировать/размонтировать зашифрованный каталог при входе/выходе пользователя

#### Шифрование каталога

Для шифрования домашнего каталога смотрите #Шифрование домашнего каталога.

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

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

    $ ecryptfs-setup-private --nopwcheck --noautomount

и следуйте инструкциям. Опция `--nopwcheck` позволяет выбрать пароль, отличный от пароля входа пользователя, а опция `--noautomount` отключает автоматическое монтирование. Поэтому, если вы хотите в дальнейшем автоматически монтировать зашифрованный каталог при входе в систему, просто опустите обе опции.

Скрипт автоматически создаст структуры каталогов `~/.Private/` и `~/.ecryptfs/`, как описано выше. Он также запросит два пароля:

пароль пользователя (login passphrase)
  Это пароль, который вам нужно будет вводить каждый раз, когда вы захотите смонтировать зашифрованный каталог. Если вы хотите, чтобы работало автоматическое монтирование при входе в систему, это должен быть тот же пароль, который вы используете для входа в свою учётную запись пользователя.
пароль монтирования (mount passphrase)
  Из него генерируется фактический мастер-ключ, который будет использоваться для шифрования. Обычно вам не стоит придумывать здесь какой-то свой пароль; если вы не знаете, что делаете — просто нажмите Enter, чтобы позволить программе автоматически сгенерировать безопасный случайный пароль. Он будет зашифрован с использованием введённого вами пароля пользователя и сохранён в зашифрованном виде в файле `~/.ecryptfs/wrapped-passphrase`. Позже он будет автоматически расшифровываться («unwrap») в оперативной памяти по необходимости, так что вам никогда не придётся вводить его вручную. Не теряйте этот файл, иначе вы никогда больше не сможете получить доступ к своей зашифрованной папке! Вы можете запустить `ecryptfs-unwrap-passphrase`, чтобы посмотреть пароль монтирования в открытом виде, записать его на листе бумаги и положить в сейф (или другое надёжное место), чтобы использовать его для восстановления зашифрованных данных в случае случайной потери/повреждения файла `wrapped-passphrase` или если вы забудете пароль пользователя.

Точка монтирования («верхний каталог») по умолчанию `~/Private/`, но после настройки можно задать свой каталог с помощью следующих команд:

    $ mv ~/Private /путь/к/новому/каталогу
    $ echo /путь/к/новому/каталогу > ~/.ecryptfs/Private.mnt

Для использования зашифрованного каталога его нужно примонтировать — смотрите раздел #Монтирование ниже.

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

Скрипт-обёртка `ecryptfs-migrate-home` создаст зашифрованный домашний каталог для пользователя и позаботится о переносе всех существующих файлов из ещё не зашифрованного домашнего каталога.

Для его запуска пользователь должен выйти из системы и не оставить никаких запущенных от его имени процессов. Лучший способ добиться этого — выйти из системы, войти в консоль как root и проверить, что команда `ps -U пользователь` ничего не выводит. Также убедитесь, что у вас установлены rsync, lsof и which. После того как все необходимые условия выполнены, выполните:

    # modprobe ecryptfs
    # ecryptfs-migrate-home -u пользователь

и следуйте инструкциям. После завершения работы скрипта следуйте инструкциям по автомонтированию — смотрите раздел #Автомонтирование ниже. Пользователь должен обязательно войти в систему перед следующей перезагрузкой, чтобы завершить процесс.

Когда всё заработает, можно и нужно удалить незашифрованную резервную копию домашнего каталога пользователя, сохранённую в `/home/пользователь.случайные_символы`.

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

##### Вручную

Запустите скрипт-обёртку

    $ ecryptfs-mount-private

И введите пароль пользователя, который вы задали при создании зашифрованного каталога. После этого зашифрованный каталог будет примонтирован в верхний каталог (по умолчанию `~/Private/`).

Для размонтирования выполните:

    $ ecryptfs-umount-private

Совет: Если не требуется постоянный доступ к зашифрованным данным во время сеанса пользователя, можно создать какой-нибудь псевдоним, чтобы ускорить ручное выполнение команд.

В состав инструментов входит ещё один скрипт, который может быть очень удобен для доступа к зашифрованным данным `.Private` или домашнему каталогу. Выполнение `ecryptfs-recover-private` от имени root приведёт к поиску каталога в системе (или по опционально указанному пути), запросу пароля для него и монтированию каталога. Это может, например, использоваться с live-CD или другой системы для доступа к зашифрованным данным в случае восстановления. Обратите внимание, что при загрузке из Arch Linux ISO нужно сперва установить ecryptfs-utils. Он может монтировать только каталоги `.Private`, созданные с помощью инструментов Ubuntu.

##### Автомонтирование

Стандартный способ автомонтирования — через PAM. Смотрите pam_ecryptfs(8) и — для более подробной информации — 'PAM MODULE' в:

    /usr/share/doc/ecryptfs-utils/README

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

Ниже описаны шаги по его настройке:

1. Проверьте, что файлы `~/.ecryptfs/auto-mount`, `~/.ecryptfs/auto-umount` и `~/.ecryptfs/wrapped-passphrase` существуют (их автоматически создаёт ecryptfs-setup-private).

2. Добавьте ecryptfs в pam-стек в точности как описано ниже, чтобы обеспечить прозрачную дешифровку пароля монтирования при входе в систему:

Откройте `/etc/pam.d/system-auth` и после строки, содержащей `auth required pam_unix.so` (или `auth [default=die] pam_faillock.so authfail` если есть), добавьте:

    auth [success=1 default=ignore] pam_succeed_if.so service = systemd-user quiet
    auth    required    pam_ecryptfs.so unwrap

Далее, перед строкой, содержащей `password required pam_unix.so` (или `-password [success=1 default=ignore] pam_systemd_home.so` если есть) добавьте:

    password    optional    pam_ecryptfs.so

И, наконец, после строки `session required pam_unix.so` добавьте:

    session [success=1 default=ignore] pam_succeed_if.so service = systemd-user quiet
    session    optional    pam_ecryptfs.so unwrap

Примечание: Инструкции `pam_succeed_if.so` говорят процессу пропустить следующую строку, если сервисом, запрашивающим аутентификацию, является `systemd-user`, который работает параллельно с вашим сеансом и также аутентифицируется через PAM. Если домашний каталог будет смонтирован во второй раз, PAM не сможет его размонтировать. Это является нарушением работы systemd, и есть связанные баги: [2] [3][устаревшая ссылка 2023-10-29 ⓘ] [4] [5]. Метод, описанный здесь, является обходным решением.

3. Перелогиньтесь и с помощью команды mount проверьте, появилась ли новая точка монтирования:

    /home/пользователь/.Private on /home/пользователь/Private type ecryptfs (...)

Каталог `~/Private/` теперь должен содержать расшифрованные данные.

Примечание: Вышеуказанные изменения в `system-auth` включают автомонтирование при обычном входе в систему. Если вы переключаете пользователей вместо этого с помощью `su -l`, нужно внести аналогичные изменения и в `/etc/pam.d/su-l`.

Каталог должен автоматически размонтироваться и становиться недоступным, когда пользователь выходит из системы.

Примечание: Если вы используете автозапуск systemd от имени пользователя или другие отдельные процессы, которые продолжают работать после вашего выхода из системы, ваш домашний каталог не будет размонтирован до их завершения. Так и задумано, потому что пользовательские процессы всегда должны иметь возможность сохранять своё состояние.

### ecryptfs-simple

Используйте ecryptfs-simple, если вы просто хотите использовать eCryptfs для монтирования произвольных каталогов подобно EncFS. ecryptfs-simple не требует прав root или записей в `/etc/fstab`, а также не использует жёстко заданные каталоги вроде `~/.Private/`. Его можно установить с помощью пакета ecryptfs-simpleAUR или из репозиториев Xyne.

Как следует из названия, использование простое:

Простое монтирование:

    $ ecryptfs-simple /path/to/foo /path/to/bar

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

    $ ecryptfs-simple -a /path/to/foo /path/to/bar

Размонтирование по исходному каталогу:

    $ ecryptfs-simple -u /path/to/foo

Размонтирование по точке монтирования:

    $ ecryptfs-simple -u /path/to/bar

### Ручная настройка

Ниже приведены инструкции по настройке зашифрованных каталогов eCryptfs вручную. Это включает в себя два этапа. Во-первых, пароль обрабатывается и загружается в список ключей ядра. Во-вторых, файловая система монтируется с использованием ключа из списка ключей.

Есть два способа добавить пароль в список ключей ядра на первом этапе. Вариант попроще — `ecryptfs-add-passphrase`, который использует один пароль для шифрования файлов. Недостаток этого способа в том, что вы не сможете изменить пароль после шифрования. Это работает следующим образом:

    $ ecryptfs-add-passphrase
    Passphrase:
    Inserted auth tok with sig [78c6f0645fe62da0] into the user session keyring

Также можно передать пароль в стандартный ввод команды `ecryptfs-add-passphrase -`. Помните, что если вы запишете свой пароль в каком-то файле, это, как правило, сделает всё шифрование бессмысленным.

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

Приведённый ниже скрипт запрашивает пароль, генерирует ключ подобно ecryptfs-setup-private, шифрует его введённым вами паролем и записывает в файл `~/.ecryptfs/wrapped-passphrase`:

    $ mkdir ~/.ecryptfs
    $ ( stty -echo; printf "Passphrase: " 1>&2; read PASSWORD; stty echo; echo 1>&2; head -c 48 /dev/random | base64; echo "$PASSWORD"; ) \
      | ecryptfs-wrap-passphrase ~/.ecryptfs/wrapped-passphrase >/dev/null

Пароль должен быть не длиннее 64 символов.

Теперь можно расшифровать ключ паролем и загрузить его в ядро:

    $ ( stty -echo; printf "Passphrase: " 1>&2; read PASSWORD; stty echo; echo $PASSWORD; ) | ecryptfs-insert-wrapped-passphrase-into-keyring ~/.ecryptfs/wrapped-passphrase -
    Inserted auth tok with sig [7c5d3dd8a1b49db0] into the user session keyring

При любом из этих вариантов после успешного добавления ключа вы получите подпись (sig) вида `78c6f0645fe62da0`, которая пригодится в дальнейшем.

Существует два способа ручного монтирования eCryptfs, описанных в следующих разделах. Первый способ, с использованием `mount.ecryptfs_private`, позволяет выполнить монтирование от имени обычного пользователя и предполагает настройку некоторых конфигурационных файлов. Этот способ не позволяет изменять параметры шифрования, например, размер ключа. Второй способ — использовать обычную команду `mount` напрямую, что даст полный контроль над всеми настройками, но требует либо запуска от имени root, либо добавления записи в `/etc/fstab`, которая разрешит монтирование обычному пользователю.

Совет: Примеры ниже подразумевают использование зашифрованного каталога `.secret`, что отличается от жёстко закодированного каталога `.Private` из инструментов Ubuntu. Это сделано специально, чтобы избежать проблем с ошибочным автомонтированием, когда в системе для этого настроен PAM, а также проблем с другими инструментами, использующими жёстко заданные значения по умолчанию.

#### С использованием файлов настроек

Этот метод использует запуск команды `mount.ecryptfs_private` из пакета ecryptfs-utils, после предварительной загрузки пароля. Он не требует прав root.

Сначала выберите имя для файлов настроек в `~/.ecryptfs/` и определитесь с нижней и верхней директориями. В данном примере используется имя `secret` для файлов конфигурации, зашифрованные данные находятся в `~/.secret/`, а расшифрованные файлы будут доступны в `~/secret/` после монтирования. Создайте все эти каталоги:

    $ mkdir ~/.secret ~/secret ~/.ecryptfs

Теперь пропишите полные пути к ним в `~/.ecryptfs/secret.conf`. Формат похож на `/etc/fstab`, но без опций монтирования:

    $ echo "$HOME/.secret $HOME/secret ecryptfs" > ~/.ecryptfs/secret.conf

Запишите подпись ключа (sig), которую вам выдала команда `ecryptfs-add-passphrase` или `ecryptfs-insert-wrapped-passphrase-into-keyring` (смотрите выше), в файл `~/.ecryptfs/secret.sig`:

    $ echo 78c6f0645fe62da0 > ~/.ecryptfs/secret.sig

Если вы также хотите включить шифрование имён файлов, создайте ещё один пароль (или переиспользуйте предыдущий) и добавьте ещё одну подпись в файл `~/.ecryptfs/secret.sig`:

     $ echo 326a6d3e2a5d444a >> ~/.ecryptfs/secret.sig

Наконец, примонтируйте `~/.secret/` в `~/secret/`:

    $ mount.ecryptfs_private secret

После завершения работы размонтируйте:

    $ umount.ecryptfs_private secret

#### С использованием команды mount

Запуская команду `mount` вручную, вы получаете полный контроль над параметрами шифрования. Недостатком является то, что вам нужно либо запускать команду `mount` от имени root, либо добавить запись в `/etc/fstab` для каждого каталога eCryptfs, чтобы пользователи могли их монтировать.

Сначала создайте личные каталоги. В этом примере используются те же каталоги, что и в предыдущем разделе:

    $ mkdir -m 700 ~/.secret
    $ mkdir -m 500 ~/secret

Вкратце:

- Зашифрованные данные будут храниться в нижнем каталоге `~/.secret/`
- При монтировании расшифрованные данные станут доступны в каталоге `~/secret/`
  - Пока каталог не смонтирован, в него ничего нельзя записать
  - При монтировании он имеет те же права доступа, что и нижний каталог

Теперь, предполагая, что вы создали «wrapped passphrase» как описано в разделе выше, вам нужно загрузить ключ шифрования обычного пользователя один раз в список ключей пользователя root:

    # ( stty -echo; printf "Passphrase: " 1>&2; read PASSWORD; stty echo; echo $PASSWORD; ) | ecryptfs-insert-wrapped-passphrase-into-keyring /home/пользователь/.ecryptfs/wrapped-passphrase -
    Inserted auth tok with sig [7c5d3dd8a1b49db0] into the user session keyring

после чего следующая команда монтирования должна успешно сработать (не забудьте указать правильные подписи ключей):

    # mount -i -t ecryptfs /home/пользователь/.secret /home/пользователь/secret -o ecryptfs_sig=7c5d3dd8a1b49db0,ecryptfs_fnek_sig=7c5d3dd8a1b49db0,ecryptfs_cipher=aes,ecryptfs_key_bytes=32,ecryptfs_unlink_sigs

Примечание: По состоянию на 2022 год эта команда не работает из-за бага в systemd (FS#55943). Обходной путь — выполнить `keyctl link @u @s` перед монтированием.

- `ecryptfs_sig` — подпись ключа, которым шифруются данные.
- `ecryptfs_fnek_sig` — подпись ключа, которым шифруются имена файлов; если вам это не нужно, опцию можно опустить.
- `ecryptfs_key_bytes` может быть 16, 24 или 32 для изменения размера ключа шифрования.
- `ecryptfs_unlink_sigs` — удаляет ключи из списка ключей ядра при размонтировании, из-за чего вам нужно будет повторно загружать ключи при повторном монтировании.
- Также доступны и другие опции; они описаны в документации `ecryptfs`.

Совет: Есть инструмент `mount.ecryptfs`, который можно запустить от имени root для интерактивного ввода настроек монтирования. После его использования можно глянуть `/etc/mtab`, чтобы узнать, какие опции использовались.

После того, как вы выбрали подходящие параметры монтирования, вы можете добавить запись в `/etc/fstab`, чтобы монтировать каталог мог обычный пользователь. Скопируйте параметры монтирования в новую запись `/etc/fstab` и добавьте параметры `user` и `noauto`. Полный текст записи будет выглядеть примерно так (добавления выделены жирным шрифтом):

    /etc/fstab

    /home/пользователь/.secret /home/пользователь/secret ecryptfs noauto,user,ecryptfs_sig=7c5d3dd8a1b49db0,ecryptfs_fnek_sig=7c5d3dd8a1b49db0,ecryptfs_cipher=aes,ecryptfs_key_bytes=32,ecryptfs_unlink_sigs 0 0

- Параметр `noauto` важен, иначе systemd будет пытаться примонтировать зашифрованный каталог автоматически при загрузке системы.
- Параметр `user` разрешает монтирование обычному пользователю без прав root.
  - Пользовательское монтирование по умолчанию выполняется с опцией `noexec`. Если вам нужно разрешить запуск исполняемых файлов из зашифрованного каталога, добавьте параметр `exec` в записи fstab.

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

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

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

    $ ecryptfs-insert-wrapped-passphrase-into-keyring ~/.ecryptfs/wrapped-passphrase
    Passphrase:
    Inserted auth tok with sig [7c5d3dd8a1b49db0] into the user session keyring

Теперь каталог может быть смонтирован без лишних вопросов:

    $ mount -i ~/secret

и файлы, помещаемые в каталог `secret`, будут шифроваться. Эти два шага нужно выполнять каждый раз для ручного монтировния каталога.

Размонтирование:

    $ umount ~/secret

В завершение можно изменить пароль, которым шифруется ключ шифрования данных:

    $ ecryptfs-rewrap-passphrase ~/.ecryptfs/wrapped-passphrase
    Old wrapping passphrase:
    New wrapping passphrase:
    New wrapping passphrase (again):

Размонтирование должно автоматически очищать список ключей, но вы также можете проверить её состояние и очистить вручную:

    $ keyctl list @u
    $ keyctl clear @u

Примечание: Следует помнить, что `/etc/fstab` предназначен только для общесистемных разделов и обычно не должен использоваться для монтирования пользовательских разделов.

##### Автомонтирование

Для автоматического монтирования ранее определённого монтирования в `/etc/fstab` при входе в систему можно использовать различные методы. В качестве первого общего шага выполните пункты (1) и (2) раздела #Автомонтирование.

Затем, если вы входите в систему через консоль, простым способом является использование интерактивных команд mount и umount в настройках оболочки пользователя, например, Bash (Русский)#Файлы настроек.

Другой метод — автоматическое монтирование каталога eCryptfs при входе пользователя в систему с помощью pam_mount. Для его настройки добавьте следующие строки в файл `/etc/security/pam_mount.conf.xml`:

    <luserconf name=".pam_mount.conf.xml" />
    <mntoptions require="" />
    <lclmount>mount -i %(VOLUME) "%(before=\"-o\" OPTIONS)"</lclmount>

Перепишите эти строки вручную, а не просто скопируйте/вставьте их (особенно строку lclmount), иначе вы можете получить некоторые поврежденные символы. Пояснения:

- первая строка указывает, где находится пользовательский файл конфигурации (в данном случае `~/.pam_mount.conf.xml`)
- вторая строка очищает ненужные по умолчанию опции монтирования ("nosuid,nodev")
- последняя строка указывает, какую команду монтирования нужно запустить (для eCryptfs нужна опция `-i`).

Теперь создайте файл `~/.pam_mount.conf.xml` с описанием томов для монтирования:

    <pam_mount>
        <volume noroot="1" fstype="ecryptfs" path="/home/пользователь/.secret/" mountpoint="/home/пользователь/secret/" />
    </pam_mount>

"noroot" нужен, потому что ключ шифрования нужно добавлять в список ключей пользователя.

Наконец, измените файл `/etc/pam.d/system-login` как описано в статье pam_mount.

###### Дополнительный шаг

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

    /usr/local/bin/doecryptfs

    #!/bin/sh

    exit $(/usr/sbin/pmvarrun -u$PAM_USER -o0)

Затем добавьте следующую строку перед модулем eCryptfs unwrap в вашем стеке PAM:

    auth    [success=ignore default=1]    pam_exec.so     quiet /usr/local/bin/doecryptfs
    auth    required                      pam_ecryptfs.so unwrap

Статья предлагает добавить их в `/etc/pam.d/login`, но изменения нужно будет добавить во все другие места, где вы входите в систему, например, `/etc/pam.d/kde`.

## Использование

### Ссылка в зашифрованный каталог

Помимо использования зашифрованного каталога в качестве хранилища конфиденциальных файлов и личных данных, его также можно использовать для защиты данных приложений. Например, в Firefox есть внутренний менеджер паролей, но история просмотров и кэш также могут быть конфиденциальными. Защитить их очень просто:

    $ mv ~/.mozilla ~/Private/mozilla
    $ ln -s ~/Private/mozilla ~/.mozilla

### Удаление зашифрованного каталога

Для удаления зашифрованного каталога никаких особых действий не требуется. Убедитесь, что он размонтирован, и удалите соответствующий нижний каталог (например, `~/.Private/`) вместе со всеми зашифрованными файлами внутри него. Затем нужно удалить каталог `~/.ecryptfs/` с настройками и ключами шифрования, и на этом всё.

Если вы использовали #Инструменты Ubuntu для настройки, вы можете использовать команду:

    $ ecryptfs-setup-private --undo

и следовать её инструкциям.

### Резервное копирование

Если вы хотите переместить файл из зашифрованного каталога наружу, просто переместите его как обычно из смонтированного каталога `~/Private/`.

В eCryptfs криптографические метаданные хранятся в заголовках файлов. Варианты настройки, описанные в этой статье, отделяют каталог с зашифрованными данными от точки монтирования. Точка монтирования с расшифрованными данными полностью прозрачна и доступна для резервного копирования. Очевидно, что это необходимо учитывать при автоматическом резервном копировании, если нужно избежать утечки конфиденциальных незашифрованных данных в резервную копию.

Можно делать резервные копии или инкрементные резервные копии непосредственно зашифрованного каталога (например, `~/.Private/`) так же, как и любого другого обычного каталога.

Другие моменты, на которые следует обратить внимание:

- Если вы выполнили #Шифрование домашнего каталога с помощью инструментов Ubuntu, имейте в виду, что нижний каталог с зашифрованными файлами находится вне домашнего каталога обычного пользователя: по адресу `/home/.ecryptfs/пользователь/.Private/`.
- Следует убедиться, что для файлов настройки eCryptfs (обычно `~/.ecryptfs/`) тоже имеется резервная копия.
- Если вы используете специальные опции монтирования файловой системы, например `ecryptfs_xattr`, проведите дополнительную проверку целостности резервной копии.

## Известные проблемы

### При подключении через Mosh может произойти сбой монтирования на удалённом хосте

Это известная проблема сервера Mosh, который не оставляет смонтированным каталог eCryptfs `/home`.

## Смотрите также

- eCryptfs - сайт проекта и документация
- Аудит безопасности eCryptfs, выполненный Тейлором Хорнби (22 января 2014).
- eCryptfs and $HOME by Adrian C. (anrxc) - Article with installation instructions and discussion of eCryptfs usage
- Chromium data protection (November 2009) - Design document detailing encryption options for Chromium OS, including explanation on its eCryptfs usage
- eCryptfs design by Michael Halcrow (May 2005) - Original design document detailing and discussing eCryptfs

Categories:

- Data-at-rest encryption (Русский)
- Stackable file systems (Русский)

Hidden category:

- Pages with dead links