Access-based Enumeration или как скрыть содержимое общих папок

  • Михаил
  • 12 мин. на прочтение
  • 184
  • 10 Dec 2016
  • 10 Dec 2016

Технология Access-based Enumeration (доступ на основе разрешений) позволяет на общих сетевых ресурсах (шарах) скрыть от пользователей файлы и папки, к которым у них отсутствует NTFS-доступ. Тем самым можно обеспечить дополнительную конфиденциальность информации, хранящейся в сетевом каталоге (за счет скрытия структуры и имен каталогов и файлов), улучшить юзабилити для пользователя,  которому в процессе работы с сетевым каталогом не будет отображаться лишняя информация (тем более доступ к которой у него все равно отсутствует) и, самое главное, оградим системного администратора от постоянных вопросов пользователей «почему меня не пускает в эту папку!!». Попробуем детальнее разобраться в этой технологии и особенностях ее настройки и использования в различных версиях Windows.

Немного теории

Одним из недостатков сетевых папок Windows является тот факт, что по-умолчанию все пользователи при просмотре дерева общей папки могли, как минимум, видеть ее структуру и список содержащихся в ней файлов и каталога, в том числе тех, доступ к которым на уровне NTFS у них  отсутствует (при попытке открыть такой файл или папку пользователь получает ошибку доступа «Access Denied»). Так почему бы не скрыть от пользователя те каталоги и файлы, к которым у него все равно нет доступа?  Помочь в этой задаче должна технология Access-based Enumeration. Включив ABE на общей сетевой папке можно добиться того, чтобы разные пользователи видели различный список каталогов и файлов в одной и той же сетевой шаре, основанный индивидуальных правах доступа пользователя к этим папкам (ACL)..

Каким образом происходит взаимодействие между клиентом и сервером при обращении к общей папке:

  • Клиент обращается к серверу с запросом на доступ к интересующего его каталогу в общей папке
  • Сервер проверяет, есть ли у пользователя на уровне NTFS права доступа к данному каталогу
  • Если доступ разрешен (просмотр содержимого/чтение/запись), пользователь видит список содержимого каталога
  • Затем пользователь по такой же схеме запрашивает доступ к конкретному файлу или вложенному каталогу, если доступа к папке нет, пользователь получает соответствующее предупреждение

Из этой схемы ясно, что сервер сначала показывает пользователю все содержимое папки, а проверку прав доступа осуществляет только после попытки доступа к его содержимому.

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

Т.е. пользователь одного отдела (например, склада) в одном и том же каталоге будет видеть один список папок и файлов. 

А пользователи другого департамента, например ИТ, — другой . 

Основной недостаток использования ABE на файловых серверах – дополнительная нагрузка на сервер. Особенно это можно почувствовать на высоконагруженных файловых серверах. Чем больше количество объектов в просматриваемом каталоге, и чем больше количество пользователей, тем больше задержка. По заявлению Microsoft в случае наличия в отображаемом каталоге 15000 объектов (файлов и каталогов), скорость открытия папки замедляется на 1-3 секунды. Именно поэтому, при проектировании структуры общих папок, рекомендуется уделить большое внимание созданию четкой и иерархической структуры подпапок, в этом случае замедление скорости открытия каталогов будет незаметным.

Примечание. Стоит понимать, что Access-based Enumeration не скрывает от пользователя сам список общих ресурсов (шар) на файловом сервере, а действует только по отношению к их содержимому. Если нужно скрыть от пользователя именно шару, необходимо  в конец названия общей папки добавить символ $.

Управлять ABE можно из командной строки (утилита abecmd.exe), из графического интерфейса или через специальный API.

Ограничения ABE 

Access-based Enumeration в Windows не работает в случаях:

  1. Если в качестве файл-сервера используется Windows XP или  Windows Server 2003 без Service Pack
  2. При локальном просмотре каталогов (непосредственно с сервера)
  3. Для членов локальной группы администраторов (они всегда видят полный список)

ABE в Windows Server

В Windows Server 2003 технология ABE стала поддерживаться начиная с Service Pack1. Чтобы включить Access-based Enumeration  в Windows Server 2003 SP1 (и выше), нужно скачать и установить пакет http://www.microsoft.com/en-us/download/details.aspx?id=17510. В процессе установки необходимо указать, нужно ли автоматически включить ABE для всех общих папок на сервере, либо настройка будет проводиться в индивидуальном порядке. Если выбран второй пункт, то после окончания установки пакета, в свойствах общих папок появится новая вкладка Access-based Enumeration. 

Чтобы активировать ABE для конкретной папки, включите в ее свойствах опцию Enable access-based enumeration on this shared folder.

Также отметим, что в Windows 2003 поддерживается использование Access Based Enumeration на основе DFS, однако настроить его можно только из командной строки с помощью утилиты cacls.

В Windows Server 2008/R2 никаких дополнительных компонентов устанавливать не нужно, т.к. возможность управления функционалом ABE уже встроена в графический интерфейс Windows. Чтобы включить Access-based Enumeration для  конкретной папки в  Windows Server 2008, откройте mmc консоль  управления Share and Storage Management (Start –> Programs –> Administrative Tools ->Share and Storage Management). Перейдите в окно свойств нужной шары. Затем перейдите в окно расширенных настроек (кнопка Advanced) и включите опцию Enable access-based enumeration.

Access-based enumeration в Windows Server 2012

Настройка ABE в новой Windows Server 2012 также крайне проста. Чтобы включить ABE в Windows Server 2012, необходимо сначала, естественно, установить роль File And Storage Services,а затем в консоли Server Manager перейти в свойства общей папки. 

И в разделе Settings включить опцию Enable access-based enumeration.

Управление ABE из командной строки

Настройками Access-based Enumeration можно управлять из командной строки при помощи утилиты Abecmd.exe. Данная утилита входит в пакет Access-based Enumeration для Windows Server 2003 SP1 (ссылка выше).

Утилита Abecmd.exe позволяет активировать ABE сразу для всех каталогов или же персонально. Следующая команда включит Access-Based Enumeration сразу для всех шар:

abecmd /enable /all

Или для конкретной папки (например, шары с именем Docs):

abecmd /enable Docs

ABE в клиентских ОС: Windows Vista, Windows 7, Windows 8 и выше

Многим пользователем, особенно в домашних сетях, также хотелось бы иметь возможность воспользоваться функционалом Access-Based Enumeration. Проблема заключается в том, что в клиентских ОС Microsoft отсутствует как графический, так и командный интерфейс управления «Перечислением на основе доступа». К счастью, утилита abecmd.exe, входящая в состав пакета для Windows Server 2003, прекрасно работает и на клиентских ОС. Т.к. пакет  Windows Server 2003 Access-based Enumeration на Windows 8/7/Vista не устанавливается, придется сначала установить его на Windows Server 2003, а затем скопировать его из каталога C:\windows\system32 в такой же каталог на клиенте. После этого включить ABE можно по сценарию с командной строкой, описанному выше.

Примечание. В корпоративной среде ABE замечательно сочетается с папками DFS, скрывая от пользователя «ненужные» папки и предоставляя более удобную структуру дерева общих папок.  Включит ABE на DFS можно с помощью консоли DFS Management или утилиты dfsutil.exe:
 dfsutil property abde enable \\<namespace root>