Яндекс.Диск+WebDav+mhddfs+EncFS=Бесплатное зашифрованное облачное хранилище с неограниченным объёмом

A- | A+

1334606844_yandeks-disk

В этой статье я опишу, как я примонтировал к своему серверу облачное хранилище размером 100Гб на основе 10 Яндекс.Дисков. Причем все данные передаваемые в Яндекс.Диск надежно зашифрованы с помощью  EncFS. Если паранойя вас одолела, и вы не доверяете EncFS, то рекомендую дополнительно шифровать файлы с помощью GnuPG. См. статью “Шифруем файлы с помощью GnuPG (PGP)” или “Duplicity – Инкрементное резервное копирование системы с шифрованием GnuPG

Регистрируем необходимое кол-во аккаунтов на Яндексе https://disk.yandex.ru.

Сейчас на один аккаунт можно легко и бесплатно получить 10Гб на Яндекс.Диске. При регистрации предоставляется 3Гб После подключения к Яндекс.Диску через фирменную программу синхронизации с рабочего компьютера предоставляют еще 3Гб (причем с одной рабочей станции, можно беспрепятственный по очереди подключаться к нескольким аккаунтам и таким образом быстро “прокачать” несколько аккаунтов), затем нужно записать на Яндекс.Диск два любых файл (например можно просто записать две пустые папки). Затем нужно поделиться ссылкой в социальных сетях и вам дадут еще 2Гб и в итоге вы бесплатно получите Яндекс.Диск на 10Гб. На самом деле размещать ссылку в социальной сети совершенно не нужно, у меня вообще социальные сети facebook, вконтакте и т.д. заблокированы полностью, но если просто нажать на ссылку “поделиться в социально сети” вам сразу дадут 2Гб дополнительного места.

Устанавливаем клиент WebDav (davfs2).

sudo aptitude update
sudo aptitude install davfs2

Отредактируем файл /etc/davfs2/secrets, запишем в него наши учетные данные от Яндекс.Дисков, которые мы зарегистрировали ранее:

echo "/var/webdav/yandex.disk-1 Yandex-Login(e-mail) PASSWORD" > /etc/davfs2/secrets
echo "/var/webdav/yandex.disk-2 Yandex-Login(e-mail) PASSWORD" >> /etc/davfs2/secrets
и т.д.

При необходимости можно так же отредактировать конфигурационный файл davfs2:

sudo mc -e /etc/davfs2/davfs2.conf

WebDav разделы возможно сразу смонтировать вручную:

sudo mount -t davfs https://webdav.yandex.ru /var/webdav/yandex.disk-1
и т.д.

Но мы пойдем другим путем.

Запишем параметры монтирования Яндекс.Дисков в /etc/fstab:

echo "https://webdav.yandex.ru /var/webdav/yandex.disk-1 davfs gid=Yndex-Login(e-mail),uid=Yndex-Login(e-mail),noauto 0 0" >> /etc/fstab
echo "https://webdav.yandex.ru /var/webdav/yandex.disk-2 davfs gid=Yndex-Login(e-mail),uid=Yndex-Login(e-mail),noauto 0 0" >> /etc/fstab
и т.д.
  •  noauto – данный параметр говорит о том, что WebDaV разделы не будут монтироваться автоматически. Это обязательный параметр, так как в момент загрузки системы и обработки конфига /etc/fstab сетевые подключения еще не готовы.

Создаем каталоги для точек монтирования WebDav, в котрые мы будем монтировать Яндекс.Диски:

mkdir -p \
/var/webdav/yandex.disk-1 \
/var/webdav/yandex.disk-2
и т.д.

Смонтируем наши Яндекс.Диски в ранее подготовленные точки монтирования:

sudo mount /var/webdav/yandex.disk-1
sudo mount /var/webdav/yandex.disk-2
и т.д.

Для автоматического монтирования при загрузке системы можно добавить команды монтирования в файл /etc/rc.local:

sudo echo "mount /var/webdav/yandex.disk-1" >> /etc/rc.local
sudo echo "mount /var/webdav/yandex.disk-2" >> /etc/rc.local
и т.д.

Объединение разделов.

Объединить несколько Яндекс.Дисков, ранее примонтированных по протоколу WebDav возможно используя aufs2, mhddfs или mdadm.

Предпочтительно использовать драйвер mhddfs, подробная информация на сайте разработчика http://mhddfs.uvw.ru. В отличии от aufs2 на составные разделы не записываются служебные каталоги и файлы, при случайном удалении которых работа aufs2 нарушается, так же это указывает на сам факт объединения разделов с помощью  aufs2, такой компромат возможно будет лишним при монтировании Яндекс.Дисков…

Объединение разделов с помощью mhddfs.

