По умолчанию, когда пользователь открывает некую общую сетевую папку на сервере (предполагаем, что у пользователя есть право на доступ к сетевой шаре), 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 в ее свойствах (скрин ниже).
В качестве небольшой иллюстрации работы ABE. На скриншоте ниже показано как выглядит содержимое сетевой папки, для которой включен ABE для системного администратора сервера.
А так в проводнике выглядит та же самая папка для менеджера из отдела управления активами.
Таким образом, технология ABE облегчает жизнь как пользователям, так и администраторам. Пользователи не видят лишнюю и избыточную информацию в проводнике, а администратору не нужно больше отвечать на вопросы пользователи об отсутствии доступа к той или иной папке.
Однако у технологии Access Based Enumeration есть и небольшой недостаток — дополнительная нагрузка на сервер. Нагрузка зависит от количества пользователей сервера, количества объектов в общих папках и сложности ACL. При высокой загрузке сервера, скорость открытия папок на файловом сервере может значительно снижаться.
Технология Access-based Enumeration (ABE — Перечисление на основании доступа) позволяет на общих сетевых ресурсах (шарах) скрыть от пользователей файлы и папки, к которым у них отсутствует права доступа на чтение на уровне NTFS. Тем самым можно обеспечить дополнительную конфиденциальность данных, хранящихся в сетевом каталоге (за счет скрытия структуры и имен каталогов и файлов), улучшить юзабилити для пользователя, которому в процессе работы с сетевым каталогом не будет отображаться лишняя информация (тем более доступ к которой у него все равно отсутствует) и, самое главное, оградим системного администратора от постоянных вопросов пользователей «почему меня не пускает в эту папку!!». Попробуем детальнее разобраться в этой технологии и особенностях ее настройки и использования в различных версиях Windows.
Содержание:
- Особенности доступа к общим сетевым папкам Windows
- Ограничения Access Based Enumeration
- Использование ABE в Windows Server 2008 / 2008 R2
- Настройка Access Based Enumeration в Windows Server 2012 R2/ 2016
- Настройка Access Based Enumeration в Windows Server 2003
- Управление ABE из командной строки
- Управление Access Based Enumeration с помощью PowerShell
- Access-Based Enumeration в Windows 10 / 8.1 / 7
Особенности доступа к общим сетевым папкам 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 секунды. Именно поэтому, при проектировании структуры общих папок, рекомендуется уделить большое внимание созданию четкой и иерархической структуры подпапок, в этом случае замедление скорости открытия каталогов будет незаметным.
Примечание. Стоит понимать, что Access Based Enumeration не скрывает от пользователя сам список общих сетевых ресурсов (шар) на файловом сервере, а действует только по отношению к их содержимому. Если нужно скрыть от пользователя именно сетевую папку, необходимо в конец названия общей папки добавить символ $.
Управлять 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). Выведем свойства конкретной сетевой папки:
Get-SmbShare Install|fl *
Обратите внимание на значение атрибута 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 замечательно сочетается с папками DFS, скрывая от пользователя «ненужные» папки и предоставляя более удобную структуру дерева общих папок. Включить ABE на пространстве имен DFS можно с помощью консоли DFS Management или утилиты dfsutil.exe:
dfsutil property abde enable \<namespace root>
Кроме того, вы можете включать ABE на компьютерах домена AD с помощью групповых политик. Для этого используется GPP в секции: Computer Configuration -> Preferences -> Windows Settings -> Network Shares).
Как вы видите, в свойствах сетевой папки есть опция Access-Based Enumeration, если изменить значение на Enable, для всех общих папок, созданных с помощью данной GPO будет включен режим ABE.
By default, when a user opens some shared network folder, SMB displays a full list of files and folders on it. Of course, it happens only if the user has permission to access the share. Access Based Enumeration (ABE) allows hiding the specific files and folders for a user who don’t have access permission.
Access Based Enumeration is available on the Windows platform since Windows Server 2003 SP1, and helps to prevent users from seeing files and folders.
By default, the process of accessing 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 has NTFS permissions to read/list the folder content. If the access is available, the service returns a list of all 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 has the necessary permissions, it returns the desired item. If the user has no rights — access denied error returns.
According to this algorithm, the server first returns a list of all the folder contents to the user. The server checks access rights to individual files and folder only when the user tries accessing them.
Then using ABE, the user will be shown only the resources for which he has the necessary rights. List contents for folders, or Read for individual files.
Some ABE features:
- ABE controls only the list of the contents in a shared folder. It 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 the user logged locally or when 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 the Shares section and choose a network folder from the list for which to enable the ABE. Right-click on it, and select its Properties.
Then in the properties of the share switch to the Settings tab. Put the check box on Enable access-based enumeration option.
Also, you can enable the access-based enumeration on a network share using PowerShell cmdlet Set-SmbShare. Use a simple command:
Set-SmbShare -Name "Share" -FolderEnumerationMode AccessBased
If you manage public folders settings centrally through Group Policy (Computer Configuration > Preferences > Windows Settings > Network Shares), you can enable the ABE in the share properties.
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, ABE technology makes life easier for both Users and Administrators. The redundant information in the network folders is not displayed for User. The administrator no longer has to answer questions about the lack of access.
However, the Access Based Enumeration has a serious minus — 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 opening the folder may significantly decrease.
- About
- Latest Posts
I enjoy technology and developing websites. Since 2012 I’m running a few of my own websites, and share useful content on gadgets, PC administration and website promotion.
Access-based Enumeration (ABE) allows to hide objects (files and folders) from users who don’t have NTFS permissions (Read or List) on a network shared folder in order to access them. Thus you can provide additional confidentiality of data stored in a shared folder (due to hiding the structure and names of folders and files), improve its usability since users won’t see odd data (they don’t have access to) and, what’s more important, save a system administrator from constant questions of users “Why I cannot access this folder!!!”. Let’s try to consider this technology, configuration peculiarities and use of ABE in various Windows versions in details.
Contents:
- How does access to shared folders work in Windows?
- Access-Based Enumeration Restrictions
- Using ABE on Windows Server 2008/ 2008 R2
- Configuring Access-based Enumeration on Windows Server 2012 R2/ 2016
- Implementing Access-Based Enumeration on Windows Server 2003
- Managing ABE from the Command Prompt
- Managing Access Based Enumeration Using PowerShell
- Access-Based Enumeration in Windows 10 / 8.1 / 7
How does access to shared folders work in Windows?
One of the drawbacks of network shared folders technology in Windows is the fact that by default all users could at least see its structure and the list of all files and directories in such a folder including those that they don’t have NTFS permissions to access (when trying to open such file or folder, a user receives the error “Access Denied”). Why not to hide those files and folders from the users who don’t have permissions to access them? Access-based Enumeration can help doing it. By enabling ABE on a shared folder, you can ensure that different users see a different list of folders and files in the same network share based on the user’s individual access permissions (ACL).
How does the interaction between the client and the server occurs when accessing a shared folder over the SMB?
- A client requests the server to access a directory in the network shared folder;
- The LanmanServer service on the server checks the user permissions to access this folder;
- If access is allowed (NTFS permissions: list content, read or write), the user sees the directory contents;
- Then the user requests access to a file or a subfolder in the same way (you can view who opened a specific file in a network folder like this);
- If the access is denied, the user is notified accordingly.
According to this scheme, it becomes clear that the server firstly shows the entire contents of the folder to the user, and the NTFS permissions are checked only when the user tries to open a specific file or folder.
Access-based Enumeration (ABE) allows to check access permissions on file system objects before the user receives a list of the folder contents. So, the final list includes only those objects a user has NTFS permissions to access (at least read-only permission), and all inaccessible resources are simply not displayed (hidden).
It means that a user from one department (e.g. warehouse) will see one list of files and folders in a shared folder (\filesrv1docs). As you can see, only two folders are displayed for the user: Public and Warehouse.
And for a user from another department, e. g., IT department (which is included in another Windows security group), a different list of subfolders is shown. In addition to the Public and Warehouse directories, this user sees 5 more directories in the same network folder.
The main disadvantage of using ABE on the Windows file servers is the extra load on the server. It is especially prominent in high load file servers. The more objects there are in the viewed directory, and the more users open files on it, the longer the delay is. According to Microsoft, if there are 15,000 objects (files and directories) in the displayed folder, a folder is opening 1-3 seconds slower. That’s is why it is recommended to pay much attention to making a clear and hierarchical subfolder structure when designing a shared folder structure in order to make a delay when opening folders less evident.
Note. You should understand that Access-based Enumeration doesn’t hide the list of the network shared folders on a file server, it hides only their contents. If you need to hide a shared folder from a user, you have to add a $ symbol at the end of the share name.
You can manage ABE from the command prompt (abecmd.exe utility), from the GUI, PowerShell or a special API.
Access-Based Enumeration Restrictions
Access-based Enumeration on Windows doesn’t work in the following cases:
- If you are using Windows XP or Windows Server 2003 without Service Pack 1 as a file server;
- If you are viewing directories locally (directly from the server);
- For members of the local file server administrators group (they always see the full list of files).
Using ABE on Windows Server 2008/ 2008 R2
In Windows Server 2008/R2 to use the Access Based Enumeration functionality no additional components need to be installed, since the ABE management feature is already built into the Windows GUI. To enable Access-based Enumeration for a certain folder in Windows Server 2008/2008 R2, open the MMC management console Share and Storage Management (Start –> Programs –> Administrative Tools -> Share and Storage Management). Go to the properties of the necessary share. Then go to the Advanced settings and check Enable access-based enumeration.
Configuring Access-based Enumeration on Windows Server 2012 R2/ 2016
ABE configuration in the Windows Server 2012 R2 / 2016 is also very simple. To enable ABE in Windows Server 2012, you firstly have to install File and Storage Services role, and then go to the share properties in the Server Manager.
In Settings section check the option Enable access-based enumeration.
Implementing Access-Based Enumeration on Windows Server 2003
In Windows Server 2003 (not supported now), ABE became supported starting from Service Pack 1. To enable Access-based Enumeration in Windows Server 2003 SP1 (or later), you have to download and install a package following this link http://www.microsoft.com/en-us/download/details.aspx?id=17510. During installation you have to specify whether ABE will be enabled for all shared folders on your server or you’ll configure it manually. If you choose the second option, a new tab, Access-based Enumeration, will appear in the network share properties after the installation.
To activate ABE for a certain folder, check the option Enable access-based enumeration on this shared folder in its properties.
It’s important to mention that Windows 2003 supports DFS-based Access Based Enumeration, but it can be configured only from the command prompt using cacls.
Managing ABE from the Command Prompt
You can manage Access-based Enumeration settings from the command prompt using Abecmd.exe utility. This tool is a part of Access-based Enumeration package for Windows Server 2003 SP1 (see the link above).
Abecmd.exe allows to activate ABE for all directories at once or only for some of them. The next command enables Access-Based Enumeration for all shares:
abecmd /enable /all
This one is for a certain folder (e.g., a network shared folder with the name Docs):
abecmd /enable Docs
Managing Access Based Enumeration Using PowerShell
You can use the SMBShare PowerShell module (installed by default in Windows 10/ 8.1 and Windows Server 2016/2012 R2) to manage the settings of Access Based Enumeration for specific folders. Let’s list the properties of a specific shared folder:
Get-SmbShare Install|fl *
Note the value of the FolderEnumerationMode attribute. In our case, its value is Unrestricted. This means that ABE is disabled for this folder.
You can check the status of ABE for all shared folders of the server:
Get-SmbShare | Select-Object Name,FolderEnumerationMode
To enable ABE for a specific folder:
Get-SmbShare Install | Set-SmbShare -FolderEnumerationMode AccessBased
You can enable Access Based Enumeration for all published network folders (including administrative shares ADMIN$, C$, E$, IPC$,…) by running the command:
Get-SmbShare | Set-SmbShare -FolderEnumerationMode AccessBased
To disable ABE use the command:
Get-SmbShare Install | Set-SmbShare -FolderEnumerationMode Unrestricted
Access-Based Enumeration in Windows 10 / 8.1 / 7
Many users, especially in home or SOHO networks, also would like to use Access-Based Enumeration features. The problem is that Microsoft client OSs have neither graphical, nor command interface to manage Access-Based Enumeration.
In Windows 10 (Server 2016) and Windows 8.1 (Server 2012R2), you can use PowerShell to manage Access-based Enumeration (see the section above). In older versions of Windows, you need to install the latest version of PowerShell (>= 5.0) or use the abecmd.exe utility from the Windows Server 2003 package, it works fine on client OSs. Since the Windows Server 2003 Access-based Enumeration package is not installed on Windows 10, 8.1 or 7, you have to install it first on Windows Server 2003, and then copy it from the C:windowssystem32 directory to the same folder on the client. After that, you can enable ABE according with the commands described above.
Note. In corporate environment, ABE combines perfectly with DFS folders by hiding folders from the user and providing a more convenient structure of the public folders tree. You can enable ABE in DFS using DFS Management or dfsutil.exe:
dfsutil property abde enable \namespace_root
In addition, you can enable ABE on computers in the AD domain using GPO. This can be done using GPP in the section: Computer Configuration -> Preferences -> Windows Settings -> Network Shares).
In the properties of the network folder there is an Access-Based Enumeration option, if you change the value to Enable, ABE mode will be enabled for all shared folders created using this GPO.
Access based enumeration enables you to configure advanced display options for shared folders. If a user is mapped to a network drive and this network drive has the Access Based Enumeration Feature enabled then this user can only see folders that he has access to. So far so good. Now I’m going to show how to configure this great feature in the graphical interface and – of course – in Windows PowerShell.
But let me first say some things about this feature. The question is why would you want to do this?
A defense of Access Based Enumeration 😉
Security
The first reason is security. Why do you want to show files and folders to users that have no access to it? No need for.
User Experience
The second reason is user experience. Why do you want to distract user with tons of files and folders that they don’t have access to? Remember: If your users are fine, then you are fine.
Configuring Access Based Enumeration with Server Manager
On the server which holds the shared folder open Server Manager. Click on File and Storage Services.
Next click on Shares.
Select your shared folder and right click it. Select Properties. Activate the checkbox Access Based Enumeration.
Configuring Access Based Enumeration by using Windows PowerShell
Welcome to the Champions League! Who needs Server Manager? 😉
Set-SmbShare -Name Data -FolderEnumerationMode AccessBased
To verify your settings run
Get-SmbShare -Name Data | Select-Object FolderEnumerationMode
To check all your local shares run
Get-SmbShare | Select-Object Name,FolderEnumerationMode
The Impact
Ok, if this is the first time you’ve heard from this great feature, then you might think “Hmm… does this really works in my environment?” Ok, Ok I will give you preview. So, let’s have a look to the permissions of user Petra. Petra has access to the shared folder Data and to it’s subfolders HR and PR, but not IT.
On the left side you see the server’s view and on the right side Petra’s view. Quite different … Petra does not have access to the IT folder. Therefore she can see only the folders HR and PR.
Have fun with Access Based Enumeration and don’t forget: If your users are fine, then you are fine. 😉
See also
More about File Shares in my blog posts
PowerShell: Find and close open files (SMB Share)
PowerShell: How to create File Shares
Published by Patrick Gruenauer
Microsoft MVP on PowerShell [2018-2023], IT-Trainer, IT-Consultant, MCSE: Cloud Platform and Infrastructure, Cisco Certified Academy Instructor.
View all posts by Patrick Gruenauer
title | description | ms.date | ms.topic | author | manager | ms.author |
---|---|---|---|---|---|---|
Enable Access-based Enumeration on a Namespace |
This article describes how to enable access-based enumeration on a namespace. |
6/5/2017 |
article |
JasonGerend |
brianlic |
jgerend |
Enable access-based enumeration on a namespace
Applies to: Windows Server 2022, Windows Server 2019, Windows Server 2016, Windows Server 2012 R2, Windows Server 2012, Windows Server 2008 R2, Windows Server 2008
Access-based enumeration hides files and folders that users do not have permissions to access. By default, this feature is not enabled for DFS namespaces. You can enable access-based enumeration of DFS folders by using DFS Management. To control access-based enumeration of files and folders in folder targets, you must enable access-based enumeration on each shared folder by using Share and Storage Management.
To enable access-based enumeration on a namespace, all namespace servers must be running Windows Server 2008 or newer. Additionally, domain-based namespaces must use the Windows Server 2008 mode. For information about the requirements of the Windows Server 2008 mode, see Choose a Namespace Type.
In some environments, enabling access-based enumeration can cause high CPU utilization on the server and slow response times for users.
[!NOTE]
If you upgrade the domain functional level to Windows Server 2008 while there are existing domain-based namespaces, DFS Management will allow you to enable access-based enumeration on these namespaces. However, you will not be able to edit permissions to hide folders from any groups or users unless you migrate the namespaces to the Windows Server 2008 mode. For more information, see Migrate a Domain-based Namespace to Windows Server 2008 Mode.
To use access-based enumeration with DFS Namespaces, you must follow these steps:
- Enable access-based enumeration on a namespace
- Control which users and groups can view individual DFS folders
[!WARNING]
Access-based enumeration does not prevent users from getting a referral to a folder target if they already know the DFS path. Only the share permissions or the NTFS file system permissions of the folder target (shared folder) itself can prevent users from accessing a folder target. DFS folder permissions are used only for displaying or hiding DFS folders, not for controlling access, making Read access the only relevant permission at the DFS folder level. For more information, see Using Inherited Permissions with Access-Based Enumeration
You can enable access-based enumeration on a namespace either by using the Windows interface or by using a command line.
To enable access-based enumeration by using the Windows interface
-
In the console tree, under the Namespaces node, right-click the appropriate namespace and then click Properties .
-
Click the Advanced tab and then select the Enable access-based enumeration for this namespace check box.
To enable access-based enumeration by using a command line
-
Open a command prompt window on a server that has the Distributed File System role service or Distributed File System Tools feature installed.
-
Type the following command, where <namespace_root> is the root of the namespace:
dfsutil property abe enable \ <namespace_root>
[!TIP]
To manage access-based enumeration on a namespace by using Windows PowerShell, use the Set-DfsnRoot, Grant-DfsnAccess, and Revoke-DfsnAccess cmdlets. The DFSN Windows PowerShell module was introduced in Windows Server 2012.
You can control which users and groups can view individual DFS folders either by using the Windows interface or by using a command line.
To control folder visibility by using the Windows interface
-
In the console tree, under the Namespaces node, locate the folder with targets for which you want to control visibility, right-click it and then click Properties.
-
Click the Advanced tab.
-
Click Set explicit view permissions on the DFS folder and then Configure view permissions.
-
Add or remove groups or users by clicking Add or Remove.
-
To allow users to see the DFS folder, select the group or user, and then select the Allow check box.
To hide the folder from a group or user, select the group or user, and then select the Deny check box.
To control folder visibility by using a command line
-
Open a Command Prompt window on a server that has the Distributed File System role service or Distributed File System Tools feature installed.
-
Type the following command, where <DFSPath> is the path of the DFS folder (link), <DOMAINAccount> is the name of the group or user account, and (…) is replaced with additional Access Control Entries (ACEs):
dfsutil property sd grant <DFSPath> DOMAINAccount:R (...) Protect Replace
For example, to replace existing permissions with permissions that allows the Domain Admins and CONTOSOTrainers groups Read (R) access to the contoso.officepublictraining folder, type the following command:
dfsutil property sd grant \contoso.officepublictraining "CONTOSODomain Admins":R CONTOSOTrainers:R Protect Replace
-
To perform additional tasks from the command prompt, use the following commands:
Command | Description |
---|---|
Dfsutil property sd deny | Denies a group or user the ability to view the folder. |
Dfsutil property sd reset | Removes all permissions from the folder. |
Dfsutil property sd revoke | Removes a group or user ACE from the folder. |
Additional References
- Create a DFS Namespace
- Delegate Management Permissions for DFS Namespaces
- Installing DFS
- Using Inherited Permissions with Access-Based Enumeration
Файловый сервер установлен. Об установке и настройке файлового сервера смотрите статью «Файловый сервер на базе Windows Server 2016». В этой статье я расскажу о настройке прав доступа к сетевым папкам на файловом сервере.
На логическом диске D: файлового сервера создадим папку, например, share-local. Это будет корневая папка для всего файлового сервера.
Включаем Sharing для этой папки. Нажимаем Advansed Sharing > удаляем Everyone и добавляем Authenticated Users или Domain Users.
Устанавливаем права для Authenticated Users.
Теперь включаем ABE (Access Based Enumeration) — папки, к которым нет доступа, не будут отображаться. На Windows Server 2016 опция ABE находится в File and Storage Services > Shares. Выбираем нашу папку, клик правой кнопкой мыши >Properties и в пункте меню Settings ставим флаг — Enable access-based enumeration.
Возвращаемся к нашей папке share-local. Заходим на вкладку Security, нажимаем Advansed. В появившемся окне Advansed Security нажимаем Disable inheriatance (Отключить наследование). Отключаем наследование с преобразованием унаследованных прав в явные.
Оставляем полный доступ для этой папки, ее подпапок и файлов администраторам и системе, права создателя-владельца урезаем, остальные права доступа удаляем.
Добавляем группу Domain Users c правом только чтения и только этой папки.
Создаем подпапки отделов. Вновь созданные папки будут видны только администраторам. Добавим группы, которые должны получить доступ к ним. И не забываем поставить флаг Write для групп.
Как видно, теперь пользователь сети нужного отдела видит папку своего отдела и может в ней создавать папки и файлы.
Создаем папку для второго отдела, добавляем нужную группу к доступу — у нашего пользователя по прежнему только его папка.
Помним, что один из отделов уже имеет общий ресурс для отдела. И нужно этому отделу подключить еще одну сетевую папку. Для этих целей мы создали наш Namespace. O Namespace смотрите статью
«Файловый сервер на базе Windows Server 2016».
Подключаем сетевой ресурс через \unitec.localshare-files
Видим 2 папки нашего отдела. Одна из них корневая со старого сетевого ресурса (dc share), а вторая подпапка отдела (new share) с нового файлового сервера. У пользователя все работает, есть возможность создавать файлы и папки.
Представим ситуацию, что кто-то вне нашего отдела узнал, что в локальной сети есть сетевой ресурс \unitec.localshare-files и решил проверить — будет ли у него доступ.
В результате такой пользователь увидит следующее. У него будут отображаться 2 папки первого отдела. Если он зайдет в корневую папку старого сетевого ресурса (dc share) — то для него папка будет пуста, так как на папке включен ABE. При попытке входа на подпапку отдела нового файлового сервера — получит ошибку.
Права доступа у нас работают.
Хочу добавить, что у меня не стояла задача создания структуры папок в корневой папке отдела и назначения прав на папки структуры.
Технология перечисления на основе доступа (ABE) позволяет пользователям скрывать файлы и папки от пользователей на общих сетевых ресурсах (шарах), к которым у них нет доступа для чтения на уровне NTFS. Таким образом, можно обеспечить дополнительную конфиденциальность данных, хранящихся в сетевом каталоге (за счет сокрытия структуры и имен каталогов и файлов), повысить удобство использования для пользователя, который при работе с сетевым каталогом не увидит лишней информации (в частности, доступ к которому у него у всех одинаково отсутствует) и, прежде всего, мы защитим системного администратора от постоянных вопросов пользователей «почему они не пускают меня в эту папку !!». Попробуем более подробно разобраться в этой технологии и особенностях ее настройки и использования в различных версиях Windows.
Одним из недостатков сетевых папок Windows является тот факт, что по умолчанию все пользователи при просмотре содержимого общей папки могут, по крайней мере, видеть ее структуру и список файлов и каталогов, которые она содержит, включая те, к которым осуществляется доступ на уровне NTFS отсутствует (при попытке открыть такой файл или папку пользователь получает сообщение об ошибке отказа в доступе). Так почему бы не скрыть от пользователя те каталоги и файлы, к которым у них еще нет доступа? Технология Access Based Enumeration (ABE) должна помочь в решении этой задачи. Включив ABE в общей сетевой папке, вы можете гарантировать, что разные пользователи будут видеть разные списки каталогов и файлов в одной и той же сетевой папке, в зависимости от индивидуальных прав доступа пользователя к этим папкам (ACL).
Как клиент и сервер взаимодействуют при доступе к общей папке:
- Клиент обращается к серверу с запросом на доступ к интересующему каталогу в общей сетевой папке;
- Служба LanmanServer на сервере проверяет, есть ли у пользователя разрешения NTFS для каталога;
- Если доступ разрешен (просмотр / чтение / запись), пользователь видит список содержимого каталога;
- Затем пользователь может открыть определенный файл или подкаталог, используя тот же шаблон (вы можете увидеть, кто открыл конкретный файл в сетевой папке, подобной этой). Если к папке невозможно получить доступ, пользователь получает соответствующее предупреждение.
из этой схемы видно, что сервер сначала показывает пользователю все содержимое папки и проверяет права доступа к конкретному объекту только после попытки доступа к его содержимому.
Функция перечисления на основе доступа (ABE) позволяет проверять права доступа к объектам в файловой системе перед отправкой пользователю списка содержимого папки. Таким образом, в окончательный список будут включены только те объекты, для которых у пользователя есть как минимум права чтения на уровне NTFS, а все недоступные ресурсы просто не отображаются (скрыты).
Пользователи отдела (например, склада) в том же сетевом каталоге (\ filesrv1 docs) увидят список папок и файлов. Как видите, у пользователя отображаются только две папки: Public и Sklad.
Пользователи из другого отдела, например ИТ (которые включены в другую группу безопасности Windows), видят другой список подкаталогов. Помимо каталогов Public и Sklad, для этих пользователей в сетевой папке видны 6 других каталогов.
Основным недостатком использования ABE на файловых серверах является дополнительная нагрузка на сервер. Это может быть особенно заметно на сильно загруженных файловых серверах. Чем больше объектов в каталоге отображается и чем больше пользователей открывают в нем файлы, тем больше задержка. По данным Microsoft, если в отображаемом каталоге находится 15 000 объектов (файлов и каталогов), скорость открытия папки замедляется на 1-3 секунды. Поэтому при проектировании структуры общих папок рекомендуется уделять пристальное внимание созданию четкой и иерархической структуры вложенных папок, в этом случае замедление скорости открытия каталогов не будет заметно.
Примечание. Понятно, что перечисление на основе доступа не скрывает от пользователя список общих сетевых ресурсов (мяч) на файловом сервере, а действует только в отношении их содержимого. Если вы хотите скрыть сетевую папку от пользователя, добавьте символ $ в конец имени общей папки $.
ABE можно управлять из командной строки (утилита abecmd.exe), из графического интерфейса, PowerShell или через специальный API.
Ограничения Access Based Enumeration
Перечисление на основе входа в систему в Windows не работает в следующих случаях:
- Если в качестве файлового сервера используется Windows XP или Windows Server 2003 без Service Pack;
- При просмотре каталогов локально (прямо с сервера). Например, пользователь, подключающийся к серверу RDS, увидит все локальные папки, если этот сервер также используется как файловый сервер);
- Для членов группы администраторов локального файлового сервера (всегда смотрите полный список файлов).
Использование ABE в Windows Server 2008 / 2008 R2
В Windows Server 2008 / R2 вам не нужно устанавливать какие-либо надстройки для использования функции перечисления на основе входа в систему – возможность управления функциональностью ABE уже встроена в графический интерфейс Windows. Чтобы включить перечисление на основе доступа для определенной папки в Windows Server 2008/2008 R2, откройте консоль управления хранилищем и общим доступом mmc (Пуск -> Программы -> Администрирование -> Управление хранилищем и общим доступом). Перейдите в окно свойств желаемых шаров. Затем перейдите в окно дополнительных настроек (кнопка «Дополнительно») и включите параметр «Включить перечисление на основе входа в систему.
Настройка Access Based Enumeration в Windows Server 2012 R2/ 2016
Настроить ABE в Windows Server 2012 R2 / 2016 также просто. Чтобы включить перечисление на основе входа в систему, вы, конечно, должны сначала установить роль File And Storage Services, а затем перейти к свойствам общей папки в консоли Server Manager.
В разделе «Настройки» включите параметр «Включить перечисление на основе входа в систему.
Настройка Access Based Enumeration в Windows Server 2003
В Windows Server 2003 (больше не выпускается) технология ABE поддерживалась, начиная с Service Pack1. Чтобы включить перечисление на основе входа в систему в Windows Server 2003 SP1 (или более поздней версии), вам необходимо загрузить и установить пакет _http: //www.microsoft.com/en-us/download/details.aspx?Id = 17510 Во время установки процесса, вам необходимо указать, хотите ли вы автоматически включать ABE для всех общих папок на сервере, или настройка будет выполняться в индивидуальном порядке. Если выбран второй элемент, после завершения установки пакета в свойствах общей папки появится новая вкладка «Перечисление на основе входа.
Чтобы включить ABE для определенной папки, включите параметр Включить перечисление на основе доступа для этой общей папки в ее свойствах.
Также обратите внимание, что перечисление на основе доступа на основе DFS поддерживается в Windows 2003, но может быть настроено только из командной строки с помощью утилиты cacls.
Управление ABE из командной строки
Настройками перечисления на основе входа в систему можно управлять из командной строки с помощью служебной программы Abecmd.exe. Эта утилита включена в перечисление на основе входа в систему для Windows Server 2003 SP1 (ссылка выше).
Утилита Abecmd.exe позволяет включить ABE для всех каталогов одновременно или лично. Следующая команда включит перечисление на основе доступа сразу для всех шаров:
abecmd /enable /all
Или для конкретной папки (например, шаров под названием Docs):
abecmd /enable Docs
Управление Access Based Enumeration с помощью PowerShell
Для управления настройками перечисления на основе доступа для определенных папок вы можете использовать модуль SMBShare PowerShell (установлен по умолчанию в Windows 10 / 8.1 и Windows Server 2016/2012 R2). Покажем свойства конкретной сетевой папки:
Get-SmbShare Install|fl *
Обратите внимание на значение атрибута FolderEnumerationMode. В нашем случае это значение Unrestricted. Это означает, что ABE отключен для этой папки.
Вы можете проверить статус ABE для всех сетевых папок на сервере:
Get-SmbShare | Select-Object Name,FolderEnumerationMode
Чтобы включить ABE для папки, запустите:
Get-SmbShare Install | Set-SmbShare -FolderEnumerationMode AccessBased
вы можете включить перечисление на основе доступа для всех опубликованных сетевых папок (включая административные общие ресурсы 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
Многие пользователи, особенно в домашних сетях, также хотели бы воспользоваться преимуществами функции перечисления на основе входа в систему. Проблема в том, что клиентские операционные системы Microsoft не имеют как графического интерфейса, так и интерфейса управления «Перечисление на основе входа в систему» в виде командной строки».
В Windows 10 (Server 2016) и Windows 8.1 (Server 2012R2) вы можете использовать PowerShell для управления перечислением на основе входа в систему (см. Предыдущий раздел). В предыдущих версиях Windows вам нужно было установить последнюю версию PowerShell (> = 5.0) или использовать служебную программу abecmd.exe из пакета Windows Server 2003, которая также отлично работает в клиентских операционных системах. Поскольку пакет перечисления на основе входа в Windows Server 2003 не установлен в Windows 10 / 8.1 / 7, вам необходимо сначала установить его в Windows Server 2003, а затем скопировать его из каталога C: windows system32 в тот же каталог, что и клиент. Впоследствии ABE можно включить с помощью сценария командной строки, описанного выше.
Примечание. В корпоративной среде ABE хорошо работает с папками DFS, скрывая «ненужные» папки от пользователя и обеспечивая более удобную древовидную структуру общих папок. Вы можете включить ABE в пространстве имен DFS с помощью консоли управления DFS или утилиты dfsutil.exe:
dfsutil property abde enable \<namespace root>
Кроме того, вы можете включить ABE на компьютерах домена AD с помощью групповой политики. Для этого воспользуйтесь GPP в разделе: Конфигурация компьютера -> Настройки -> Настройки Windows -> Сетевые ресурсы).
Как видите, в свойствах сетевой папки есть параметр «Перечисление на основе доступа». Если вы измените значение на «Включить», режим ABE будет включен для всех общих папок, созданных с помощью этого объекта групповой политики.
Источник изображения: winitpro.ru
- Remove From My Forums
-
Question
-
In an isolated ( with not AD) Computing LAB I have enabled only the DHCP service on a windows server 2016 standard edition. I have shared 2 folders one visible to everyone and for the second I have enabled the option «Enable access-base enumeration»
with sharing and permissions only to the Administrator.Unfortunately the users can see both folders and I couldn’t figure out why it is happening.
Any help would be greatly appreciated.
Thanks
All replies
-
Hi Refer this,
https://social.technet.microsoft.com/Forums/en-US/b207cf67-d24b-4a01-b7f0-adb652681f3d/access-based-enumeration-enabled-but-not-hiding-folders?forum=winserverfiles
-
Hi epulone,
Please do check the user/groups with no permission for the share folder (even no read permission)
Best Regards,
Mary
Please remember to mark the replies as answers if they help.
If you have feedback for TechNet Subscriber Support, contact
tnmff@microsoft.com. -
Hi Refer this,
https://social.technet.microsoft.com/Forums/en-US/b207cf67-d24b-4a01-b7f0-adb652681f3d/access-based-enumeration-enabled-but-not-hiding-folders?forum=winserverfiles
I have restart the server with not result….
-
I have checked the permission on the «invisible» sharing folder and I have noticed the Administrator has not the full permission as in permissions tab. Please refer to the picture below.
I have also noticed in share tab is present «everyone» with read only. I am not sure if everyone should be there as the sharing SMB wizard put it there and maybe for this reason the folder is visible to veryone. Should I heve to replace it with
Administrator?Thanks
-
Hi epulone,
>I have also noticed in share tab is present «everyone» with read only
You could also limit this, everyone with no permission for both share and security permission. After that, make the use account log off and log on again. And check if it could works now.
Best Regards,
Mary
Please remember to mark the replies as answers if they help.
If you have feedback for TechNet Subscriber Support, contact
tnmff@microsoft.com.-
Proposed as answer by
Tuesday, February 13, 2018 7:49 AM
-
Proposed as answer by
-
Hi,
Just checking in to see if the information provided was helpful. Please let us know if you would like further assistance.
Best Regards,
Mary
Please remember to mark the replies as answers if they help.
If you have feedback for TechNet Subscriber Support, contact
tnmff@microsoft.com. -
Hi,
Could the above reply be of help? If yes, you may mark it as answer, if not, feel free to feed back
Best Regards,
Mary
Please remember to mark the replies as answers if they help.
If you have feedback for TechNet Subscriber Support, contact
tnmff@microsoft.com. -
Hi Mary,
sorry for my delay, I was doing different tests. Unfortunately it didn’t work.
I have created a new folder and in permission and Share (security setting) I have deleted everyone user and added just the administrator. I
have also enabled the option «Enable access-base enumeration»The user can see the «invisible» folder (if they try to access come out a permission error).
Another question: is there a way for me to access the invisible folder when a user is logged? Sometime
I need a file to save on the user account and instead to switch user will be easier for me if I could provide the administrator credential to access this folder.Thanks
Marco
-
Hi,
>I have created a new folder and in permission and Share (security setting) I have deleted everyone user and added just the administrator. I
have also enabled the option «Enable access-base enumeration»>>>>The user can see the «invisible» folder (if they try to access come out a permission error).
Please also test to create a new folder firstly. Then enable ABE before assign user permission.. Second delete the permission for everyone. Only assign permission to Administrator. And check if other normal user could still see the folder.
>>>>is there a way for me to access the invisible folder when a user is logged? Sometime I need a file to save on the user account and instead to switch user will be easier for me if I could provide the administrator credential to access
this folder.I’m afraid there’s no such build-in method to achieve this.
Appreciate your support and understanding.
Best Regards,
Mary
Please remember to mark the replies as answers if they help.
If you have feedback for TechNet Subscriber Support, contact
tnmff@microsoft.com.