Начатая в статье Шаблоны MS Office в корпоративной сети (часть 2). Использование WebDAV тема использования WebDAV, оказалось полна неожиданных сложностей и неочевидных моментов. Конечно, можно было бы просто отказаться от использования этого механизма, но я считаю, что некоторые сложности не перекрывают потенциальных преимуществ от внедрения WebDAV (причем, не только для ограниченной задачи “распространения шаблонов”). Поэтому, о части неочевидностей я хочу рассказать сегодня.
Что именно хочется обговорить?
- Развертывание и настройка запуска службы WebDAV-клиента
- Правильное задание задание UNC-имен при обращении к WebDAV-ресурсам
- Использование различных типов аутентификации (анонимная, Basic, Windows, …)
Вопрос #1. Развертывание и настройка запуска службы WebDAV-клиента
Здесь нас ожидает сразу 2 вопроса:
- Установка (подключение) WebDAV клиента на машинах, где он не был установлен
- Настройка автоматического запуска службы WebClient
Установка (подключение) WebDAV клиента на машинах, где он не был установлен. Суть проблемы в том, что служба WebClient и драйвер-редиректор mrxdav.sys на серверных ОС являются частью необязательного компонента Windows (который называется Desktop Experience) и потенциально могут быть не установлены серверах
Собственно, вся задача сводится к установке данного компонента (вручную или с использованием Server Manager для массовой установки).
В настольных же ОС, на сколько мне удалось выяснить, данный компонент является неотключаемым т.е. ставится везде по-умолчанию.
Настройка автоматического запуска службы WebClient. Как это ни странно, но по-умолчанию служба WebClient настроена для запуска по триггеру, в ручном (Manual) режиме. Видимо, по задумке разработчиков, служба должна была запускаться при первом обращении к ней от драйвера MRXDAV.SYS, но, увы, это работает не везде.
Поэтому мы принудительно выставим для службы вариант запуска Automatic, а чтобы сделать настройку сразу для всех машин в сети, воспользуемся механизмами GPO:
- В редакторе GPO переходим на узел Computer Configuration\Preferences\Control Panel Settings\Services, в правой части вызываем контекстное меню и выбираем New\Service
- В окне настройки выбираем сервис WebClient (поле Service name), тип старта Automatic (поле Startup) и действие, которое требуется при применении политики – Start service (поле Service action). Последнее поле нужно чтобы не перезагружать лишний раз компьютер
Все, осталось перезапустить машины или принудительно применить политику.
Вопрос #2. Правильное задание задание UNC-имен при обращении к WebDAV-ресурсам
К сожалению, найти исчерпывающее описание того, как драйвер-редиректор MRXDAV.SYS определяет, что введенный UNC путь нужно перевести в WebDAV-запрос, и как осуществляется этот перевод, мне не удалось. Поэтому здесь я привожу результаты вычитанных форумов и личных экспериментов:
- Лучше всегда указывать полную строку адреса (с обязательной частью @<порт>), т.е. в формате \\<имя_компьютера>@<порт>\<путь>\DavWWWRoot, т.е. в нашем случае это будет \\romanovmihail.cloudapp.net@80\Templates\DavWWWRoot
- Для запросов по HTTPS вместо номера порта указывать мнемонику SSL. Т.е. наш адрес для HTTPS будет выглядеть так \\romanovmihail.cloudapp.net@ssl\Templates\DavWWWRoot
- При указании номера порта последний элемент DavWWWRoot можно опускать, т.е. указывать просто:
\\romanovmihail.cloudapp.net@80\Templates\ или \\romanovmihail.cloudapp.net@ssl\Templates\
Более того, судя по логам обращения к серверу, последний вариант – самый предпочтительный.
Вопрос #3. Использование различных типов аутентификации (анонимная, Basic, Windows, …)
Клиент WebDAV поддерживает практически все, основанные на передачи функции от логина и пароля типа аутентификации: Basic, Digest и Windows (включая NTLM, Kerberos, …) – а также анонимная.
Анонимная аутентификация. Иначе говоря, отсутствие аутентификации. В этом режиме WebDAV клиент работает по умолчанию (впрочем, как и большинство HTTP-based клиентов), т.е. первый запрос он посылает без аутентификационных данных, и только если сервер требует аутентифицировать себя, запрашивает (если надо) и пересылает credentials пользователя.
Поэтому на стороне клиента никакой настройки не требуется, но она требуется на стороне IIS. Впрочем, здесь все довольно просто (кроме последнего шага) – посмотрим как это выглядит для варианта, предложенного в предыдущей статье:
- Для узла Templates открываем настройку аутентификации и разрешаем анонимную, но запрещаем Windows
- Затем щелкаем на строчку анонимной аутентификации и в контекстном меню вызываем её свойства (пункт контекстного меню Edit…). В открывшемся диалоге выбираем пункт Specific user, а затем того пользователя, от имени которого будет идти обращение к физической папке с шаблонами. В принципе, нам подойдет и указанный по умолчанию IUSR, надо только не забыть дать ему права на папку
- Поднимаемся на узел Default Web Site, вызываем опцию WebDAV Authoring Rules, а затем на панели Actions настройки WebDAV (пункт WebDAV Settings…). Здесь разрешаем анонимное считывание (пункт Allow Anonymous Property Queries)
Сохраняем все изменения и все – можем обращаться к узлам WebDAV безо всякой аутентификации
Basic аутентификация. Её можно рекомендовать только в одном случае – мы хотим обращаться к ресурсам, лежащим за пределами нашего домена, т.е. на наших WebDAV серверах не включать и использовать только разве что с клиента.
Из-за своей потенциальной небезопасности данный вид аутентификации по умолчанию включен только для SSL-соединений. За настройку отвечает ключ HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters, параметр BasicAuthLevel.
Он может принимать 3 возможных значения:
- 0 – Basic-аутентификация полностью запрещена
- 1 – Basic-аутентификация разрешена для SSL-соединений (значение по умолчанию)
- 2 – Basic-аутентификация разрешена для любых типов соединений
Понятно, что править значение реестра на каждой машине не очень практично. Потому сделаем все опять через групповые политики. Готовой настройки (шаблона) для управления WebClient, к сожалению нет, но мы можем воспользоваться механизмом прямой правки реестра:
- В редакторе GPO переходим на узел Computer Configuration\Preferences\Windows Settings\Registry
- На правой части в контекстном меню выбираем пункт New\Registry Item
- В диалоге настройки задаем следующие параметры:
- Action: Replace
- Hive: HKEY_LOCAL_MACHINE
- Key Path: SYSTEM\CurrentControlSet\Services\WebClient\Parameters
- Value Name: BasicAuthLevel
- Value Type: REG_DWORD
- Value Type: <нужное нам значение>
Windows-аутентификация. У этого способа аутентификации есть один замечательный аспект, который отсутствует у остальных (Digest и Basic) – это возможность использовать контекст пользователя, вошедшего в доменную сеть. Или, проще говоря, пароль у пользователя спросят только 1 раз – при авторизации на рабочей машине, а не каждый раз при обращении к ресурсу (по сути, готовый механизм Single SignOn)!
Но есть одна загвоздка (как же без этого)… Клиент WebDAV, по умолчанию считает все сервера с полным FDQN (а говоря проще, любые имена с точкой) не доверенными, и отказывается пересылать им пользовательские credentials.
Как же решить эту проблему? Ответ – с помощью еще одно параметра в ключе реестра службы WebClient. Конкретно нас интересует ключ HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters и параметр AuthForwardServerList (это многостроковый параметр или в терминах RegEdit – REG_MULTI_SZ).
В этом параметре мы указываем все URL доверенных узлов в виде http://<узел> или https://<узел> Т.е. в нашем случае это будет https://romanovmihail.cloudapp.net или http://romanovmihail.cloudapp.net (в зависимости от того, используем мы SSL или нет).
Ну и аналогично настройке базовой аутентификации мы можем настроить групповую политику для задания этого параметра реестра:
- В редакторе GPO переходим на узел Computer Configuration\Preferences\Windows Settings\Registry. На правой части в контекстном меню выбираем пункт New\Registry Item
- В диалоге настройки задаем следующие параметры:
- Action: Replace
- Hive: HKEY_LOCAL_MACHINE
- Key Path: SYSTEM\CurrentControlSet\Services\WebClient\Parameters
- Value Name: AuthForwardServerList
- Value Type: REG_MULTI_SZ
- Value Type: https://romanovmihail.cloudapp.net (каждый URL с новой строки!!!)
- Сохраняем, применяем политику и рестартуем службу WebClient (ну или 2-ы перезагрузить компьютер – чтобы обновить политику, а затем, чтобы служба подхватила).
Спасибо, сильно помогло для автоматической синхронизации библиотек Sharepoint с папками.
Спасибо, очень помогла эта информация, толково изложено.
Pingback: Проблема с WebDav тормоза при подключении сетевого диска | ITHell.org
Спасибо за статью! Сильно помогла. В ОС windows слишком много неочевидных аспектов, и слишком мало очевидных руководств.
Спасибо огромное!
Кто бы мог подумать, что служба WebClient-а в серверных Windows засунута в “Возможности Рабочего стола”!
Подозреваю, что в оригинале там было “Desktop features”, что подразумевает не только сам рабочий стол, но и клиентские версии ОС. А это всё же ближе.
И ещё если в имени файла или папки присутствует “+”, то папка/файл не открываются.
Решение:
%windir%\system32\inetsrv\appcmd set config “Default Web Site” -section:system.webServer/security/requestFiltering -allowDoubleEscaping:true
О как… Не сталкивался с таким.
Спасибо, что поделились!
Возможно у вас заказать настройку WebDAV сервера для доступа к общей рабочей папке для удалённых пользователей через интернет? Что ни делаю – не могу закидывать файлы больше 50Мб. В реестре прописал максимальное ограничение в 4Гб.
Игорь, добрый день.
Увы, я не занимаюсь администрированием уже много лет (и за давностью компетенции серьезно растерял), поэтому вряд ли могу быть полезен.
Что касается проблем с размером загружаемых файлов, то здесь мысли такие:
я так понял, вы имеете в виду лимит на загружаемые файлы, который указывается в ключе FileSizeLimitInBytes? Если да, то это только клиентское ограничение, нужно бы еще посмотреть, каковы настройки на сервере.
Для этого:
– проверьте каков лимит входящих запросов на IIS (на том сайте, где вы размещаете WebDAV). Как это сделать можно взглянуть тут https://www.inflectra.com/Support/KnowledgeBase/KB306.aspx
– еще мне смутно помнится, что были некие настройки по фильтрации пакетов на уровне драйвера http.sys, но что-то я сейчас ничего такого не могу найти (нашел вот такую статью https://docs.microsoft.com/en-us/troubleshoot/iis/httpsys-registry-windows но там нет даже параметров логгирования HTTP трафика, которые были для http.sys, то ли статья не полная, то ли что-то поменялось с тех пор)
Pingback: Преодоление ограничения WebDAV на файлы более 50мБ. — Записная книжка…