From 6678300a2be7469e82acd7ef14b0790b41298a67 Mon Sep 17 00:00:00 2001 From: arcan1s Date: Fri, 12 Dec 2014 03:52:41 +0300 Subject: [PATCH] add paper, fix imaging --- _layouts/paper.html | 2 +- .../2014-12-12-encryption-home-directory.html | 173 ++++++++++++++++++ blog/index.html | 2 +- resources/papers/single-door.jpg | Bin 0 -> 5389 bytes .../2014-12-12-encryption-home-directory.html | 172 +++++++++++++++++ ru/blog/index.html | 2 +- 6 files changed, 348 insertions(+), 3 deletions(-) create mode 100644 _posts/2014-12-12-encryption-home-directory.html create mode 100644 resources/papers/single-door.jpg create mode 100644 ru/_posts/2014-12-12-encryption-home-directory.html diff --git a/_layouts/paper.html b/_layouts/paper.html index 326128f..1415dac 100644 --- a/_layouts/paper.html +++ b/_layouts/paper.html @@ -49,7 +49,7 @@ layout: default

{{ page.title }}

-{{ page.description }} +

{{ page.description }}


{{ content }} diff --git a/_posts/2014-12-12-encryption-home-directory.html b/_posts/2014-12-12-encryption-home-directory.html new file mode 100644 index 0000000..57526df --- /dev/null +++ b/_posts/2014-12-12-encryption-home-directory.html @@ -0,0 +1,173 @@ +--- +category: en +type: paper +hastr: true +layout: paper +tags: linux, systemd, ecryptfs +title: How to encrypt home directory. For dummies +short: ecnryption-home-directory +description:
single-door
This paper is about encryption home directory using ecryptfs and automount settins using systemd and key on flash card. +--- +

Step 0: Preparation

+
    +
  1. Logout as user.
  2. +
  3. Login as root on tty. The following actions should be done as root.
  4. +
  5. Move your home directory and create empty directory (s/$USER/user name/): + +{% highlight bash %} +mv /home/{$USER,$USER-org} +mkdir /home/$USER +chmod 700 /home/$USER +chown $USER:users /home/$USER +{% endhighlight %} + +
  6. +
+ +

Step 1: Encryption

+

The widespread solution in the Internet is to use automatic utilities to do it. However in our case they are not suitable, since we need to import key / password signature, which is not possible in this case.

+ +

The encryption can be done by the following command (lol):

+ +{% highlight bash %} +mount -t ecryptfs /home/$USER /home/$USER +{% endhighlight %} + +

While process it asks some question (I suggest to do first mounting in the interactive mode). The answers may be like following (see the comments), +please note that if you change something, it will be changed in some lines below too:

+ +{% highlight bash %} +# key or certificate. The second one is more reliable while you don't lose it %) +Select key type to use for newly created files: + 1) passphrase + 2) openssl +Selection: 1 +# password +Passphrase: +# cipher, select default +Select cipher: + 1) aes: blocksize = 16; min keysize = 16; max keysize = 32 + 2) blowfish: blocksize = 8; min keysize = 16; max keysize = 56 + 3) des3_ede: blocksize = 8; min keysize = 24; max keysize = 24 + 4) twofish: blocksize = 16; min keysize = 16; max keysize = 32 + 5) cast6: blocksize = 16; min keysize = 16; max keysize = 32 + 6) cast5: blocksize = 8; min keysize = 5; max keysize = 16 +Selection [aes]: 1 +# key size, select default +Select key bytes: + 1) 16 + 2) 32 + 3) 24 +Selection [16]: 1 +# enable reading/writing to the non-encrypted files +Enable plaintext passthrough (y/n) [n]: n +# enable filename encryption +Enable filename encryption (y/n) [n]: y +Filename Encryption Key (FNEK) Signature [XXXXX]: +# toolongdontread +Attempting to mount with the following options: + ecryptfs_unlink_sigs + ecryptfs_fnek_sig=XXXXX + ecryptfs_key_bytes=16 + ecryptfs_cipher=aes + ecryptfs_sig=XXXXX +WARNING: Based on the contents of [/root/.ecryptfs/sig-cache.txt], +it looks like you have never mounted with this key +before. This could mean that you have typed your +passphrase wrong. + +# accept, quit +Would you like to proceed with the mount (yes/no)? : yes +Would you like to append sig [XXXXX] to +[/root/.ecryptfs/sig-cache.txt] +in order to avoid this warning in the future (yes/no)? : yes +Successfully appended new sig to user sig cache file +Mounted eCryptfs +{% endhighlight %} + +

Then copy files from home directory to encrypted one:

+ +{% highlight bash %} +cp -a /home/$USER-org/. /home/$USER +{% endhighlight %} + +

Step 2: systemd automounting

+

