Что такое Access-based Enumeration (ABE)

Мне часто приходится слышать вполне логичный вопрос от своих слушателей:
"Почему Windows показывает пользователям ВСЕ файлы из общих папок, несмотря на то, что к большей их части у пользователя все равно нет доступа?"

Ответ на вопрос и способ решения проблемы описаны в этой статье. В процессе написания и тестирования открыл для себя много интересного.

Содержание
   Теория

   Практика
      ABE и Windows Server 2003 / R2
      ABE и Windows Server 2008 / R2
      ABE и Windows Vista, Windows 7
      ABE и DFS (Distributed File System)
      ABE и Group Policy
      В каких случаях ABE не работает?
   Выводы

 

Теория


Встроенный в Windows механизм отображения общих папок уходит своими корнями в дремучие времена клиентов DOS и сервера Microsoft LAN Manager. В то время и количество сетевых ресурсов было небольшим, и вычислительные возможности систем ограничены. Поэтому алгоритмы предоставления информации о сетевых ресурсах были предельно простыми и, по большому счету, они не изменились до сегодняшнего дня.

Упрощенно, последовательность обращения к файлу в "шареной папке" выглядит так:

  • клиент, обращаясь к серверу LAN Manager (сервис LanmanServer в современных Windows), получает список всех общих папок, находящихся на нем;
  • пользователь выбирает название общей папки и пытается к ней подключиться;
  • сервер проверяет, есть ли у пользователя разрешение на выбранную общую папку и, при наличии разрешения, высылает клиенту список всех файлов и папок в ней находящихся;
  • пользователь выбирает интересующий его файл и пытается его открыть;
  • сервер проверяет, есть ли у пользователя права доступа к выбранному файлу и, если они есть, высылает пользователю сам файл.

Исходя из указанной выше последовательности видно, что сервер проверяет клиентские права доступа на файлы и папки уже ПОСЛЕ того, как пользователь получает список доступных ресурсов и выбирает один из них.

Функционал Access-based Enumeration (ABE) позволяет решить проблему избыточного отображения файлов и папок на сетевых ресурсах, к которым у конечного пользователя все равно нет доступа.

После активации ABE сервер начинает проверять права пользователя на ресурсы ДО ТОГО, как высылает клиенту список имеющихся в общей папке ресурсов. Соответственно, в список попадают только те файлы и папки, которые пользователь может открыть, и ничего лишнего пользователь больше не видит.

Пример того, как общая папка Docs с включенной опцией ABE выглядит со стороны клиента ...

image

... а вот, что на самом деле лежит в папке Docs (после отключения ABE):

image

Разница существенная Подмигивающая рожица.

Практика

В русскоязычном интерфейсе Windows термин Access-based Enumeration (ABE) переводится как "Перечисление на основе доступа".

Опция ABE доступна для настроек общих папок, начиная с Windows Vista. Windows XP функционал ABE не поддерживает. ABE может также применяться и для пространства имен DFS (Distributed File System). Детали ниже.

ABE и Windows Server 2003 / R2

В Windows Server 2003 функционал Access-based Enumeration появился вместе с Service Pack 1. Средства настройки ABE, тем не менее, в Service Pack не встроены. Скачать их можно тут.

В процессе установки средств управления ABE мастер предлагает включить ABE на все имеющиеся папки или включить ABE в индивидуальном режиме позже.

image

После установки пакета в свойствах всех папок на Windows Server 2003 появляется вкладка Access-based Enumeration. На ней можно включить/отключить ABE индивидуально для каждой общей папки или для всех имеющихся папок сразу.

image

Обратите внимание, что для всех созданных после установки ABE общих папок функция ABE будет ОТКЛЮЧЕНА и на новых папках ее нужно активировать принудительно.

Сделать это можно через вкладку Access-Based Enumeration или через утилиту командной строки abecmd.exe на всех папках сразу...

C:\>abecmd /enable /all
Access Based Enumeration enabled on all shares

... или на отдельных папках индивидуально:

C:\>abecmd /enable UsersData
Access Based Enumeration enabled on share "UsersData"

Выбирайте, как удобнее. Abecmd.exe может прекрасно работать, например, в составе пакетного файла, запускаемого на сервере ежедневно.

ABE и Windows Server 2008 / R2

В Windows Server 2008 функционал ABE встроен, но ведет себя различно, в зависимости от того, каким способом вы создаете общую папку. Кроме того, сам интерфейс настройки ABE "упрятан" довольно глубоко, совсем не так, как в Windows Server 2003.

Чтобы у вас не было сюрпризов в рабочей среде, разберем варианты работы с общими папками и настройки ABE более детально.

Вариант 1.
Управление через Windows Explorer

При создании общей папки через Windows Explorer (свойства папки --> вкладка Sharing) функционал ABE включается автоматически.

При этом интерфейс управления ABE в свойствах папки отсутствует в принципе.

Вариант 2.
Управление через консоль Share and Storage Management

Консоль Share and Storage Management показывает все общие папки нашего или удаленного сервера.

Если открыть свойства папки, то будет выведено такое окно:

image

При нажатии кнопки Advanced... мы, наконец, доберемся до ABE:

image

Из этой же консоли (Share and Storage Management ) можно создать и настроить новую общую папку с помощью мастера Provision Share. В настройках мастера на этапе SMB Settings мы можем выбрать Advanced... и получим ровно то же самое окно, что приведено выше. По умолчанию ABE включен.

Вариант 3.
Создание общей папки через команду NET SHARE

Команда NET SHARE часто применяется в сценариях запуска или пакетных файлах настройки сервера.

C:\>net share UsersData=D:\Users
UsersData was created successfully

Обратите внимание, что на общих папках, созданных этой утилитой, функционал ABE по умолчанию НЕ ВКЛЮЧЕН.

Вариант 4.
Создание папок с помощью сценариев, пакетов-установщиков и пр.

У вас еще остается возможность создания общих папок с помощью сценариев VBScript, PowerShell и др. Все варианты проверить сложно, поэтому я бы рекомендовал вам запустить свои сценарии в тестовой среде, и выяснить, будет ли включен ли ABE по умолчанию сразу после создания общей папки.

Также неизвестно, как поведет себя настройка ABE при создании общей папки программой-установщиком какого-нибудь приложения, требующего для своей работы наличия общей папки. Проверка выполняется только опытным путем в тестовой среде.

Вариант 5.
Управление ABE через утилиты командной строки

Как ни странно, ни одной утилиты командной строки для настройки ABE в Windows Server 2008 не предусмотрено. Пакет управления ABE для Windows Server 2003 на Windows Server 2008 ставиться отказывается.

Остается один вариант: скопировать утилиту abecmd.exe с 2003 сервера на 2008. Работает, проверено.

ABE и Windows Vista, Windows 7

Что интересно, клиентские системы Microsoft также прекрасно поддерживают ABE. Если у вас имеется много общих папок на клиентах, вполне разумно будет включить на них ABE. Как это сделать? Все так же, как и для Windows Server 2008, с помощью утилиты abecmd.exe, потому что никаких вообще средств настройки ABE на клиентах нет.

Поскольку пакет управления ABE для Windows Server 2003 на Windows Vista / 7  не устанавливается, сначала установите его на Windows Server 2003. Затем с сервера из папки %systemroot%\system32 скопируйте утилиту abecmd.exe на клиента уже в локальную папку %systemroot%\system32. 32-разрядная утилита abecmd.exe прекрасно работает на 64-разрядных системах.

Кстати, ABE на клиентах особенно актуален в домашней сети Подмигивающая рожица.

ABE и DFS (Distributed File System)

В Windows Server 2008 появилась поддержка ABE для пространств имен DFS.

В некоторых источниках и утилитах ABE для DFS может называться ABDE (Access Based Directory Enumeration). Я буду использовать термин ABE. Например, в рассматриваемой ниже утилите dfsutil.exe ключи abe и abde взаимозаменяемы.

Настройка ABE для ссылки пространства имен DFS не то же самое, что настройка ABE для общей папки, на которую эта ссылка ведет. Клиент получает от сервера DFS ссылку DFS еще до того, как делает попытку обращения к реальной общей папке.

По умолчанию, конечный пользователь видит всю иерархию ссылок пространства имен DFS. Соответственно, задача администратора - ограничить список DFS только доступными пользователю ссылками.

Для сложных доменных DFS важно правильно выполнить настройки ABE, чтобы они не терялись при перезапуске сервиса и реплицировались между серверами DFS.

Предварительные требования к настройке ABE на доменных DFS

Для  настройки ABE на доменных DFS (Domain-based DFS) необходимо проверить следующее:
1) домен должен работать в режиме Windows Server 2008 и выше;
2) лес должен работать в режиме Windows Server 2003 и выше;
3) сервер DFS должен быть Windows Server 2008 и выше:
4) само дерево DFS должно быть создано в режиме Windows Server 2008.

Для отдельно стоящих DFS (Stand-Alone DFS) перечисленные выше требования неактуальны.

Дальнейшая корректная настройка ABE для DFS состоит из двух этапов:
1) включение ABE на корне DFS и
2) настройка параметров видимости отдельных ссылок DFS.

Шаг 1. Включение ABE на пространстве имен (корне) DFS

По умолчанию функционал ABE НЕ ВКЛЮЧЕН на вновь создаваемом пространстве имен (корне) DFS.

В Window Server 2008 это можно сделать только через утилиту dfsutil.exe:

C:\>dfsutil property ABE enable \\DC01\Public
Done processing this command.

C:\>dfsutil property ABE \\DC01\Public
Namespace \\DC01\Public: ABDE ENABLED
Done processing this command.

В Windows Server 2008 R2 появилась возможность настройки ABE на DFS через графический интерфейс консоли DFS Management.

image

Еще раз напомню, что для того, чтобы на вкладке Advanced в свойствах доменного DFS появилась опция Enable access-based enumeration for this namespace, требуется выполнение четырех предварительных требований (см. выше).

Подробное описание настроек DFS для Windows Server 2008 R2 тут.

Шаг 2. Настройка параметров видимости отдельных ссылок DFS

В Windows Server 2000/2003 все ссылки DFS наследуют разрешения NTFS от папки на сервере, в которой размещен корень DFS. Вполне возможно управлять видимостью отдельных ссылок через изменение настроек прав доступа пользователей к ним. Например, если у пользователя нет права Read на ссылку, сервер DFS и не высылает ее на клиента.

Windows Server 2008 по умолчанию использует тот же механизм. Однако, управление видимостью ссылок через NTFS имеет ряд ограничений. Например, сервер DFS не реплицирует NTFS разрешения, сбрасывает их после перезапуска и т.д.

Чтобы корректно сохранять режим видимости ссылок пространства имен DFS в Window Server 2008 требуется явно настроить ABE на ссылке через утилиту dfsutil.exe:

dfsutil property sd grant ... и т.д.

В Windows Server 2008 R2 настройка чуть проще, поскольку есть графический интерфейс:

image 

Подробное описание настроек DFS для Windows Server 2008 R2 тут.

ABE и Group Policy

В Windows Server 2008 существует возможность создания общих папок через расширение групповых политик Preferences. В свойствах создаваемой общей папки вы можете указать, будет ли включен ABE для такой папки.

image

Серверы Windows Server 2008 и Windows 7 понимают все настройки Preferences.

Чтобы Preferences заработали для Windows Server 2003 и Windows Vista, требуется установить клиентский модуль расширения групповых политик. Детальное руководство по установке модуля расширения описано в KB943729. Для Windows XP также можно установить клиентский модуль расширения групповых политик, но функционал ABE в ней, напомню, не поддерживается.

В каких случаях ABE не работает?

Обратите внимание на некоторые тонкости применения ABE.
Функционал Access-based Enumeration НЕ РАБОТАЕТ или не применим в перечисленных ниже случаях:

  • подключение к общим папкам на Windows XP, Windows Server 2000, Windows Server 2003 без Service Pack;
  • обращение к общей папке, минуя сервис LanmanServer;
  • получение списка общих папок с сервера (вы ВСЕГДА видите все общие папки на сервере; ABE контролирует список содержимого ВНУТРИ общей папки);
  • получение списка принтеров от сервера печати;
  • подключение общих дисков через сессии Remote Desktop;
  • обращение к общей папке членов группы Administrators (имеется в виду группа на сервере, конечно), т.е. АДМИНИСТРАТОРЫ ВИДЯТ ВСЕ.

