WebDav+eСryptFS

Материал из MediaWiki
Перейти к навигации Перейти к поиску

Зачем?

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


А в чем проблемы?

eCryptFS принадлежит к классу pseudo-filesystems, т.е. к файловым системам, которые работают прослойкой поверх обычных ФС. Но davfs2 относится к сетевым стековым файловым системам, которые несовместимы с eCryptFS.

Поэтому нужно использовать фс-враппер - bindfs. Она скроет все несовместимости, хоть и вызовет некоторые неудобства.


Достоинства

  • Прозрачное для пользователя шифрование информации, хранимой на сервисах третьих лиц.
  • Особенностью eCryptFS является то, что к примонтированной ФС доступ имеет только один локальный пользователь - тот, кто выполнил монтирование. Другие локальные пользователи компьютера не могут получить прямой доступ к расшифрованным данным на примонтированной пользователем eCryptFS.
  • Возможность доступа к данным с нескольких рабочих мест.

Недостатки

  • Нетривиальность решения.
  • Плохая переносимость между различными платформами: eCryptFS доступна только под Linux и FreeBSD.
  • Зашифрованные имена файлов и папок имеют префиксы вида ECRYPTFS_FNEK_ENCRYPTED и значительно бОльшую длину (от ~70 символов). Это может привлекать внимание третьих лиц или вызывать проблемы несовместимости соответственно.
  • Зашифрованные файлы не являются однородными двоичными файлами. Формат каждого зашифрованного файла легко идентифицируется по заголовку и метаданным как eCryptFS-криптоконтейнер.


Софт

Используем дистрибутив Archlinux. Нужно доустановить:

  1. davfs2 - утилиты для монтирования удаленных хранилищ через WebDAV
  2. ecryptfs-utils - утилиты для работы с ecryptfs.
  3. bindfs - аналог mount -o bind, но работает через fuse, то есть полноценный костыль. bindfs нужен, потому что есть проблемы со скрещиванием 1 и 2.
# yaourt -S davfs2 bindfs ecryptfs-utils


Настройка davfs2

  1. Создаем точку монтирования для WebDAV-ресурса
    # mkdir /mnt/yad
  2. Редактируем /etc/davfs/secrets. Добавляем строчку с точкой монтирования, именем и паролем для webdav-ресурса:
    /mnt/yad  my_username  my_password
  3. Редактируем /etc/fstab. Добавляем точку монтирования:
    https://webdav.yandex.ru/  /mnt/yad  davfs user,uid=user1,gid=user1,file_mode=600,dir_mode=700,rw,noexec,nosuid 0 0
    где user1 поменять на uid/gid локального юзера, который будет пользоваться этим webdav-ресурсом.
  4. Монтируем:
    mount /mnt/yad
  5. На webdav-ресурсе создаем поддиректорию data, чтобы не засорять корень точки монтирования зашифрованными файлами:
    mkdir /mnt/yad/data


Подготовка eCryptFS

По настройке eCryptFS есть очень много документации (например в Archwiki), поэтому просто воспользуемся дефолтовым скриптом для настройки локальной шифрованной директории eCryptFS. От простого пользователя (т.е. от вышеупомянутого user1) запускаем

$ ecryptfs-setup-private

и отвечаем на пару элементарных вопросов касательно паролей.

В результате работы скрипта, в домашней директории пользователя user1 появятся три новые поддиректории:

  • ~/.Private - пока пустая папка. Сюда будут попадать зашифрованные файлы с зашифрованными именами.
  • ~/Private - пользовательская точка монтирования eCryptFS. Изначально, она не примонтирована и содержит пару ознакомительных файлов.
  • ~/.ecryptfs - файлы, необходимые для монтирования, в том числе пароль. Имеет права 700.

Пока ничего не монтируем никуда.


bindfs

  1. В файле /etc/fuse.conf убеждаемся, что строка user_allow_other раскомменчена.
  2. Монтируем одну папку в другую:
    $ bindfs /mnt/yad/data -o noatime /home/user1/.Private

Теперь изменения, происходящие в /home/user1/.Private, на самом деле перенаправляются в /mnt/yad/data, а eCryptFS работает надежно и без ошибок.


Монтирование eCryptFS и проверка

$ ecryptfs-mount-private
$ ls /mnt/yad/data
И ничего нет
$ touch ~/Private/abcdef
$ ls /mnt/yad/data
ECRYPTFS_FNEK_ENCRYPTED.ABVCy.SDFHTHRDSTHSdgfhdthdRH5454ye4hHGFDGHrh6rhedrhdRTh46--

На последней строчке - имя зашифрованного файла на webdav-ресурсе, который является шифрованной копией файла abcdef.

Скрипт быстрого монтирования

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

# cd /home/user1
# umount Private
# cd Private
# touch mount
# chmod +x mount
# chown user1:user1 mount

В созданный файл ~/Private/mount записываем следующий скрипт:

#!/bin/bash

YAD_ROOT=/mnt/yad
PRIV_ROOT=$HOME/.Private
YAD_DATA=$YAD_ROOT/data

## модуль ecryptfs загружен?
lsmod | grep ecryptfs >/dev/null || sudo modprobe ecryptfs

## webdav-ресурс примонтирован?
mountpoint -q "$YAD_ROOT" || mount $YAD_ROOT

## bindfs сделан?
mountpoint -q "$PRIV_ROOT" || bindfs $YAD_DATA -o noatime $PRIV_ROOT

## и теперь монтируем ecryptfs
ecryptfs-mount-private

На несколько компьютеров

Чтобы использовать зашифрованный ресурс на другом компьютере, нужно повторить вышеописанные шаги. Но если при вызове ecryptfs-setup-private вы выбрали случайный пароль для шары, то нужно будет дополнительно скопировать файлы ~/.ecryptfs/wrapped-passphrase и ~/.ecryptfs/Private.sig с исходного компьютера на целевой.