ECryptfs (Русский)

From ArchWiki
Revision as of 21:06, 12 December 2010 by Irrlicht (talk | contribs) (Created page with "Category:Security (Русский) Category:File systems (Русский) Category:HOWTOs (Русский) {{i18n|Шифрование системы с помощь...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

This template has only maintenance purposes. For linking to local translations please use interlanguage links, see Help:i18n#Interlanguage links.


Local languages: Català – Dansk – English – Español – Esperanto – Hrvatski – Indonesia – Italiano – Lietuviškai – Magyar – Nederlands – Norsk Bokmål – Polski – Português – Slovenský – Česky – Ελληνικά – Български – Русский – Српски – Українська – עברית – العربية – ไทย – 日本語 – 正體中文 – 简体中文 – 한국어


External languages (all articles in these languages should be moved to the external wiki): Deutsch – Français – Română – Suomi – Svenska – Tiếng Việt – Türkçe – فارسی

Введение

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

Реализация eCryptfs отличается от реализации dm-crypt, которая шифрует блочное устройство полностью, а eCryptfs шифрует вайловую систему - тоесть каждый файл поотдельности. О сравнении двух методов шифрования можно прочитать на [1].

Если коротко, то eCryptfs не нуждается в резервировании места на диске(создание специального раздела). eCryptfs может быть смонтирован в любую директорию и шифровать её содержимое(например домашняя директория! пользователя или любая директория в сети). Все метаданные для расшифровки хранятся в заголовках файлов, поэтому зашифрованые файлы можно перемещать, копировать, делать резервные копии. Есть и другие плюсы данного метода, как и минусы. Самый большой минус - eCryptfs не может шифровать весь раздел/жёсткий диск. По этому eCryptfs не может зашифровать раздел swap(но вы можете комбинировать eCryptfs и dm-crypt).


Основы

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

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

# modprobe ecryptfs

Пакет ecryptfs-utils нужен для управления ключами для доступа к зашифрованым данным. Некоторые скрипы из этого пакета помогут автоматизировать весь процесс (ecryptfs-setup-private) или помут в комбинировании eCryptfs и dm-crypt для шифрования раздела swap. Мы не будем использовать эти скрипты, а сделаем всё в ручном режиме для лучшего понимания принципа работы данного метода.

Прежде чем мы начнём, я советую вам прочитать документацию по eCryptfs(man).


Установка

Для начала создайте директории, которые вы хотите зашифровать. В этом примере мы назовём директорию - Private.

$ su -
# mkdir -m 700 /home/username/.Private
# mkdir -m 500 /home/username/Private
# chown username:username /home/username/{.Private,Private}

В сумме получается:

  • Зашифрованые данные будут храниться в ~/.Private
  • Когда эта директория смонтированна, данные будут доступны в ~/Private
    • Когда директория не смонтированна, данные в неё не могут быть записаны
    • Когда директория смонтированна, права доступа к ней такие-же как и у ~/.Private


eCryptfs может быть смонтированны поверх ~/Private.

# mount -t ecryptfs /home/username/.Private /home/username/Private

Вам нужно будет ввести пароль и выбрать некоторые опции с которыми директория будет монтироватся в будущем. Так-же вы можете задать несколько различных ключей для шифрования различных данных(об этом ниже). Для краткости мы опишем процесс с одним ключём. Пример:

Key type: passphrase
Passphrase: ThisIsAVeryWeakPassphrase
Cypher: aes
Key byte: 16
Plaintext passtrough: no
Filename encryption: no
Add signature to cache: yes 

В сумме получается:

  • Ваш ключ это ваша так называемая mount passphrase хранится в виде хэша+соль.
    • По теминологии eCryptfs этот ключ называется "file encryption key, encryption key", или fekek.
  • eCryptfs поддерживает несколько методов шифрования AES, blowfish, twofish...
  • Plaintext passtrough разрешает сохранять и работать с не зашифрованными данными внутри ~/.Private.
  • Шифрование файловой ситемы доступно с версии ядра 2.6.29.
    • По теминологии eCryptfs этот ключ, который служит для шифрования имён файлов называется "filename encryption key" или fnek
  • Сигнатура ключа(ей) хранится в Template:Filename.


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

# mv /root/.ecryptfs /home/username
# chown username:username /home/username/.ecryptfs


Установка на этом законченна и директория смонтирована. Вы можете размещать любые файлы в ~/Private и они будут прозрачно зашифрованы. Теперь отмонтируйте директорию и если вы попробуете прочитать содетжимое файлов, вы увидете, что они зашифрованы. Как получить к ним доступ? Смотрите следующий шаг.


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

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

Каждый раз проделывать эти операции может быть утомительно. Вариант номер один: передать все опции команде монтирования кроме ключа.

$ sudo mount -t ecryptfs /home/username/.Private /home/username/Private -o ecryptfs_cipher=aes,ecryptfs_key_bytes=16,key=passphrase

Вариант номер два(рекомендован): добавить строку в Template:Filename:

# eCryptfs mount points
/home/username/.Private /home/username/Private ecryptfs rw,user,noauto,ecryptfs_sig=XY,ecryptfs_cipher=aes,ecryptfs_key_bytes=16,ecrypfs_unlink_sigs 0 0


В сумме получается:

  • You will notice that we defined the user option, it enables you to mount the directory as a user
  • Notice the ecryptfs_sig option, replace XY with your own key signature (as seen in the mtab line earlier and in Template:Filename)
  • If you enabled file name encryption then pass an additional mount option: ecryptfs_fnek_sig=XY, where XY is the same signature you provide with the ecryptfs_sig option.
  • Last option ecrypfs_unlink_sigs ensures that your keyring is cleared every time the directory is un-mounted


Since your key was deleted from the kernel keyring when you un-mounted, in order to mount you need to insert it into the keyring again. You can use the ecryptfs-add-passphrase utility or the ecryptfs-manager to do it:

When the key is inserted you can mount the directory:

$ ecryptfs-add-passphrase
  Passphrase: ThisIsAVeryWeakPassphrase

$ mount -i /home/username/Private

You will notice that we used the Template:Codeline option this time. It disables invoking the mount helper. Speaking of which, using Template:Codeline by default mounts with: nosuid, noexec and nodev. If you want to have at least executable files in your private directory you can add the exec option to the fstab line.

This would be a good place to mention the keyctl utility from the (earlier installed) keyutils package. It can be used for any advanced key management tasks. Following examples show how to list your keyring contents and how to clear them:

$ keyctl list @u
$ keyctl clear @u

Usage

Besides using your private directory as storage for sensitive files, and private data, you can also use it to protect application data. Take Firefox for an example, not only does it have an internal password manager but the browsing history and cache can also be sensitive. Protecting it is easy:

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

Removal

If you want to move a file out of the private directory just move it to it's new destination while ~/Private is mounted. Also note that there are no special steps involved if you want to remove your private directory. Make sure it is un-mounted and delete ~/.Private, along with all the files.

Backup

Setup explained here separates the directory with encrypted data from the mount point, so the encrypted data is available for backup at any time. With an overlay mount (i.e. ~/Secret mounted over ~/Secret) the lower, encrypted, data is harder to get to. Today when cronjobs and other automation software do automatic backups the risk of leaking your sensitive data is higher.

We explained earlier that all cryptographic metadata is stored in the headers of files. You can easily do backups, or incremental backups, of your ~/.Private directory, treating it like any other directory.

Advanced

This wiki article covers only the basic setup of a private encrypted directory. There is however another article about eCryptfs on Arch Linux, which covers encryption of your entire $HOME and encrypting swap space without breaking hibernation (suspend to disk).

That article includes many more steps (i.e. using PAM modules and automatic mounting) and the author was opposed to replicating it here, because there is just no single "right" way to do it. The author proposes some solutions and discusses the security implications, but they are his solutions and as such might not be the best nor are they endorsed by the eCryptfs project in any way.

Article: eCryptfs and $HOME by Adrian C. (anrxc).

PAM Mount

The above "eCryptfs and $HOME" article uses a shell init file to mount the home directory. The same can be done using pam_mount with the added benefit that home is un-mounted when all sessions are logged out. As eCryptfs needs the Template:Codeline switch, the lclmount setting will need to be changed. I use the following in Template:Filename:

<lclmount>mount -i %(VOLUME) "%(before=\"-o\" OPTIONS)"</lclmount>

Remember to also set the volume definition (preferably to Template:Filename and uncomment luserconf).

<pam_mount>
<volume noroot="1" fstype="ecryptfs" path="/home/user/.Private" mountpoint="/home/user"/>
</pam_mount>

noroot is needed (at least in my configuration) because the encryption key will be added to the user's keyring.


To avoid wasting time needlessly unwrapping the passphrase you can create a script that will check pmvarrun to see the number of open sessions:

#!/bin/sh
#
#    /usr/local/bin/doecryptfs

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

With the following line added before the eCryptfs unwrap module in your PAM stack:

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

The article suggests adding these to Template:Filename, but the changes will need to be added to all other places you login, such as Template:Filename.