1

Я пытаюсь использовать общую папку Dropbox, чтобы несколько человек могли легко редактировать HTML-файлы, и (ре) монтирую папку Dropbox где-нибудь в /var/www/ с параметром --bind . У меня установлен контекст SELinux для папки Dropbox, так что элементы внутри получают тип httpd_sys_content_t , который может прочитать httpd (на RHEL6). Это все работает, и файлы доступны на веб-сайте. Редактирование файла в папке Dropbox на веб-сервере также работает (контекст SELinux сохраняется).

Однако, когда файл обновляется через Dropbox (скажем, кто-то другой редактирует файл), результирующий файл на принимающей стороне (после того, как Dropbox обновил его) всегда получает контекст user_home_t , и поэтому Apache не может прочитать файл и итак, ошибка 403 Forbidden (пока я не уйду и не восстановлю контекст вручную).

Я попытался установить контекст для ~/.dropbox/ httpd_sys_content_t , который также работает: кеш (?) файлы в ~/.dropbox/l/ получают этот контекст, но затем обновленный файл в ~/Dropbox/ прежнему получает user_home_t . Это указывает на то, что Dropbox обновляет файл где-то еще (предположительно, через его дельта-метод), а затем делает эквивалент mv чтобы переместить его в папку Dropbox (поскольку в SELinux mv сохраняет контекст источника и cp сбрасывает его в соответствии с местом назначения) ,

Заметки:

  1. Я не хочу отключать SELinux (но это решает проблему)
  2. Что касается использования httpd_sys_content_t: я мог бы в конечном итоге создать специальную политику для работы с этими файлами, которая может быть более разумной, чем просто использование httpd_sys_content_t но об этом я буду беспокоиться позже
  3. Я мог бы запустить небольшой скрипт, который делал restorecon -R в соответствующей подпапке Dropbox каждые 5 или 10 секунд, но я бы предпочел поймать это раньше

Итак: где Dropbox создает новый обновленный файл, прежде чем переместить его обратно в папку Dropbox? Любые другие мысли о чем-то еще, чтобы попробовать?

Спасибо!

Дэвид

1 ответ1

2

Временный файл создается в ~/Dropbox/.dropbox.cache/ , а затем перемещается в его реальное местоположение, чтобы обеспечить атомарные обновления.

Обходной путь № 3 должен работать - вы можете использовать incron , он выполнит команду, как только файл будет изменен.

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