Лучшая практика для связи с WebDAV, так как FollowSymLinks не позволяет показывать символические ссылки

Символьные ссылки - широко распространенная практика в linux, чтобы сделать ресурс (например, каталог) доступным в другом месте, не поддерживая несколько его копий. Это реализовано во многих приложениях, например, имеющих дерево ресурсов и дерево с пользовательскими каталогами: всякий раз, когда пользователь предназначен для работы с определенным ресурсом, символическая ссылка помещается в каталог, к которому он или она имеет доступ. При наличии достаточных разрешений он или она может работать с ресурсом (создавать в нем файлы), который может быть физически записан в другое место, например, на устройство с достаточным пространством. Это прекрасно работает, если пользователь обращается к своему домашнему каталогу с помощью Samba.

Однако есть веские причины для работы с WebDAV, проблемы с портами являются одной из них. Проблема при портировании такого приложения в WebDAV: mod_dav в Apache написан так, что символические ссылки не отображаются, независимо от того, установлена ​​ли FollowSymLinks. Такое поведение предназначено сообществом, поэтому сообщение об ошибке никогда не рассматривалось.

Однако как перенести желаемое поведение в WebDAV? Вместо этого я попытался использовать жесткие ссылки, но жесткие ссылки на каталог, похоже, не работают вообще. С помощью mount может сработать, но я не могу оценить побочный эффект сотен монтировок. Есть ли вариант, к которому я не пришел сейчас? Есть ли известная "лучшая практика"? Или WebDAV просто не подходит в качестве замены для Samba?

1 ответ

Решение

Похоже что mount --bind это решение, которое я искал. Существуют причины за и против использования ln -s vs mount --bind, но, как представляется, обычной практикой является несколько раз монтировать устройства в системах linux (даже монтирование отдельных файлов в другие файлы рекомендуется в man mount) и похоже, что стабильность системы серьезно не пострадала.

Единственным недостатком, конечно, является то, что, если точки монтирования не фиксируются путем изменения /etc/fstab, они будут потеряны при перезапуске сервера.

Еще одно слово для WebDAV: был интернет-проект (срок действия которого истек), чтобы расширить спецификацию WebDAV для обеспечения "расширенных коллекций", которые также должны предлагать возможность обработки ссылок. Работа над этим вопросом была проведена примерно в 1998—2002 годах, а затем тот бесшумно исчез. В Интернете вы можете найти несколько страниц с заявлением о том, что WebDav поддерживает символические ссылки с помощью расширенных коллекций, но в настоящее время это не так. Текущий (v.1.0.3-1.3.6) mod_dav Исходный код гласит:

/* ### for now, only process regular files (e.g. skip symlinks) */
if (S_ISREG(fsctx->info1.finfo.st_mode)) {

Можно было бы ожидать, что модуль WebDAV Tomcat 6 мог не знать о символических ссылках (поскольку, на самом деле, осведомленность о таких специальных вещах файловой системы не была включена в модель Java до версии 7), но он демонстрирует то же поведение, что соответствует спецификация тоже.

Наконец, был опубликован патч символьной ссылки для mod_dav-1.0.3-1.3.6, но вам придется применить патч к исходному коду и скомпилировать модуль самостоятельно… Я не пробовал этого.

Протокол DAV не следует символическим ссылкам

Итак, используйте файл конфигурации apache, чтобы сделать ссылку.

В файловой системе

mkdir /www/public_html/somewhere-else

(т.е. so /where-else отображается в команде dav list-directory)

В конфиге apache

Alias /somewhere-else /another-place

NB: если '/another-place' находится за пределами веб-сервера, добавьте в конфигурацию apache

<Directory /another-place>
Dav On
AllowOveride None # so .htaccess files are visible and their directives dont screw up dav
DirectoryIndex disabled # so dav's directory index command works
</Directory
Другие вопросы по тегам