4

Я экспериментирую с использованием eCryptfs поверх dropbox, и у меня возникают некоторые проблемы.

Моя система GNU/Linux, а точнее openSUSE 12.2.

Моя настройка такова: я настроил два экземпляра VirtualBox, работающих под управлением openSUSE 12.2, давайте назовем их VM1 и VM2. Dropbox, как обычно, синхронизирует все в ~/Dropbox. Для создания моей настройки eCryptfs я делаю следующее на обеих виртуальных машинах:

mkdir -m 500 ~/ecryptfs_upper
mkdir -m 700 ~/Dropbox/ecryptfs_lower
sudo mount -t ecryptfs Dropbox/ecryptfs_lower/ ecryptfs_upper/

Я настраиваю eCryptfs с:

key type: passphrase
cipher: aes
key bytes: 16
plaintext passthrough: no
filename encryption: yes

Если я сейчас приступлю к созданию файла в ~/ecryptfs_upper на VM1, он также будет корректно отображаться на VM2. Однако, когда я затем изменяю этот файл на одной виртуальной машине, он иногда (часто, но не всегда по какой-то причине) не будет обновляться на другой виртуальной машине.

Если я проверяю базовые файлы в ~/Dropbox/ecryptfs_lower на двух виртуальных машинах, они идентичны (sha256sum выдает одинаковый хэш), поэтому dropbox правильно сумел их синхронизировать. Но соответствующие файлы в ~/ecryptfs_upper все еще разные! Я должен размонтировать, а затем снова смонтировать eCryptfs, чтобы изменения отображались корректно.

Кажется, проблема в том, что когда dropbox обновляет файл в нижнем каталоге eCryptfs, eCryptfs не замечает это изменение. Предположительно eCryptfs предполагает, что все изменения пройдут через монтирование. Для большинства случаев использования это, очевидно, справедливое предположение, но при использовании eCryptfs для шифрования синхронизированного облачного хранилища, такого как dropbox, это, очевидно, большая проблема.

Я видел нескольких людей, выступающих за использование eCryptfs с dropbox, но я не видел, чтобы эта проблема упоминалась. Кто-нибудь знает о исправлении (например, способ отключить кэш, который eCryptfs использует), или о какой-либо альтернативе eCryptfs, которая не страдает от этой проблемы?

3 ответа3

3

Посмотрите на encfs как на альтернативу eCryptfs. Это не страдает от проблемы, которую вы описываете.

Руководство по настройке EncFS/Dropbox

3

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

0

Это не решение, а его решение. Протестировано на Linux Mint 17 и работает отлично, но также должно работать на других дистрибутивах Linux.

#!/bin/bash

export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

xhome=${HOME}

# HOWTO
#
# Remove previous installation of Dropbox - all directories (~/.dropbox, ~/.dropbox-dist, ~/Dropbox) and in command line type:
#
# mkdir -p ${HOME}/.mount/dropbox
# dd if=/dev/zero of=${HOME}/.mount/dropbox.img bs=4K count=2M # for 8GB
# mkfs.xfs ${HOME}/.mount/dropbox.img # for XFS, but you can use your prefered FS, eg. EXT4
# mkdir ${HOME}/bin
#
# Put this script to ${HOME}/bin
#
# chmod 0755 ${HOME}/bin/dropbox-mount.sh
#
# Add to /etc/sudoers line:
#
# YourUserName  ALL=NOPASSWD: /bin/mount
#
# Run this script: ${HOME}/bin/dropbox-mount.sh
#
# chown ( id -u ):( id -g ) ${HOME}/.mount/dropbox
#
# Next start Dropbox App and select ${HOME}/.mount/dropbox/ as a base directory,
# Dropbox automatically will create ${HOME}/.mount/dropbox/Dropbox.
#
# IMPORTANT
# Turn off Dropbox autostart in Dropbox preferences.
# Add this script to system autostart (Setting->Startup Applications)

xdropbox=".mount/dropbox"
xdropbox_dir="${xhome}/${xdropbox}"
xdropbox_img="${xhome}/${xdropbox}.img"

if [ `mount | grep -c "${xhome}/${xdropbox}"` -eq 0 ]; then
    sudo mount -o loop ${xdropbox_img} ${xdropbox_dir}
fi

sleep 10 && dropbox start &>/dev/null

exit 0

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .