Я пытаюсь использовать общую папку 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
сбрасывает его в соответствии с местом назначения) ,
Заметки:
- Я не хочу отключать SELinux (но это решает проблему)
- Что касается использования
httpd_sys_content_t
: я мог бы в конечном итоге создать специальную политику для работы с этими файлами, которая может быть более разумной, чем просто использованиеhttpd_sys_content_t
но об этом я буду беспокоиться позже - Я мог бы запустить небольшой скрипт, который делал
restorecon -R
в соответствующей подпапке Dropbox каждые 5 или 10 секунд, но я бы предпочел поймать это раньше
Итак: где Dropbox создает новый обновленный файл, прежде чем переместить его обратно в папку Dropbox? Любые другие мысли о чем-то еще, чтобы попробовать?
Спасибо!
Дэвид