Неочевидные аспекты использования WebDAV в Windows

webdav-logoНачатая в статье Шаблоны MS Office в корпоративной сети (часть 2). Использование WebDAV тема использования WebDAV, оказалось полна неожиданных сложностей и неочевидных моментов. Конечно, можно было бы просто отказаться от использования этого механизма, но я считаю, что некоторые сложности не перекрывают потенциальных преимуществ от внедрения WebDAV (причем, не только для ограниченной задачи “распространения шаблонов”). Поэтому, о части неочевидностей я хочу рассказать сегодня.

Что именно хочется обговорить?

  • Развертывание и настройка запуска службы WebDAV-клиента
  • Правильное задание задание UNC-имен при обращении к WebDAV-ресурсам
  • Использование различных типов аутентификации (анонимная, Basic, Windows, …)

Вопрос #1. Развертывание и настройка запуска службы WebDAV-клиента

Здесь нас ожидает сразу 2 вопроса:

  • Установка (подключение) WebDAV клиента на машинах, где он не был установлен
  • Настройка автоматического запуска службы WebClient

Установка (подключение) WebDAV клиента на машинах, где он не был установлен. Суть проблемы в том, что служба WebClient и драйвер-редиректор mrxdav.sys на серверных ОС являются частью необязательного компонента Windows (который называется Desktop Experience) и потенциально могут быть не установлены серверах

image

Собственно, вся задача сводится к установке данного компонента (вручную или с использованием Server Manager для массовой установки).

В настольных же ОС, на сколько мне удалось выяснить, данный компонент является неотключаемым т.е. ставится везде по-умолчанию.

Настройка автоматического запуска службы WebClient. Как это ни странно, но по-умолчанию служба WebClient настроена для запуска по триггеру, в ручном (Manual) режиме. Видимо, по задумке разработчиков, служба должна была запускаться при первом обращении к ней от драйвера MRXDAV.SYS, но, увы, это работает не везде.

Поэтому мы принудительно выставим для службы вариант запуска Automatic, а чтобы сделать настройку сразу для всех машин в сети, воспользуемся механизмами GPO:

  • В редакторе GPO переходим на узел Computer Configuration\Preferences\Control Panel Settings\Services, в правой части вызываем контекстное меню и выбираем New\Service

image

  • В окне настройки выбираем сервис WebClient (поле Service name), тип старта Automatic (поле Startup) и действие, которое требуется при применении политики – Start service (поле Service action). Последнее поле нужно чтобы не перезагружать лишний раз компьютер

image

Все, осталось перезапустить машины или принудительно применить политику.

Вопрос #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

image

  • Затем щелкаем на строчку анонимной аутентификации и в контекстном меню вызываем её свойства (пункт контекстного меню Edit…). В открывшемся диалоге выбираем пункт Specific user, а затем того пользователя, от имени которого будет идти обращение к физической папке с шаблонами. В принципе, нам подойдет и указанный по умолчанию IUSR, надо только не забыть дать ему права на папку

image

  • Поднимаемся на узел Default Web Site, вызываем опцию WebDAV Authoring Rules,  а затем на панели Actions настройки WebDAV (пункт WebDAV Settings…). Здесь разрешаем анонимное считывание (пункт Allow Anonymous Property Queries)

image

Сохраняем все изменения и все – можем обращаться к узлам WebDAV безо всякой аутентификации

Basic аутентификация. Её можно рекомендовать только в одном случае – мы хотим обращаться к ресурсам, лежащим за пределами нашего домена, т.е. на наших WebDAV серверах не включать и использовать только разве что с клиента.

Из-за своей потенциальной небезопасности данный вид аутентификации по умолчанию включен только для SSL-соединений. За настройку отвечает ключ HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters, параметр BasicAuthLevel.

image

Он может принимать 3 возможных значения:

  • 0 – Basic-аутентификация полностью запрещена
  • 1 – Basic-аутентификация разрешена для SSL-соединений (значение по умолчанию)
  • 2 – Basic-аутентификация разрешена для любых типов соединений

Понятно, что править  значение реестра на каждой машине не очень практично. Потому сделаем все опять через групповые политики. Готовой настройки (шаблона) для управления WebClient, к сожалению нет, но мы можем воспользоваться механизмом прямой правки реестра:

  • В редакторе GPO переходим на узел Computer Configuration\Preferences\Windows Settings\Registry
  • На правой части в контекстном меню выбираем пункт New\Registry Item

image

  • В диалоге настройки задаем следующие параметры:
    • Action: Replace
    • Hive: HKEY_LOCAL_MACHINE
    • Key Path: SYSTEM\CurrentControlSet\Services\WebClient\Parameters
    • Value Name: BasicAuthLevel
    • Value Type: REG_DWORD
    • Value Type: <нужное нам значение>

image

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://<узел&gt; или https://<узел&gt; Т.е. в нашем случае это будет https://romanovmihail.cloudapp.net или http://romanovmihail.cloudapp.net (в зависимости от того, используем мы SSL или нет).

image

Ну и аналогично настройке базовой аутентификации мы можем настроить групповую политику для задания этого параметра реестра:

  • В редакторе 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 с новой строки!!!)

image

  • Сохраняем, применяем политику и рестартуем службу WebClient (ну или 2-ы перезагрузить компьютер – чтобы обновить политику, а затем, чтобы служба подхватила).
This entry was posted in Microsoft and tagged , , , . Bookmark the permalink.

11 Responses to Неочевидные аспекты использования WebDAV в Windows

  1. Андрей says:

    Спасибо, сильно помогло для автоматической синхронизации библиотек Sharepoint с папками.

  2. Alexey says:

    Спасибо, очень помогла эта информация, толково изложено.

  3. Pingback: Проблема с WebDav тормоза при подключении сетевого диска | ITHell.org

  4. alter says:

    Спасибо за статью! Сильно помогла. В ОС windows слишком много неочевидных аспектов, и слишком мало очевидных руководств.

  5. San says:

    Спасибо огромное!
    Кто бы мог подумать, что служба WebClient-а в серверных Windows засунута в “Возможности Рабочего стола”!

    • Подозреваю, что в оригинале там было “Desktop features”, что подразумевает не только сам рабочий стол, но и клиентские версии ОС. А это всё же ближе.

  6. null says:

    И ещё если в имени файла или папки присутствует “+”, то папка/файл не открываются.
    Решение:
    %windir%\system32\inetsrv\appcmd set config “Default Web Site” -section:system.webServer/security/requestFiltering -allowDoubleEscaping:true

  7. Игорь says:

    Возможно у вас заказать настройку 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, то ли статья не полная, то ли что-то поменялось с тех пор)

  8. Pingback: Преодоление ограничения WebDAV на файлы более 50мБ. — Записная книжка…

Leave a comment