Enable access based enumeration
gorbunov.pro
Блог Алексея Горбунова для специалистов по технологиям Microsoft.
Учебные статьи, руководства для администраторов, практические примеры, консультации.
«Я всегда выберу ленивого человека делать трудную работу, потому что он найдет легкий путь ее выполнения». Билл Гейтс.
Короче, блог для тех, кто всегда ищет легкие пути 😉
Страницы
Что такое Access-based Enumeration (ABE)
Мне часто приходится слышать вполне логичный вопрос от своих слушателей:
«Почему Windows показывает пользователям ВСЕ файлы из общих папок, несмотря на то, что к большей их части у пользователя все равно нет доступа?»
Ответ на вопрос и способ решения проблемы описаны в этой статье. В процессе написания и тестирования открыл для себя много интересного.
Теория
Встроенный в Windows механизм отображения общих папок уходит своими корнями в дремучие времена клиентов DOS и сервера Microsoft LAN Manager. В то время и количество сетевых ресурсов было небольшим, и вычислительные возможности систем ограничены. Поэтому алгоритмы предоставления информации о сетевых ресурсах были предельно простыми и, по большому счету, они не изменились до сегодняшнего дня.
Упрощенно, последовательность обращения к файлу в «шареной папке» выглядит так:
- клиент, обращаясь к серверу LAN Manager (сервис LanmanServer в современных Windows), получает список всех общих папок, находящихся на нем;
- пользователь выбирает название общей папки и пытается к ней подключиться;
- сервер проверяет, есть ли у пользователя разрешение на выбранную общую папку и, при наличии разрешения, высылает клиенту список всех файлов и папок в ней находящихся;
- пользователь выбирает интересующий его файл и пытается его открыть;
- сервер проверяет, есть ли у пользователя права доступа к выбранному файлу и, если они есть, высылает пользователю сам файл.
Исходя из указанной выше последовательности видно, что сервер проверяет клиентские права доступа на файлы и папки уже ПОСЛЕ того, как пользователь получает список доступных ресурсов и выбирает один из них.
Функционал Access-based Enumeration (ABE) позволяет решить проблему избыточного отображения файлов и папок на сетевых ресурсах, к которым у конечного пользователя все равно нет доступа.
После активации ABE сервер начинает проверять права пользователя на ресурсы ДО ТОГО, как высылает клиенту список имеющихся в общей папке ресурсов. Соответственно, в список попадают только те файлы и папки, которые пользователь может открыть, и ничего лишнего пользователь больше не видит.
Пример того, как общая папка Docs с включенной опцией ABE выглядит со стороны клиента .
. а вот, что на самом деле лежит в папке Docs (после отключения ABE):
Разница существенная .
Практика
В русскоязычном интерфейсе 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 в индивидуальном режиме позже.
После установки пакета в свойствах всех папок на Windows Server 2003 появляется вкладка Access-based Enumeration. На ней можно включить/отключить ABE индивидуально для каждой общей папки или для всех имеющихся папок сразу.
Обратите внимание, что для всех созданных после установки ABE общих папок функция ABE будет ОТКЛЮЧЕНА и на новых папках ее нужно активировать принудительно.
Настройка Access Based Enumeration (ABE) в Windows Server 2016
По умолчанию, когда пользователь открывает некую общую сетевую папку на сервере (предполагаем, что у пользователя есть право на доступ к сетевой шаре), SMB отображает ему полный список каталогов и файлов, которые находятся в ней. Функционал Windows «перечисление на основе доступа» (Access Based Enumeration – ABE) позволяет в сетевой папке скрыть от пользователя те файлы и папки, на которые у него отсутствуют NTFS разрешения.
Технология Access Based Enumeration впервые появилась еще в Windows Server 2003 SP1 и помогает предотвратить просмотр пользователями списков чужих файлов и папок.
Процесс доступа к сетевой папке в среде Windows выполняется следующим образом:
- Пользователь обращается к серверу и запрашивает доступ к общей сетевой папке
- Служба LanmanServer на сервере (именно она отвечает за предоставление доступа к файлам по SMB) проверяет, есть ли у пользователя необходимые разрешений на доступ к данной сетевой папке. Если доступ имеется, служба возвращает список пользователю список с содержимым папки
- Затем пользователь может выбрать и попытаться открыть необходимый ему файл или папку
- Сервер проверяет, имеет ли пользователь необходимые NTFS права на доступ к данному элементу. Если у пользователя есть необходимые разрешения, он открывает нужный объект. Если у пользователя не достаточно прав — возвращается ошибка отказа в доступе.
Согласно этому алгоритму сервер сначала возвращает пользователю список всего содержимого папки, а проверка наличия прав доступа к отдельным файлам и папкам выполняется только при обращении к ним. При включении ABE, служба LanmanServer вернет пользователю не все содержимое папки, а только те объекты файловой системы, на которые у пользователя есть права (Read или List contents).
Некоторые особенности ABE:
- ABE управляет только списком содержимого общей папки, но не скрывает сами шары от пользователей. Поэтому, когда пользователь подключается к серверу (\server-name), он увидит все имеющиеся на нем шары. Чтобы создать скрытую шару, нужно добавить в конец ее имени знак $, например SecretFolder$
- При локальном или RDP входе пользователя на сервер, ABE не работает
- Члены локальной группы «Администраторы» всегда видят полное содержимое сетевой папки
ABE включается для каждой сетевой папки по отдельности. Чтобы настроить ABE, откройте консоль Server Manager и выберите роль «File and Storage Services» (роль уже должна быть установлена).
Затем перейдите в раздел «Shares» и выберите из списка сетевую папку, для которой необходимо включить ABE. Щелкните правой кнопкой по папке и выберите «Properties».
В окне свойств папки перейдите на вкладку Settings и включите опцию Enable access-based enumeration.
Кроме того, вы можете включить перечисление на основе доступа на сетевом ресурсе с помощью PowerShell командлета Set-SmbShare:
Set-SmbShare -Name «Share» -FolderEnumerationMode AccessBased
В том случае, если вы управляете общими папками централизованно с помощью GPO (секция Computer Configuration -> Preferences -> Windows Settings -> Network Shares), вы можете включить ABE в ее свойствах (скрин ниже).
Preferences -> Windows Settings -> Network Shares» width=»707″ height=»542″ srcset=»https://vmblog.ru/wp-content/uploads/2017/05/word-image-58.png 707w, https://vmblog.ru/wp-content/uploads/2017/05/word-image-58-300×230.png 300w» sizes=»(max-width: 707px) 100vw, 707px» />
В качестве небольшой иллюстрации работы ABE. На скриншоте ниже показано как выглядит содержимое сетевой папки, для которой включен ABE для системного администратора сервера.
А так в проводнике выглядит та же самая папка для менеджера из отдела управления активами.
Таким образом, технология ABE облегчает жизнь как пользователям, так и администраторам. Пользователи не видят лишнюю и избыточную информацию в проводнике, а администратору не нужно больше отвечать на вопросы пользователи об отсутствии доступа к той или иной папке.
Однако у технологии Access Based Enumeration есть и небольшой недостаток — дополнительная нагрузка на сервер. Нагрузка зависит от количества пользователей сервера, количества объектов в общих папках и сложности ACL. При высокой загрузке сервера, скорость открытия папок на файловом сервере может значительно снижаться.
Enable access based enumeration
Вопрос
Приятного времени суток господа!
Решил я поставить на сервер Access-based Enumeration (ABE) что бы пользователи не могли видеть не положеных им папок.
Мысля появилась после прочтения статьи http://www.osp.ru/win2000/2006/08/3994477/
Вроде все легко, ставим утилитку, ставим галочку и должно все работать, но не работает.
Кто занимался этой АВЕ?
Подскажите что не так делаю?
Если нужна доп. инф. спрашивайте, сразу напишу
Ответы
Все ответы
Попробуйте из командкной строки утилитой abecmd
Есть у меня на сервере две шары 123 и 321 (тестовые)
на шару 123 даны права только админам
на 321 админам и Domain Users
Правильноли я понимаю, что после применения abecmd /enable 123,
и при заходе на сервер, от имени пользователя, я должен увидеть только 321
А не подскажите, в статье говориться что возможна большая нагрузка на сервер.
На сколько она будет большой, если в организации чуть больше 100 чел.
и все хранят свои док. на том сервере где я хочу прятать содержимое ?
Я думаю, что если сервер сам по себе тянет без явных задержек вашу нагрузу, то включение ABE не окажет сильного влияния. В любом случае, как видно из тестов, влияние становится заметным при огромном числе файлов — вряд ли у вас в каждой папке десятки тысяч файлов.
Наигрался я с этой АВЕ на тестовом сервере и решил поставить на боевой
Тестовый крутился на виртуалке и был 32х битный
Боевой сервер х64
Соответственно пытаюсь поставить ABEUI_x64.msi, а он говорит что не поддерживается данный процесор.
Ставлю ABEUI_i386.msi, а он говорит что эта версия только для WIN 2003 sp1 32 бита
На боевом сервере стоит Win 2003 sp2 R2 standart x64
что ему не нравится?
Только обрадовался что проблемы исчезают с пользователями 🙁
Забыл добавить что проц. Intel xeon E5310 (2 проца по 2 ядра)
Configure Access Based Enumeration on Windows Server 2016
By default, when user open some shared network folder, SMB displays full list of files and folders on it (of course only if user have permission to access share). Access Based Enumeration (ABE) allows you to hide specific files and folders for user who don’t have access permission.
Access Based Enumeration is available on Windows platform since Windows Server 2003 SP1 and helps to prevent users from seeing files and folders.
Access Based Enumeration on Server 2016
By default, the process of accessing to the network folder performed as follows:
- The user connects to the server and requests access to the shared folder.
- LanmanServer service on the server (responsible for sharing files and folders) checks if the user have NTFS permissions to read/list the folder content. If access is available, the service returns a list of all the files and folders contained in it.
- Next user selects a file or folder and tries to open it.
- The server checks if the user has the necessary access rights. If a user have necessary permissions, it returned desired item. If user have no rights – an access denied error returns.
According to this algorithm, the server at first returns the user a list of all the folder contents, and checks access rights to individual files and folder only when user tries to access them.
Then using ABE, the user will be shown only those resources for which he has the necessary rights: List contents for a folders or Read for individual files.
Some ABE features:
- ABE controls only list of the contents in a shared folder, but does not hide the list of shared folders from the users. Therefore, when a user connects to the server, he will see all shared folders. If you need to create a hidden share, you can simply add the character $ to its name, for example ShareName$.
- ABE doesn’t work when user logged locally or by connecting via RDP.
- Members of the local Administrators group always see the full list of the folder contents.
ABE is enabled for each folder individually. To configure ABE, open Server Manager console and select role File and Storage Services.
Note. To enable Access Based Enumeration, File and Storage Services role must be installed on the server.
Then, go to Shares section and choose from list a network folder, for which it is necessary to enable ABE. Right click on it and select its Properties.
Then in the properties of the share switch to Settings tab and put the check box on Enable access based enumeration option.
Also, you can enable access-based enumeration on a network share using PowerShell cmdlet Set-SmbShare using a simple command:
If you manage public folders settings centrally through Group Policy (Computer Configuration -> Preferences -> Windows Settings -> Network Shares), you can enable ABE in the share properties.
As for example – here is a content of a network folder with the enabled ABE for the server administrator:
And this is how it looks for the average user.
Thus, the ABE technology makes life easier for both Users and Administrators. The redundant information in the network folders are not displayed for User and Administrator no longer has to answer questions about the lack of access.
However, Access Based Enumeration has a small lack – an additional server load. The load depends on the number of users per server and the number of objects in the shares. During heavy load the speed of folder opening may significantly decrease.
Скрываем папки недоступные пользователю с помощью Access-Based Enumeration (ABE) в Windows Server
Технология Access-based Enumeration (ABE — Перечисление на основании доступа) позволяет на общих сетевых ресурсах (шарах) скрыть от пользователей файлы и папки, к которым у них отсутствует права доступа на чтение на уровне NTFS. Тем самым можно обеспечить дополнительную конфиденциальность данных, хранящихся в сетевом каталоге (за счет скрытия структуры и имен каталогов и файлов), улучшить юзабилити для пользователя, которому в процессе работы с сетевым каталогом не будет отображаться лишняя информация (тем более доступ к которой у него все равно отсутствует) и, самое главное, оградим системного администратора от постоянных вопросов пользователей «почему меня не пускает в эту папку!!». Попробуем детальнее разобраться в этой технологии и особенностях ее настройки и использования в различных версиях Windows.
Особенности доступа к общим сетевым папкам Windows
Одним из недостатков сетевых папок Windows является тот факт, что по-умолчанию все пользователи при просмотре содержимого общей папки могли, как минимум, видеть ее структуру и список содержащихся в ней файлов и каталогов, в том числе тех, доступ к которым на уровне NTFS у них отсутствует (при попытке открыть такой файл или папку пользователь получает ошибку доступа «Доступ запрещен / Access Denied»). Так почему бы не скрыть от пользователя те каталоги и файлы, к которым у него все равно нет доступа? Помочь в этой задаче должна технология Access Based Enumeration (ABE). Включив ABE на общей сетевой папке можно добиться того, чтобы разные пользователи видели различный список каталогов и файлов в одной и той же сетевой шаре, основанный индивидуальных правах доступа пользователя к этим папкам (ACL).
Каким образом происходит взаимодействие между клиентом и сервером при обращении к общей папке:
- Клиент обращается к серверу с запросом на доступ к интересующему его каталогу в общей сетевой папке;
- Служба LanmanServer на сервере проверяет, есть ли у пользователя права доступа к данному каталогу на уровне разрешений файловой системе NTFS;
- Если доступ разрешен (просмотр содержимого/чтение/запись), пользователь видит список содержимого каталога;
- Затем пользователь по такой же схеме может открыть конкретный файл или вложенный каталог (вы можете посмотреть, кто открыл конкретный файл в сетевой папке так). Если доступа к папке нет, пользователь получает соответствующее уведомление.
Из этой схемы ясно, что сервер сначала показывает пользователю все содержимое папки, а проверку прав доступа на конкретный объект осуществляет только после попытки доступа к его содержимому.
Функционал Access Based Enumeration (ABE) позволяет реализовать проверку прав доступа на объекты файловой системы до того, как пользователю отправляется список содержимого папки. Следовательно, в конечный список будут попадать только те объекты, к которым у пользователя есть хотя бы права Read на уровне NTFS, а все недоступные ресурсы просто не отображаются (скрываются).
Т.е. пользователь одного отдела (например, склада) в одном и том же сетевом каталоге (\filesrv1docs) будет видеть один список папок и файлов. Как вы видите, у пользователя отображаются только две папки: Public и Sklad.
У пользователей другого департамента, например, ИТ (которые включены в другую группу безопасности Windows), отображается другой список вложенных каталогов. Помимо каталогов Public и Sklad у данных пользователей в сетевой папке видны еще 6 директорий.
Основной недостаток использования ABE на файловых серверах – дополнительная нагрузка на сервер. Особенно это можно почувствовать на высоконагруженных файловых серверах. Чем больше количество объектов в просматриваемом каталоге, и чем больше количество пользователей открывают файлы на нем, тем больше задержка. По заявлению Microsoft в случае наличия в отображаемом каталоге 15000 объектов (файлов и каталогов), скорость открытия папки замедляется на 1-3 секунды. Именно поэтому, при проектировании структуры общих папок, рекомендуется уделить большое внимание созданию четкой и иерархической структуры подпапок, в этом случае замедление скорости открытия каталогов будет незаметным.
Управлять ABE можно из командной строки (утилита abecmd.exe), из графического интерфейса, PowerShell или через специальный API.
Ограничения Access Based Enumeration
Access-based Enumeration в Windows не работает в случаях:
- Если в качестве файл-сервера используется Windows XP или Windows Server 2003 без Service Pack;
- При локальном просмотре каталогов (непосредственно с сервера). Например, пользователь, подключившись к RDS серверу будет видеть все локальные папки, если данный сервер используется и в качестве файлового сервера);
- Для членов локальной группы администраторов файлового сервера (они всегда видят полный список файлов).
Использование ABE в Windows Server 2008 / 2008 R2
В Windows Server 2008/R2 для использования функционала Access Based Enumeration никаких дополнительных компонентов устанавливать не нужно, т.к. возможность управления функционалом ABE уже встроена в графический интерфейс Windows. Чтобы включить Access-based Enumeration для конкретной папки в Windows Server 2008/2008 R2, откройте mmc консоль управления Share and Storage Management (Start –> Programs –> Administrative Tools ->Share and Storage Management). Перейдите в окно свойств нужной шары. Затем перейдите в окно расширенных настроек (кнопка Advanced) и включите опцию Enable access-based enumeration.
Настройка Access Based Enumeration в Windows Server 2012 R2/ 2016
Настройка ABE в Windows Server 2012 R2 / 2016 также выполняется просто. Чтобы включить Access Based Enumeration необходимо сначала, естественно, установить роль файлового сервера (File And Storage Services), а затем в консоли Server Manager перейти в свойства общей папки.
И в разделе Settings включить опцию Enable access-based enumeration.
Настройка Access Based Enumeration в Windows Server 2003
В 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.
Управление 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
Управление Access Based Enumeration с помощью PowerShell
Для управления настройками Access Based Enumeration для конкретных папок можно использовать PowerShell модуль SMBShare (установлен по-умолчанию в Windows 10/8.1 и Windows Server 2016/ 2012 R2). Выведем свойства конкретной сетевой папки:
Обратите внимание на значение атрибута FolderEnumerationMode. В нашем случае его значение – Unrestricted. Это означает, что ABE отключен для этой папки.
Можно проверить статус ABE для всех сетевых папок сервера:
Get-SmbShare | Select-Object Name,FolderEnumerationMode
Чтобы включить ABE для папки, выполните:
Get-SmbShare Install | Set-SmbShare -FolderEnumerationMode AccessBased
Вы можете включить Access Based Enumeration для всех опубликованных сетевых папок (в том числе административных шар ADMIN$, C$, E$, IPC$), выполните:
Get-SmbShare Install | Set-SmbShare -FolderEnumerationMode AccessBased
Чтобы отключить ABE, выполните:
Get-SmbShare Install | Set-SmbShare -FolderEnumerationMode Unrestricted
Access-Based Enumeration в Windows 10 / 8.1 / 7
Многим пользователем, особенно в домашних сетях, также хотелось бы иметь возможность воспользоваться функционалом Access-Based Enumeration. Проблема заключается в том, что в клиентских ОС Microsoft отсутствует как графический, так и командный интерфейс управления «Перечислением на основе доступа».
В Windows 10 (Server 2016) и Windows 8.1 (Server 2012R2) для управления Access-based Enumeration можно использовать PowerShell (см. раздел выше). В более старых версиях Windows, вам необходимо установить последнюю версию PowerShell (>= 5.0) или использовать утилиту abecmd.exe из пакета для Windows Server 2003, прекрасно работает и на клиентских ОС. Т.к. пакет Windows Server 2003 Access-based Enumeration на Windows 10 / 8.1 / 7 не устанавливается, придется сначала установить его на Windows Server 2003, а затем скопировать его из каталога C:windowssystem32 в такой же каталог на клиенте. После этого включить ABE можно по сценарию с командной строкой, описанному выше.
Кроме того, вы можете включать ABE на компьютерах домена AD с помощью групповых политик. Для этого используется GPP в секции: Computer Configuration -> Preferences -> Windows Settings -> Network Shares).
Как вы видите, в свойствах сетевой папки есть опция Access-Based Enumeration, если изменить значение на Enable, для всех общих папок, созданных с помощью данной GPO будет включен режим ABE.