Внимание! Максимальный размер файла, который возможно будет записать на объединенный раздел, ограничен размером максимального свободного места на составном диске.

Например:

  1. Мы объединили 10 разделов по 10Гб и получили один общий раздел в 100Гб, максимальный размер файла, который возможно будет записать на такой раздел составит 10Гб.
  2. Или,  мы объединили 10 разделов по 10Гб и получили один общий раздел в 100Гб, и заполнили 9 разделов информацией по 8Гб, а 9й раздел на 5Гб в этом случае мы можем записать еще 1 файл размером 5Гб на общий раздел, после чего максимальный размер файла, который можно будет записать на объединенный раздел составит 2Гб. Надеюсь все было понятно…

Устанавливаем драйвер mhddfs:

sudo aptitude install mhddfs

Создаем каталог, в котором соберем все Яндекс.Диск с помощью mhddfs (почему encrypted – станет ясно позже):

sudo mkdir -p /mnt/yandex.disk.encrypted

Запись монтирования mhddfs в /etc/fstab (Все должно быть написано в одну строку):

sudo echo "mhddfs#/var/webdav/yandex.disk-1,/var/webdav/yandex.disk-2 /mnt/yandex.disk.encrypted fuse mlimit=100%,logfile=/var/log/mhddfs.log 0 0" >> /etc/fstab
  • mlimit=100% – при каком проценте свободного места на разделе начинать запись файлов на следующий по списку раздел. Если указано 100% значит равномерно распределять файлы по всем разделам по списку начиная с первого.

Следующие два раздела описывающие работу с aufs2 и mdadm можно пропустить и сразу перейти к шифрованию объединенного раздела с помощью EncFS.

Пример объединения разделов с помощью aufs2.

Для объединения Яндекс.Дисков рекомендую использовать mhddfs, описание выше.

Внимание! Максимальный размер файла, который возможно будет записать на объединенный раздел, ограничен размером максимального свободного места на составном диске.

Например:

  1. Мы объединили 10 разделов по 10Гб и получили один общий раздел в 100Гб, максимальный размер файла, который возможно будет записать на такой раздел составит 10Гб.
  2. Или,  мы объединили 10 разделов по 10Гб и получили один общий раздел в 100Гб, и заполнили 9 разделов информацией по 8Гб, а 9й раздел на 5Гб в этом случае мы можем записать еще 1 файл размером 5Гб на общий раздел, после чего максимальный размер файла, который можно будет записать на объединенный раздел составит 2Гб. Надеюсь все было понятно…

Устанавливаем поддержку aufs2:

sudo aptitude install aufs-tools

Собираем разделы в один большой:

sudo mount -t aufs none /mnt/aufs -o br:/var/disk-1=rw:/var/disk-2=rw:/var/disk-3=rw:/var/disk-4=rw,create=mfs,sum

Пример объединения разделов с помощью mdadm (Программный RAID).

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

Создаем файлы по 10G забитые нулями:

sudo dd if=/dev/zero of=./disk.img bs=1M count=10000

Копируем файл на примонтированные разделы:

cp ./disk /mnt/yandex.disk-1/disk.img
cp ./disk /mnt/yandex.disk-2/disk.img
и т.д.

Монтируем файлы на устройства loop:

losetup /dev/loop0 /mnt/yandex.disk-1/disk.img
losetup /dev/loop1 /mnt/yandex.disk-2/disk.img
и т.д.

Cоздаем RAID-1:

sudo mdadm -C -v /dev/md0 -l1 -n2 /dev/loop0 /dev/loop1

Создаем файловую систему EXT4 на RAID массиве:

sudo mkfs.ext4 /dev/md0

Монтируем созданный RAID-1 массив:

sudo mkdir /mnt/md0
sudo mount /dev/md0 /mnt/md0

Шифруем объединенный раздел с помощью EncFS.

Устанавливаем поддержку EncFS:

sudo aptitude install encfs

Создадим раздел для расшифрованных данных:

sudo mkdir /mnt/yandex.disk.decrypted

Вспомним, что ранее мы создали каталог /mnt/yandex.disk.encrypted и примонтировали в него объединенный Яндекс.Диск.

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

– Все просто, мы будем использовать каталог /mnt/yandex.disk.decrypted как обычный раздел, и все записываемые файлы и каталоги (включая имена файлов и каталогов) будут автоматически шифроваться и уже в зашифрованном виде записываться у каталог /mnt/yandex.disk.encrypted из которого mhddfs будет распределять зашифрованные данные между составными разделами а davfs2 непосредственно пересылать информацию в Яндекс.Диск. В итоге в Яндекс никогда не будут передаваться файлы в расшифрованном виде.

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

