Файлы, ошибочно считающиеся поврежденными в томе encfs

8

Я использую encfs @1.7.5и osxfuse @2.6.4устанавливаю через MacPorts 2.2.1 на MacBook Pro Retina Late 2013, который работает под управлением OS X Mavericks 10.9.2. При открытии определенных файлов (например, xlsx, pdf) в моем encfsтоме я получаю сообщение об ошибке «X поврежден и не может быть открыт». а также предложение переместить его в мусорное ведро. Тем не менее, когда я копирую этот файл в другом месте (то есть не на encfsтоме), он, кажется, работает просто отлично. Почему это?

РЕДАКТИРОВАТЬ: Я посмотрел в Интернете и нашел сообщение о отключении GateKeeper. Это добилось цели. По сути, вы заходите в «Настройки безопасности -> Безопасность и конфиденциальность -> Разрешить загрузку приложений из: в любом месте».

Я понимаю, что решение работает, но я хотел бы знать, почему оно работает. Заранее спасибо.

РЕДАКТИРОВАТЬ 2: Кроме того, если бы кто-то мог пометить мой пост encfs, это было бы очень признательно.

Николас Де Джей
источник

Ответы:

6

Я нашел ответ здесь (для BoxCryptor):

В особых случаях Mac OS X добавляет расширенный атрибут com.apple.quarantine к файлу, который, например, был загружен из Интернета. Это также может произойти с файлами в папке BoxCryptor. Если зашифрованный файл имеет этот расширенный атрибут, вы получите сообщение об ошибке «поврежден» при попытке открыть файл в виде открытого текста в Томе BoxCryptor.

Также попробуйте это, более безопасный обходной путь:

x) Открыть терминал (Приложения -> Утилиты)

y) Запустите следующую команду (подставьте путь):

$ xattr -r -d com.apple.quarantine / path / to / encfs / mount / point

apmouse
источник
2

@apmouse правильно: вы можете восстановить файл с помощью xattr. Но вы должны делать это неоднократно - каждый раз, когда вы сохраняете файл, к нему будет добавлен флаг карантина.

Как вы указали, есть менее безопасная, но более удобная альтернатива: отключите GateKeeper.

как отключить гейткипер

Я понимаю, что решение работает, но я хотел бы знать, почему оно работает. Заранее спасибо.

Первое, на что стоит обратить внимание: если вы зайдете в Keynote и выберите «Файл» → «Открыть», вы сможете без проблем открыть «поврежденный» файл. Это означает, что на самом деле вмешивается Finder , чтобы предотвратить открытие файла.

Сообщение об ошибке «_____ повреждено и не может быть открыто» на самом деле является ошибкой подписи (см. Здесь - около 3/4 пути вниз), означая, что GateKeeper не может проверить действительную подпись. Предполагается, что проверка подписи применяется к исполняемым файлам, и я до сих пор не выяснил, почему в этой ситуации происходит сбой.

Я попытался скомпилировать образец петлевой файловой системы osxfuse и поместить туда тот же «поврежденный» файл, и он открывается очень хорошо. Так что я думаю, что эта ошибка относится только к encfs, а не к osxfuse в целом.

Для чего бы то ни было, в проекте osxfuse есть открытый билет на эту проблему. Если у вас возникла эта проблема, опубликуйте свои данные в этом билете.

Надеюсь это поможет...

Марк Э. Хаас
источник
Я думал, что Gatekeeper влияет только на приложения, а не документы. Итак, как это влияет на файлы .xlsx?
user151019
Я предполагаю, что этот флаг применяется ко всем загруженным документам, как в ответе @ apmouse, но не "принудительно" применяется в не приложениях, но имеет сбойное поведение на зашифрованных томах. Мне нужно проверить это поведение на sshfsдругих файловых системах FUSE, чтобы быть уверенным.
Николас Де Джей
2

Я не знаю, почему у Apple, кажется, нет простого способа сказать, что этот том безопасен, но проблему довольно легко решить с помощью encfs. Ниже приведен скрипт, который я использую для монтирования томов encfs; это автоматически решает проблему атрибутов, а также помогает запоминать закрытые тома. Его можно расширить, прочитав encfs dir и точку монтированияиз командной строки, но я предпочитаю этого не делать, потому что опечатки могут создавать угрозы безопасности. Он должен быть относительно легко адаптирован к другим крепежным механизмам, таким как boxcryptor. Это работает для меня, но вы полагаетесь на свой собственный опыт в принятии решения, использовать ли его для себя. В частности, я не эксперт по безопасности, и я не обладаю достаточной квалификацией, чтобы судить, открывает ли он какие-либо дыры в безопасности (особенно во время работы и особенно на общих компьютерах).

#!/bin/bash
# script to mount encrypted volume

ENCFSDIR=<encfs dir>
MOUNTPOINT=<mount point>
SAFELOC=<somewhere outside mounted volume>

encfs $ENCFSDIR $MOUNTPOINT

cd $MOUNTPOINT
xattr -r -d com.apple.quarantine .
MY_PROMPT='SECRET: '
echo 'noscecrets to finish'
while :
do
  echo -n "$MY_PROMPT"
  read line
  if [ 'nosecrets' == "$line" ] ; then
    break
  fi
  eval "$line"
done

\# and clean up
cd $SAFELOC
umount $MOUNTPOINT

exit 0
user308273
источник
2

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

Я подумал, что OS X использует системных пользователей и системных демонов для всех видов заданий, возможно, ядро ​​рассчитывает выполнить какую-то работу с этими файлами как другой пользователь или как пользователь root, и пометить их как поврежденные при этом. не работает

Поэтому я пометил свой sshfsдвоичный файл как setuidи добавил -o allow_otherопцию монтирования в sshfsкомандную строку, и ... похоже, я могу надежно открывать и редактировать документы на подключенном томе. Я буду продолжать экспериментировать и следить, если он перестанет работать.

Я, конечно, обеспокоен лежащим в основе бинарным файлом setuid, но он кажется лучше, чем вариант запуска демона, который требует привилегий root на стороне файлового сервера для получения NFS или SMB. :)

Учитывая, что allow_otherэто опция монтирования FUSE, а не конкретная sshfs, я считаю, что этот обходной путь encfsтакже подойдет. Было бы здорово узнать, если кто-то попробовал это, и это сработало!

глиф
источник
1

Спасибо @Glyph, из того, что я могу сказать, похоже, что он работает после выполнения ваших шагов. Я следовал за этими шагами:

  1. Сначала мне нужно было добавить группу, к которой я принадлежу, к группе администраторов osxfuse, иначе allow_other завершится с ошибкой, если операция не поддерживается.

    sysctl -w osxfuse.tunables.admin_group=12
    
  2. Затем использовал -o allow_other для encfs

Я только попробовал это немного, но случай воспроизводимого сбоя, который я имел, теперь, кажется, работает.

Абэ
источник