Технология 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, а все недоступные ресурсы просто не отображаются (скрываются).
Т.е. пользователь одного отдела (например, склада) в одном и том же сетевом каталоге (\\filesrv1\docs) будет видеть один список папок и файлов. Как вы видите, у пользователя отображаются только две папки: 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). Выведем свойства конкретной сетевой папки:
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:\windows\system32 в такой же каталог на клиенте. После этого включить ABE можно по сценарию с командной строкой, описанному выше.
dfsutil property abde enable \\<namespace root>
Кроме того, вы можете включать ABE на компьютерах домена AD с помощью групповых политик. Для этого используется GPP в секции: Computer Configuration -> Preferences -> Windows Settings -> Network Shares).
Как вы видите, в свойствах сетевой папки есть опция Access-Based Enumeration, если изменить значение на Enable, для всех общих папок, созданных с помощью данной GPO будет включен режим ABE.
Спасибо, помогло. Не знал, что в 2012 включается по-умолчанию этот функционал. Никак не мог понять, как мне вернуть отображение папок без прав доступа.
спасибо за материал. Добавление символа $ к имени шары скрывает ее даже от тех кому в нее доступ разрешен. Нельзя ли сделать так чтобы основная шара была видна только тем, кому разрешен в нее доступ?
Насколько мне известно, нет. Либо пользователи ходят на шару с $, но не видят ее в окружении, либо в видимую шару в которой сами каталоги скрыты с помощью ABE.
Чтобы не было лишних вопросов, назовите шару нейтрально, типа \\server1\exchange
Здравствуйте, у меня терминальный сервер win 2012 r2.
Сделал доступ в папки некоторым сотрудникам, и включил данную функцию, но у пользователей у которых нет доступа, сами папки видны, но при клике естественно их не пускает.
Я правильно понял что данный функционал работает, не только на домене контр. но и для терминальных пользователей?
Как я понял, в вашем случае терминальные пользователи обращаются к папкам на локальном диске, а не к шаре по UNC пути.
В этом случае Access-based Enumeration работать не будет, т.к. служба сервера фильтрует обращения только к сетевой папке (unc путь в формате \\server1\share).
Есть глубоко_вложенная папка \\fs\departament\otdel\papka-1\docs\info
Как правильно организовать доступ для юзера только к этой папке (info) ? Технология АВЕ включена.
Ищу «автоматический» вариант
т.е. нужно что б заходя на \\fs (он мапится всем ) юзер мог спокойно проломится в info не видя ничего другого…
Такое реально?
Так не получится. Придется выносить info в отдельную шару верхнего уровня или создать в корне \\fs\departament\ ярлык на папку \\fs\departament\otdel\papka-1\docs\info. На ярлык и внутренюю папку нужно дать права нужной группе пользователей
К сожалению, с сайта MS удалили/переместили утилиту для включения опции ABE для Windows Server 2003. Случаем ни у кого не завалялась данная утилита?
Апликуха андроид прекрасно «видит» все папки, даже с $
Мдааа… как так получилось, что samba на linux и bsd-системах умеет любую папку скрыть просто указывая в конфиге browsable=no, а «родная» для smb-протокола система — нет? Мне вот надо, например, чтобы шара //fileserver/test была скрытой и сетевой путь к ней был именно //fileserver/test, а не //fileserver/test$
Здравствуйте. Как настроить безопасность или доступ к папкам в шаре чтобы они отображались при включенном в шаре доступом на основе перечисления. Vindows Server 2016. Общая папка с подключенным доступом на основе перечисления отображается на других компьютерах. Все папки находящиеся в шаре тоже видны. Делаешь доступ к папке пользователя компьютера, в компьютере данного пользователя в шаре папка пропадает. Короче работает с точностью наоборот.
Вы, вероятно, не поняли что на папках в шаре нужно настраивать NTFS разрешения. Если на папку стоит ntfs право на чтение/read для Users или everyone, она будет отображаться у всех пользователей. Если изменить права на папку в шаре, например оставить в ntfs правах только группу domain admin, значит эта папка в шаре будет отображаться только для пользователей с этой группой безопасности