Не забывайте про этот список :-)

Выводы


Функционал Access-based Enumeration был одной из наиболее ожидаемых функций файловых серверов Windows на протяжении многих лет. И, несмотря на то, что ABE появился вместе с Windows Server 2003 SP1, многие администраторы до сих пор не подозревают о его существовании.

Дополнительные сложности в применении функционала ABE вызывает непоследовательный интерфейс настройки в разных версиях Windows и различное поведение ABE по умолчанию (в зависимости от способа создания общей папки).

 

30 комментариев:

  1. Спасибо, прекрасный стиль изложения. yoxel

    ОтветитьУдалить
  2. Большое спасибо. Всегда здесь нахожу полезные статьи.

    ОтветитьУдалить
  3. Спасибо за труд!

    ОтветитьУдалить
  4. ЗАЧЕМ ХОДИТЬ В ЖМЕРИНКУ ЧЕРЕЗ АМЕРИКУ?!?!?

    ABE в 2008r2 есть!!

    заходим "Start"-->"Administrative Tools"-->"Share And Storage Management"

    в списке находим нужную "ШАРУ" клацаем "пкм"-->"Properties"
    внизу находим кнопку "Advanced" и в появившемся окне ставим галочку "Enable Access-based enumeration"
    И БУДЕТ ВАМ СЧАСТЬЕ :))

    с настройкой прав, чтоб кто нужно(ненужно)-видел(невидел), думаю сами разберётесь

    ОтветитьУдалить
    Ответы
    1. Это о чем комментарий??

      Удалить
    2. Все верно.
      Просто, отлично и грамотно.
      Без заморочек тупых.
      Спасибо. Все на отлично)))

      Удалить
  5. Анонимный1 июня 2012 г., 16:42

    Спасибо, первый полноценный обзор. По инету все по кускам.

    ОтветитьУдалить
  6. значит как не настраивай сервер а на XP все равно все папки видны будут?

    ОтветитьУдалить
    Ответы
    1. Не будут :-)
      ABE - технология сервереая, поэтому любой клиент будет видеть только то, что пришлет сервер. А с включенным режимом ABE сервер клиенту ничего лишнего не показывает.

      Удалить
  7. Great thanks for article!

    ОтветитьУдалить
  8. Алексей, огромное спасибо!
    Оставлю у себя эту статью и, надеюсь, больше ничего по теме ABE уже не потребуется искать на гуглах и технетах.

    ОтветитьУдалить
  9. Класс!! Спасибо за статью!

    ОтветитьУдалить
  10. Алексей, большое спасибо за статью.

    ОтветитьУдалить
  11. Алексей, день добрый. Вопрос: есть 4 ПК (Win7SP1)в одной рабочей группе, к домену не подключены. В силу специфики на всех 4-х ПК расшарен целый раздел (под программу), права группе Все даны полные (тоже в силу специфики :). Соответственно все остальные сотрудники предприятия имеют полный доступ ко всему содержимому раздела, что не есть гут. Собственно вопрос: Как применить ABE на этих 4-х ПК, чтобы пользователи этих ПК могли видеть расшареный раздел друг у друга, а остальные пользователи нет? Буду очень рад и признателен, если поможете решить эту проблему.
    С уважением, Андрей

    ОтветитьУдалить
    Ответы
    1. На мой взгляд, у вас не тот случай, когда нужен и применим ABE.

      Вариант 1. Сделать обшие папки скрытыми (со значком $). Тогда чужие пользователи просто не увидят их.
      Вариант 2. Отключить Guest на указанных четырех ПК, тогда никакие пользователи извне к общим папкам подключиться не смогут.

      Удалить
  12. Анонимный5 июня 2013 г., 9:38

    Алексей, здравствуйте.
    Есть шара А. В ней лежат три каталога А1, А2,А3.
    В каталоге А1 надо сделать так чтобы пользователи видели всё, могли туда запивать файлы, но доступа на чтение\измение\удаление у них не было.
    Т.е. если активировать ABE, то будут видится всё что в трех каталогах, а надо лишь в одном.
    Можно конечно этот каталог А1 отдельно зашарить и отключить ABE, но структура кореневого каталога А измениться.
    Знаете ли Вы как можно решить эту проблему с доступом к папке А1?

    ОтветитьУдалить
    Ответы
    1. Сорри, не сразу увидел этот комментарий.

      Про папку А1 не совсем понятно: "В каталоге А1 надо сделать так чтобы пользователи видели всё" и следом сразу "но доступа на чтение\измение\удаление у них не было".
      Уточните, пожалуйста, ТЗ :-)

      Если про ABE в целом, то у пользователей нужно убрать право Read на файлы и List на папку. Тогда ABE не будет эти ресурсы показывать. Комбинации прав доступа могут быть сильно неочевидными, поскольку в системе файлового доступа от рождения "зашито" много конфликтов между разными уровнями настроек. Но проблема решаема, опыт есть ;-)

      Удалить
  13. Добрый день! дополните, пожалуйста, статью в части сервера 2012

    ОтветитьУдалить
  14. Добрый день. Есть шара А. В ней папка А1, а в папке А1 есть папка А12. Можно ли сделать так чтобы пользователи не могли зайти в папку А1, но видели и могли заходить в папку А12. При этом не расшаривая папку А12?

    ОтветитьУдалить
    Ответы
    1. Group Policy - обход перекрестной проверки

      (Bypass Traverse Checking)

      Удалить
  15. Для папок DFS включил ABDE, как у вас описано. В "Configure View Permission" определяется видимость (или невидимость) только самой папки DFS. А вот как сделать невидимой папки, находящиеся внутри папки DFS, что-то не пойму. Для обычных шар включал ABE и при этом папки внутри шар, к которым у пользователя нет доступа, не показывались этому пользователю. А вот в DFS что-то так сделать не получается...

    ОтветитьУдалить
    Ответы
    1. В вашем случае нужно как раз задействовать оба механизма DFS: один контролирует список видимых узлов DFS, а потом, после перехода полтзователя с узла DFS на реальнуб папку, отрабатывает ABE на самой общей папке.

      Удалить
  16. подскажите пожалуйста, есть windows 2003 sp2 установлен АБЕ есть папка "arm$" скрыта от каких то полльзователей, кто-то видит кто-то нет, но мне надо, добавить туда еще новых пользователей чтобы ее видели еще пару юзеров, почему это нигде не описано как сделать, во вкладке доступ и безопасность юзеров добавлял не помогло((

    ОтветитьУдалить
  17. Анонимный3 июня 2015 г., 20:32

    Здравствуйте!
    Спасибо большое за этот урок, но остался один вопрос:
    допустим есть диск D и нужно ограничить видимость корневой папки среди пользователей. "D:\AdminFolder"
    ABE не работает с корневыми каталогами, я правильно понимаю?
    Сеть реализована на Server 2008 R2, не доменным способом, а просто есть разные группы пользователей и для них "расшарены" папки на сервере. Хочется чтобы они не видели какие-то корневые папки, а какие-то видели и мели у ним доступ.
    Спасибо!

    ОтветитьУдалить
    Ответы
    1. ABE прекрасно работает с корневыми папками, если имеется ввиду содержимое папок. ABE не применяется к перечислению списка самих общих папок, т.е. пользователь видит все общие папки, что есть на сервере. А вот потом уже список доступных файлов контролируется ABE.
      "Приклеить" ABE с списку общих папок можно через сервис DFS. Например, сделать на сервере все "шареные папки" скрытыми, затем сделать их видимыми через DFS (добавить скрытые папки как узлы дерева DFS), а вот потом уже контролировать список доступных пользоывателям узлов DFS с помощью ABE.

      Удалить
  18. Анонимный29 июля 2015 г., 16:01

    Дякую за статтю. мені допомогла розібратись з проблемою.

    ОтветитьУдалить