Create file on flash card (I've used microSD) with the following text (you should insert your password):

+ +{% highlight bash %} +passphrase_passwd=someverystronguniqpassword +{% endhighlight %} + +

Add card automount (mount point is /mnt/key) to fstab with option ro, for example:

+ +{% highlight bash %} +UUID=dc3ecb41-bc40-400a-b6bf-65c5beeb01d7 /mnt/key ext2 ro,defaults 0 0 +{% endhighlight %} + +

Let's configure home directory mounting. The mount options can be found in the following output:

+ +{% highlight bash %} +mount | grep ecryptfs +{% endhighlight %} + +

I should note that there are not all options there, you need add key, no_sig_cache, ecryptfs_passthrough too. Thus systemd mount-unit should be like the following (if you are systemd-hater you can write the own daemon, because it doesn't work over fstab without modification (see below)).

+ +{% highlight bash %} +# cat /etc/systemd/system/home-$USER.mount +[Unit] +Before=local-fs.target +After=mnt-key.mount + +[Mount] +What=/home/$USER +Where=/home/$USER +Type=ecryptfs +Options=rw,nosuid,nodev,relatime,key=passphrase:passphrase_passwd_file=/mnt/key/keyfile,no_sig_cache,ecryptfs_fnek_sig=XXXXX,ecryptfs_sig=XXXXX,ecryptfs_cipher=aes,ecryptfs_key_bytes=16,ecryptfs_passthrough=n,ecryptfs_unlink_sigs + +[Install] +WantedBy=local-fs.target +{% endhighlight %} + +

XXXXX should be replaced to signature from options with which directory are currently mounting. Also you need to insert user name and edit path to file with password (and unit name) if it is needed. Autoload:

+ +{% highlight bash %} +systemctl enable home-$USER.mount +{% endhighlight %} + +

Here is a service to unmount flash card when it will be unneeded:

+ +{% highlight bash %} +# cat /etc/systemd/system/umount-key.service +[Unit] +Description=Unmount key card +Before=local-fs.target +After=home-arcanis.mount + +[Service] +Type=oneshot +ExecStart=/usr/bin/umount /mnt/key + +[Install] +WantedBy=local-fs.target +{% endhighlight %} + +

Enable:

+ +{% highlight bash %} +systemctl enable umount-key.service +{% endhighlight %} + +

Reboot. Remove backups if all is ok. If not then you did a mistake, resurrect system from emergency mode.

+ +

Why not fstab?

+

In my case I could not to make flash mounting before home decryption. Thus I saw emergency mode on load in which I should just continue loading. There are two solutions in the Internet:

+ + + +

In my opinion both of them are workarounds too much.

+ +

Why not pam?

+

Other solution is to mount using pam entry. In my case I have authentication without password on fingerprint so it doesn't work for me.

\ No newline at end of file diff --git a/blog/index.html b/blog/index.html index 0345898..d9f6bd9 100644 --- a/blog/index.html +++ b/blog/index.html @@ -23,6 +23,6 @@ hastr: true {{ post.title }}

{{ post.date | date_to_string }}

-{{ post.description }} +

{{ post.description }}

Tags: {{ post.tags }}

{% endfor %} diff --git a/resources/papers/single-door.jpg b/resources/papers/single-door.jpg new file mode 100644 index 0000000000000000000000000000000000000000..850e95386234d2a2b79fbd02d53f1ae7ee75bc8a GIT binary patch literal 5389 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 QdUwDsingle-doorСтатья посвящена шифрованию домашнего каталога с использованием ecryptfs и настройке автомонтирования посредством systemd с использованием ключа на флешке. +--- +

Шаг 0: Подготовка

+
    +
  1. Разлогинились пользователем. То есть совсем-совсем.
  2. +
  3. Зашли под root в tty. Дальнейшие действия описаны от него.
  4. +
  5. Передвинули наш хомяк и создали пустую директорию (s/$USER/имя пользователя/): + +{% highlight bash %} +mv /home/{$USER,$USER-org} +mkdir /home/$USER +chmod 700 /home/$USER +chown $USER:users /home/$USER +{% endhighlight %} + +
  6. +
+ +

Шаг 1: Шифрование

+

Самое распространенное решение в интернетах - воспользоваться автоматическими тулзами. Однако в нашем случае они не подходят, так как нам необходимо импортировать сигнатуру ключа / пароля, что при данном решении невозможно (или у автора руки кривые).

+ +

Делается шифрование следующим образом (lol):

+ +{% highlight bash %} +mount -t ecryptfs /home/$USER /home/$USER +{% endhighlight %} + +

В процессе он у нас задаст несколько вопросов (я предлагаю первое монтирование делать в интерактивном режиме). Ответы можно взять примерно такие (в комментариях показано, что эти опции делают), обратите внимание, что если вы что то измените, то изменится и некоторые строчки далее:

+ +{% highlight bash %} +# ключ или сертификат. Второе надежнее, но до тех пор пока не потеряете %) +Select key type to use for newly created files: + 1) passphrase + 2) openssl +Selection: 1 +# пароль +Passphrase: +# шифрование, ставим берем дефолт +Select cipher: + 1) aes: blocksize = 16; min keysize = 16; max keysize = 32 + 2) blowfish: blocksize = 8; min keysize = 16; max keysize = 56 + 3) des3_ede: blocksize = 8; min keysize = 24; max keysize = 24 + 4) twofish: blocksize = 16; min keysize = 16; max keysize = 32 + 5) cast6: blocksize = 16; min keysize = 16; max keysize = 32 + 6) cast5: blocksize = 8; min keysize = 5; max keysize = 16 +Selection [aes]: 1 +# размер ключа, берем дефолт +Select key bytes: + 1) 16 + 2) 32 + 3) 24 +Selection [16]: 1 +# разрешать читать/писать в нешифрованные файлы в точке монтирования +Enable plaintext passthrough (y/n) [n]: n +# включить шифрование имен файлов +Enable filename encryption (y/n) [n]: y +Filename Encryption Key (FNEK) Signature [360d0573e701851e]: +# многабукафниасилил +Attempting to mount with the following options: + ecryptfs_unlink_sigs + ecryptfs_fnek_sig=360d0573e701851e + ecryptfs_key_bytes=16 + ecryptfs_cipher=aes + ecryptfs_sig=360d0573e701851e +WARNING: Based on the contents of [/root/.ecryptfs/sig-cache.txt], +it looks like you have never mounted with this key +before. This could mean that you have typed your +passphrase wrong. + +# подтверждаем, выходим +Would you like to proceed with the mount (yes/no)? : yes +Would you like to append sig [360d0573e701851e] to +[/root/.ecryptfs/sig-cache.txt] +in order to avoid this warning in the future (yes/no)? : yes +Successfully appended new sig to user sig cache file +Mounted eCryptfs +{% endhighlight %} + +

Далее просто копируем файлы из родного хомяка:

+ +{% highlight bash %} +cp -a /home/$USER-org/. /home/$USER +{% endhighlight %} + +

Шаг 2: Автомонтирование с systemd

+

Создадим файл на флешке (я использовал microSD) со следующим содержанием (пароль только поставьте свой):

+ +{% highlight bash %} +passphrase_passwd=someverystronguniqpassword +{% endhighlight %} + +

Добавим автомонтирование флешки (направление /mnt/key) в fstab с опцией ro, например так:

+ +{% highlight bash %} +UUID=dc3ecb41-bc40-400a-b6bf-65c5beeb01d7 /mnt/key ext2 ro,defaults 0 0 +{% endhighlight %} + +

Теперь настроим монтирование хомяка. Опции монтирования можно подглядеть как то так:

+ +{% highlight bash %} +mount | grep ecryptfs +{% endhighlight %} + +

Однако замечу, что там указаны не все опции, необходимо добавить также key, no_sig_cache, ecryptfs_passthrough. Таким образом, для systemd mount-юнит выглядит примерно так (любители shell-простыней смогут написать свой демон, потому что через fstab не сработает просто так (см. ниже)).

+ +{% highlight bash %} +# cat /etc/systemd/system/home-$USER.mount +[Unit] +Before=local-fs.target +After=mnt-key.mount + +[Mount] +What=/home/$USER +Where=/home/$USER +Type=ecryptfs +Options=rw,nosuid,nodev,relatime,key=passphrase:passphrase_passwd_file=/mnt/key/keyfile,no_sig_cache,ecryptfs_fnek_sig=XXXXX,ecryptfs_sig=XXXXX,ecryptfs_cipher=aes,ecryptfs_key_bytes=16,ecryptfs_passthrough=n,ecryptfs_unlink_sigs + +[Install] +WantedBy=local-fs.target +{% endhighlight %} + +

XXXXX нужно заменить на сигнатуру из опций, с которыми сейчас смонтирована директория. Также нужно вставить имя пользователя и отредактировать путь к файлу с паролем (и имя mount-юнита), если это необходимо. Автозагрука:

+ +{% highlight bash %} +systemctl enable home-$USER.mount +{% endhighlight %} + +

Сервис для отмонтирования флешки, когда она не нужна будет:

+ +{% highlight bash %} +# cat /etc/systemd/system/umount-key.service +[Unit] +Description=Unmount key card +Before=local-fs.target +After=home-arcanis.mount + +[Service] +Type=oneshot +ExecStart=/usr/bin/umount /mnt/key + +[Install] +WantedBy=local-fs.target +{% endhighlight %} + +

Включаем:

+ +{% highlight bash %} +systemctl enable umount-key.service +{% endhighlight %} + +

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

+ +

Почему не fstab?

+

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

+ +
    +
  • Создать запись с опцией noauto, потом монтировать через специальную запись в rc.local.
  • +
  • Создать запись с опцией nofail, потом перемонтировать все разделы через rc.local.
  • +
+ +

Оба варианта меня не устроили в виду их костыльности.

+ +

Почему не pam?

+

Другое распространенное предложение - монтировать через запись в настройках pam. Мне этот вариант не подходит, так как у меня авторизация беспарольная по отпечатку пальца.

\ No newline at end of file diff --git a/ru/blog/index.html b/ru/blog/index.html index d66d2d3..301ddb0 100644 --- a/ru/blog/index.html +++ b/ru/blog/index.html @@ -24,6 +24,6 @@ hastr: true {{ post.title }}

{% include shortdate_to_ru.html %}

-{{ post.description }} +

{{ post.description }}

Тэги: {{ post.tags }}

{% endfor %}