Если вы не хотите вводить пароль закрытого ключа при монтировании зашифрованного раздела EncFS, то можно указать опцию –extpass=” cat /etc/encfs/passwd”, где /etc/encfs/passwd файл с паролем. Насколько это безопасно решайте сами, все зависит от поставленных задач. Например если на зашифрованный раздел мы будем складывать бекапы, то хранить пароль в файле вполне безопасно, так как если система будет скомпрометирована и у злоумышленника появится возможность украсть пароль то смысла в этом не будет, так как все данные и так есть в системе в не зашифрованном виде.

Монтирование зашифрованного раздела:

 ENCFS6_CONFIG=/etc/encfs/.encfs6.xml \
encfs /mnt/yandex.disk.encrypted \
/mnt/yandex.disk.decrypted \
--extpass=" cat /etc/encfs/passwd"
  •  Пробел перед выполнением команды позволяет не заносить запись в историю.

Для автоматического монтирования зашифрованного раздела при загрузке системы данную команду можно записать в файл /etc/rc.local.

Отмонтировать примонтированный EncFS раздел можно так:

sudo fusermount -u mkdir -p /mnt/yandex.disk.decrypted

А где же параметры шифрования, как задать пароль спросите вы?

– При запуске, выше указанной команды, если конфигурационный файл .encfs6.xml не найден (например вы еще только создаете зашифрованный раздел), вас попросят указать параметры шифрования. Появиться следующее сообщение:

Please choose from one of the following options:
 enter "x" for expert configuration mode,
 enter "p" for pre-configured paranoia mode,
 anything else, or an empty line will select standard mode.

Далее вам зададут несколько вопросов на сообразительность и предложат задать пароль.

Рекомендованные параметры (задаются в режиме эксперта “x”):

  1. Алгоритм шифрования AES-256 (Алгоритм симметричного шифрования с длиной ключа 256 бит);
  2. Размер блока файловой системы: 4096 байт;
  3. Блочный алгоритм шифрования: 1 (Block);
  4. Enable filename initialization vector chaining? – Yes;
  5. Enable per-file initialization vectors? – Yes;
  6. Enable filename to IV header chaining? – Yes;
  7. Enable block authentication code headers
    on every block in a file? – No (Для локальных разделов лучше включить);
  8. Добавлять случайные байты в каждый заголовок блока? – 8;
  9. Enable file-hole pass-through? – Yes.

Описание параметров можно найти на Википедии.

Для редактирования конфигурации EncFS используйте утилиту encfsctl.

Пример конфигурационного файла .encfs6.xml. Редактировать его вручную не рекомендуется.

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE boost_serialization>
<boost_serialization signature="serialization::archive" version="9">
<cfg class_id="0" tracking_level="0" version="20">
        <version>XXXXXXX</version>
        <creator>EncFS X.X.X</creator>
        <cipherAlg class_id="1" tracking_level="0" version="0">
                <name>ssl/aes</name>
                <major>3</major>
                <minor>0</minor>
        </cipherAlg>
        <nameAlg>
                <name>nameio/block</name>
                <major>3</major>
                <minor>0</minor>
        </nameAlg>
        <keySize>256</keySize>
        <blockSize>4096</blockSize>
        <uniqueIV>1</uniqueIV>
        <chainedNameIV>1</chainedNameIV>
        <externalIVChaining>1</externalIVChaining>
        <blockMACBytes>0</blockMACBytes>
        <blockMACRandBytes>8</blockMACRandBytes>
        <allowHoles>1</allowHoles>
        <encodedKeySize>52</encodedKeySize>
        <encodedKeyData>
YIGByig974r2lGYIBx8wof94lbVIUYGVX8igfiwfvwe7F&xfutcvweycgweycecewc==
        </encodedKeyData>
        <saltLen>15</saltLen>
        <saltData>
4g9hrneveUYGC4ofhwilef=
        </saltData>
        <kdfIterations>645643</kdfIterations>
        <desiredKDFDuration>100</desiredKDFDuration>
</cfg>
</boost_serialization>

2 thoughts on “Яндекс.Диск+WebDav+mhddfs+EncFS=Бесплатное зашифрованное облачное хранилище с неограниченным объёмом

  1. Применительно к этой статье: для aufs, чтобы монтировалось при загрузке, нужно прописать в fstab:none /mnt/yandex.disk.encrypted aufs _netdev,br:/var/disk-1=rw:/var/disk-2=rw:/var/disk-3=rw::/var/disk-4=rw,create=mfs,sum 0 0Обратите внимание на параметр _netdev (устройство в сети) — без него не монтируется, а только вручную под root

    1. Спасибо за дополнение, не написал сразу про автоматическое монтирование для aufs, так как сразу перешел на использование mhddfs, мне такой способ больше понравился.

      Яндекс.Диск хорошая штука, но к сожалению за пределами России скорость до него желает лучшего…

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>