По умолчанию, когда пользователь открывает некую общую сетевую папку на сервере (предполагаем, что у пользователя есть право на доступ к сетевой шаре), 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. При высокой загрузке сервера, скорость открытия папок на файловом сервере может значительно снижаться.
3 комментария
Есть глубоко_вложенная папка \\fs\departament\otdel\papka-1\docs\info
Как правильно организовать доступ для юзера только к этой папке (info) ? Технология АВЕ включена.
Ищу «автоматический» вариант
т.е. нужно что б заходя на \\fs (он мапится всем ) юзер мог спокойно проломится в info не видя ничего другого…
Такое реально?
Только по прямой ссылке на папку info. Но прокликать вручную до нее он не сможет, так как ABE будет скрывать от него промежуточные папки, в которые у юзера нет доступа.
Вариантов, собсвтенно немного, либо перемещать папки info в корень вашей сетевой папки на сервере fs, либо поместить туда же ярлык на нее с правильными NTFS правами, чтобы у нужной группы юзеров были права на чтение ярлыка.