Abe windows server 2003

Мне часто приходится слышать вполне логичный вопрос от своих слушателей:
«Почему Windows показывает пользователям ВСЕ файлы из общих папок, несмотря на то, что к большей их части у пользователя все равно нет доступа?»

Ответ на вопрос и способ решения проблемы описаны в этой статье. В процессе написания и тестирования открыл для себя много интересного.

Содержание
   Теория

   Практика
      ABE и Windows Server 2003 / R2
      ABE и Windows Server 2008 / R2
      ABE и Windows Vista, Windows 7
      ABE и DFS (Distributed File System)
      ABE и Group Policy
      В каких случаях ABE не работает?
   Выводы

Теория


Встроенный в Windows механизм отображения общих папок уходит своими корнями в дремучие времена клиентов DOS и сервера Microsoft LAN Manager. В то время и количество сетевых ресурсов было небольшим, и вычислительные возможности систем ограничены. Поэтому алгоритмы предоставления информации о сетевых ресурсах были предельно простыми и, по большому счету, они не изменились до сегодняшнего дня.

Упрощенно, последовательность обращения к файлу в «шареной папке» выглядит так:

  • клиент, обращаясь к серверу LAN Manager (сервис LanmanServer в современных Windows), получает список всех общих папок, находящихся на нем;
  • пользователь выбирает название общей папки и пытается к ней подключиться;
  • сервер проверяет, есть ли у пользователя разрешение на выбранную общую папку и, при наличии разрешения, высылает клиенту список всех файлов и папок в ней находящихся;
  • пользователь выбирает интересующий его файл и пытается его открыть;
  • сервер проверяет, есть ли у пользователя права доступа к выбранному файлу и, если они есть, высылает пользователю сам файл.

Исходя из указанной выше последовательности видно, что сервер проверяет клиентские права доступа на файлы и папки уже ПОСЛЕ того, как пользователь получает список доступных ресурсов и выбирает один из них.

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

После активации ABE сервер начинает проверять права пользователя на ресурсы ДО ТОГО, как высылает клиенту список имеющихся в общей папке ресурсов. Соответственно, в список попадают только те файлы и папки, которые пользователь может открыть, и ничего лишнего пользователь больше не видит.

Пример того, как общая папка Docs с включенной опцией ABE выглядит со стороны клиента …

image

… а вот, что на самом деле лежит в папке Docs (после отключения ABE):

image

Разница существенная .

Практика


В русскоязычном интерфейсе 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 в индивидуальном режиме позже.

image

После установки пакета в свойствах всех папок на Windows Server 2003 появляется вкладка Access-based Enumeration. На ней можно включить/отключить ABE индивидуально для каждой общей папки или для всех имеющихся папок сразу.

Обратите внимание, что для всех созданных после установки ABE общих папок функция ABE будет ОТКЛЮЧЕНА и на новых папках ее нужно активировать принудительно.

Сделать это можно через вкладку Access-Based Enumeration или через утилиту командной строки abecmd.exe на всех папках сразу…

C:\>abecmd /enable /all
Access Based Enumeration enabled on all shares

… или на отдельных папках индивидуально:

C:\>abecmd /enable UsersData
Access Based Enumeration enabled on share «UsersData»

Выбирайте, как удобнее. Abecmd.exe может прекрасно работать, например, в составе пакетного файла, запускаемого на сервере ежедневно.

ABE и Windows Server 2008 / R2

В Windows Server 2008 функционал ABE встроен, но ведет себя различно, в зависимости от того, каким способом вы создаете общую папку. Кроме того, сам интерфейс настройки ABE «упрятан» довольно глубоко, совсем не так, как в Windows Server 2003.

Чтобы у вас не было сюрпризов в рабочей среде, разберем варианты работы с общими папками и настройки ABE более детально.

Вариант 1.
Управление через Windows Explorer

При создании общей папки через Windows Explorer (свойства папки —> вкладка Sharing) функционал ABE включается автоматически.

При этом интерфейс управления ABE в свойствах папки отсутствует в принципе.

Вариант 2.
Управление через консоль Share and Storage Management

Консоль Share and Storage Management показывает все общие папки нашего или удаленного сервера.

Если открыть свойства папки, то будет выведено такое окно:

image

При нажатии кнопки Advanced… мы, наконец, доберемся до ABE:

image

Из этой же консоли (Share and Storage Management ) можно создать и настроить новую общую папку с помощью мастера Provision Share. В настройках мастера на этапе SMB Settings мы можем выбрать Advanced… и получим ровно то же самое окно, что приведено выше. По умолчанию ABE включен.

Вариант 3.
Создание общей папки через команду NET SHARE

Команда NET SHARE часто применяется в сценариях запуска или пакетных файлах настройки сервера.

C:\>net share UsersData=D:\Users
UsersData was created successfully

Обратите внимание, что на общих папках, созданных этой утилитой, функционал ABE по умолчанию НЕ ВКЛЮЧЕН.

Вариант 4.
Создание папок с помощью сценариев, пакетов-установщиков и пр.

У вас еще остается возможность создания общих папок с помощью сценариев VBScript, PowerShell и др. Все варианты проверить сложно, поэтому я бы рекомендовал вам запустить свои сценарии в тестовой среде, и выяснить, будет ли включен ли ABE по умолчанию сразу после создания общей папки.

Также неизвестно, как поведет себя настройка ABE при создании общей папки программой-установщиком какого-нибудь приложения, требующего для своей работы наличия общей папки. Проверка выполняется только опытным путем в тестовой среде.

Вариант 5.
Управление ABE через утилиты командной строки

Как ни странно, ни одной утилиты командной строки для настройки ABE в Windows Server 2008 не предусмотрено. Пакет управления ABE для Windows Server 2003 на Windows Server 2008 ставиться отказывается.

Остается один вариант: скопировать утилиту abecmd.exe с 2003 сервера на 2008. Работает, проверено.

ABE и Windows Vista, Windows 7

Что интересно, клиентские системы Microsoft также прекрасно поддерживают ABE. Если у вас имеется много общих папок на клиентах, вполне разумно будет включить на них ABE. Как это сделать? Все так же, как и для Windows Server 2008, с помощью утилиты abecmd.exe, потому что никаких вообще средств настройки ABE на клиентах нет.

Поскольку пакет управления ABE для Windows Server 2003 на Windows Vista / 7  не устанавливается, сначала установите его на Windows Server 2003. Затем с сервера из папки %systemroot%\system32 скопируйте утилиту abecmd.exe на клиента уже в локальную папку %systemroot%\system32. 32-разрядная утилита abecmd.exe прекрасно работает на 64-разрядных системах.

Кстати, ABE на клиентах особенно актуален в домашней сети .

ABE и DFS (Distributed File System)

В Windows Server 2008 появилась поддержка ABE для пространств имен DFS.

В некоторых источниках и утилитах ABE для DFS может называться ABDE (Access Based Directory Enumeration). Я буду использовать термин ABE. Например, в рассматриваемой ниже утилите dfsutil.exe ключи abe и abde взаимозаменяемы.

Настройка ABE для ссылки пространства имен DFS не то же самое, что настройка ABE для общей папки, на которую эта ссылка ведет. Клиент получает от сервера DFS ссылку DFS еще до того, как делает попытку обращения к реальной общей папке.

По умолчанию, конечный пользователь видит всю иерархию ссылок пространства имен DFS. Соответственно, задача администратора — ограничить список DFS только доступными пользователю ссылками.

Для сложных доменных DFS важно правильно выполнить настройки ABE, чтобы они не терялись при перезапуске сервиса и реплицировались между серверами DFS.

Предварительные требования к настройке ABE на доменных DFS

Для  настройки ABE на доменных DFS (Domain-based DFS) необходимо проверить следующее:
1) домен должен работать в режиме Windows Server 2008 и выше;
2) лес должен работать в режиме Windows Server 2003 и выше;
3) сервер DFS должен быть Windows Server 2008 и выше:
4) само дерево DFS должно быть создано в режиме Windows Server 2008.

Для отдельно стоящих DFS (Stand-Alone DFS) перечисленные выше требования неактуальны.

Дальнейшая корректная настройка ABE для DFS состоит из двух этапов:
1) включение ABE на корне DFS и
2) настройка параметров видимости отдельных ссылок DFS.

Шаг 1. Включение ABE на пространстве имен (корне) DFS

По умолчанию функционал ABE НЕ ВКЛЮЧЕН на вновь создаваемом пространстве имен (корне) DFS.

В Window Server 2008 это можно сделать только через утилиту dfsutil.exe:

C:\>dfsutil property ABE enable \\DC01\Public
Done processing this command.C:\>dfsutil property ABE \\DC01\Public
Namespace \\DC01\Public: ABDE ENABLED
Done processing this command.

В Windows Server 2008 R2 появилась возможность настройки ABE на DFS через графический интерфейс консоли DFS Management.

image

Еще раз напомню, что для того, чтобы на вкладке Advanced в свойствах доменного DFS появилась опция Enable access-based enumeration for this namespace, требуется выполнение четырех предварительных требований (см. выше).

Подробное описание настроек DFS для Windows Server 2008 R2 тут.

Шаг 2. Настройка параметров видимости отдельных ссылок DFS

В Windows Server 2000/2003 все ссылки DFS наследуют разрешения NTFS от папки на сервере, в которой размещен корень DFS. Вполне возможно управлять видимостью отдельных ссылок через изменение настроек прав доступа пользователей к ним. Например, если у пользователя нет права Read на ссылку, сервер DFS и не высылает ее на клиента.

Windows Server 2008 по умолчанию использует тот же механизм. Однако, управление видимостью ссылок через NTFS имеет ряд ограничений. Например, сервер DFS не реплицирует NTFS разрешения, сбрасывает их после перезапуска и т.д.

Чтобы корректно сохранять режим видимости ссылок пространства имен DFS в Window Server 2008 требуется явно настроить ABE на ссылке через утилиту dfsutil.exe:

dfsutil property sd grant … и т.д.

В Windows Server 2008 R2 настройка чуть проще, поскольку есть графический интерфейс:

image

 

Подробное описание настроек DFS для Windows Server 2008 R2 тут.

ABE и Group Policy

В Windows Server 2008 существует возможность создания общих папок через расширение групповых политик Preferences. В свойствах создаваемой общей папки вы можете указать, будет ли включен ABE для такой папки.

image

Серверы Windows Server 2008 и Windows 7 понимают все настройки Preferences.

Чтобы Preferences заработали для Windows Server 2003 и Windows Vista, требуется установить клиентский модуль расширения групповых политик. Детальное руководство по установке модуля расширения описано в KB943729. Для Windows XP также можно установить клиентский модуль расширения групповых политик, но функционал ABE в ней, напомню, не поддерживается.

В каких случаях ABE не работает?

Обратите внимание на некоторые тонкости применения ABE.
Функционал Access-based Enumeration НЕ РАБОТАЕТ или не применим в перечисленных ниже случаях:

  • подключение к общим папкам на Windows XP, Windows Server 2000, Windows Server 2003 без Service Pack;
  • обращение к общей папке, минуя сервис LanmanServer;
  • получение списка общих папок с сервера (вы ВСЕГДА видите все общие папки на сервере; ABE контролирует список содержимого ВНУТРИ общей папки);
  • получение списка принтеров от сервера печати;
  • подключение общих дисков через сессии Remote Desktop;
  • обращение к общей папке членов группы Administrators (имеется в виду группа на сервере, конечно), т.е. АДМИНИСТРАТОРЫ ВИДЯТ ВСЕ.

Не забывайте про этот список :-)

Выводы


Функционал Access-based Enumeration был одной из наиболее ожидаемых функций файловых серверов Windows на протяжении многих лет. И, несмотря на то, что ABE появился вместе с Windows Server 2003 SP1, многие администраторы до сих пор не подозревают о его существовании.

Дополнительные сложности в применении функционала ABE вызывает непоследовательный интерфейс настройки в разных версиях Windows и различное поведение ABE по умолчанию (в зависимости от способа создания общей папки).

Technorati Теги: Access-based Enumeration,ABE,abecmd.exe,Windows Server 2003,Windows Server 2008,R2,Windows 7,DFS,Shared Folders,File Server,dfsutil.exe,Group Policy,Domain-based DFS,Stand-Alone DFS

Access-Based Enumeration (ABE, перечисление на основе доступа) это опция файлового сервера Windows, которая позволяет скрыть от пользователя файлы и папки, к которым у него доступа. Это позволяет скрыть структуру каталогов и имена папок и файлов в общей сетевой папке.

Содержание:

  • Как включить Access Based Enumeration в Windows Server
  • Управление Access Based Enumeration из командной строки (PowerShell)

Как включить Access Based Enumeration в Windows Server

Рассмотрим сценарий, когда на файловом сервере Windows есть некая общая сетевая папка с каталогами нескольких отделов. Все пользователи могут просматривать список директорий в этой папке (для этого на корневую папку даны права List folder или Traverse folder для группы Users). Но пользователи могут зайти только в каталоги, в списки доступа NTFS которых они добавлены.

Предположим, пользователь добавлен в группы доступа AD, назначенные на 2 каталога Public и Salary.

Группы безопасности AD добавлены в NTFS разрешения соответствующих подкаталогов в общей папки. Из ACL убраны разрешения, дающие доступ к подпапкам для групп Domain Users или Builtin\Users.

Чтобы включить ABE, откройте консоль Server Manager -> выберите роль File and Storage Services -> Shares. Отройте свойства общей папки и на вкладке Settings включите опцию Enable access-based enumeration.

Включить access based enumeration для сетевой папки на windows server через manager

Обновите содержимое общей папки у пользователя. Теперь пользователеь видит только два каталога, к которым ему предоставлен доступ. Оставшиеся папки скрыты от пользователя.

скрыть папки от пользователя через access based enumeration

Кроме того, вы можете включать ABE на компьютерах домена AD с помощью групповых политик. Для этого используется GPP в секции: Computer Configuration -> Preferences -> Windows Settings -> Network Shares).

Включить Access-Based Enumeration с помощью групповых политик

Если включить опцию Access-Based Enumeration, то для сетевой папки, опубликованной с помощью данной GPO, будет включен режим ABE.

Управление Access Based Enumeration из командной строки (PowerShell)

Можно включить ABE для сетевой папки из командной строки PowerShell.

Это в том числе позволяет включить Access-Based enumeration для сетевых папок, опубликованных на обычных рабочих станциях с десктопными версиями Windows 10 и 11.

Например, чтобы включить режим перечисления для общей папка с именем Docs, выполните команду:

Get-SmbShare Docs | Set-SmbShare -FolderEnumerationMode AccessBased

Вывести список опубликованных сетевых папок (включая общие административные папки Windows) и статус опции ABE:

Get-SmbShare | Select-Object Name,FolderEnumerationMode

Значение FolderEnumerationMode =
AccessBased
указывает, что Access Based-enumeration для них включен.

PowerShell включить FolderEnumerationMode AccessBased для сетевой папки

Отключить ABE для папки:

Get-SmbShare Docs | Set-SmbShare -FolderEnumerationMode Unrestricted

В Samba сервере на Linux для включения Access-based Enumeration нужно добавить в конфигурационный файл
smb.conf
опции:

hide unreadable = Yes
access based share enum = Yes

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

Другие особенности и ограничений Access-based Enumeration в Windows

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

По умолчанию ABE отключена в Windows Server 2003, но включена по умолчанию в Windows Server 2008 и более новых версиях. Вы можете изменить эту настройку по умолчанию при помощи инструмента командной строки Abecmd.exe. К сожалению, в этом инструменте отсутствуют некоторые важные возможности, поэтому я создал альтернативное решение

Перечисление на основе доступа Access-Based Enumeration (ABE) — функция, появившаяся в Windows Server 2003 с пакетом обновления SP1. Если вкратце, то она не позволяет пользователям видеть на общих ресурсах те файлы и папки, к которым у них нет доступа. Если ABE отключена, то пользователи смогут увидеть все файлы и папки, которые существуют на общем ресурсе. Но если они попытаются открыть какой-либо элемент, к которому у них нет разрешения на доступ, то получат сообщение «доступ запрещен». Если же ABE включена, то пользователь просто не увидит те файлы и папки, к которым у него нет разрешения на доступ.

.

Низвержение Abecmd.exe

Abecmd.exe является одним из компонентов пакета ABE для Windows Server 2003, доступного для загрузки по адресу www.microsoft.com/downloads/details.aspx?FamilyId=04A563D9-78D9-4342-A485-B030AC442084. Этот пакет включает официальное техническое руководство по использованию ABE, а также графический интерфейс пользователя ABE для Windows 2003 (в Windows 2008 и более поздние версии уже включена встроенная графическая утилита, которая является одним из компонентов консоли управления общими ресурсами и хранилищами).

С помощью Abecmd.exe можно легко включать или отключать ABE на общих ресурсах компьютера — от случая к случаю либо на постоянной основе. Однако, к сожалению, нельзя увидеть статус ABE одновременно для большого количества общих ресурсов компьютера. Я был несколько удивлен, что подобная функция не включена в этот инструмент командной строки. При наличии такой функции можно было бы легко управлять ABE на многочисленных общих ресурсах, поскольку стало бы возможным использование сценария для проверки статуса каждого общего ресурса и его изменения в случае необходимости.

Поэтому я создал решение, которое позволяет без труда управлять ABE на большом количестве общих ресурсов и даже на множестве компьютеров. Это решение состоит из трех компонентов.

  • ShareABE.exe. Данная утилита командной строки может определить, включено ли ABE, а также включить или отключить ABE на единичном общем ресурсе. В процессе обнаружения ABE она возвращает код завершения «1» в случае, если ABE включена, и «0», если отключена. Когда утилита используется для включения или отключения ABE, в случае успеха она возвращает код завершения «0». Возврат любого другого кода указывает на отказ. В случае отказа ShareABE.exe возвращает реальный код ошибки. Например, код ошибки 53 возвращается в случае, если не найден сетевой путь, 2310 — если указанный общий ресурс не существует, и 5 — если доступ запрещен. Для получения информации о коде ошибки можно воспользоваться командой Net Helpmsg.
  • Get-ABE.ps1 (листинг 1). Этот сценарий PowerShell использует ShareABE.exe для того, чтобы проверить, включено ли ABE для одного или более общих ресурсов на одном или более компьютерах.
  • Set-ABE.ps1 (листинг 2). Данный сценарий PowerShell использует ShareABE.exe для того, чтобы включить или отключить ABE для одного или более общих ресурсов на одном или более компьютерах.

Для того чтобы изменить состояние ABE, вы должны быть участником группы «Администраторы». Если вы изменяете состояние ABE для общего ресурса на локальном компьютере, то необходимо запустить PowerShell или Cmd.exe c повышенными правами пользователя. А для того чтобы изменить состояние ABE общего ресурса для удаленного компьютера, необходимо быть участником группы «Администраторы» на этом удаленном компьютере; в таком случае запуск с повышенными правами не имеет значения. Если вы не являетесь участником группы «Администраторы» на компьютере, на котором непосредственно размещен общий ресурс, то ShareABE.exe вернет код ошибки 5.

Решение работает на Server 2003 и более новых версиях и, в отличие от Abecmd.exe, замечательно функционирует на Windows 7. Обычно я использую решение на общих ресурсах с файловой системой NTFS. Если у вас возникнет желание использовать ABE на общих ресурсах с файловой системой DFS, обратитесь к статье «How to implement Windows Server 2003 Access-based Enumeration in a DFS environment» (support.microsoft.com/kb/907458) или «How to enable Access-based Enumeration for a Distributed File System (DFS) share in Windows Server 2008» (support.microsoft.com/kb/961658).

Для того чтобы использовать это решение, скопируйте файлы ShareABE.exe, Get-ABE.ps1 и Set-ABE.ps1 в папку, указанную в системной переменной Path (например, SystemRoot\system32). Для успешного запуска сценариев потребуется наличие PowerShell 2.0. При необходимости настройте политику сценариев PowerShell таким образом, чтобы был возможен запуск сценариев. Я рекомендую применять политику RemoteSigned. Если вы не знакомы с политиками PowerShell, прочтите статью «Running PowerShell Scripts Is as Easy as 1-2-3» (http://www.windowsitpro.com/article/windows-powershell/running-powershell-scripts-is-as-easy-as-1-2-3).

Утилита ShareABE.exe

ShareABE.exe — это, собственно, тот инструмент, благодаря которому работают наши сценарии. Также его можно использовать как автономную утилиту. Чтобы запустить его как автономную утилиту, откройте интерфейс командной строки Cmd.exe или PowerShell и выполните следующую команду:

ShareABE ComputerName ShareName
   [Действие]

где ComputerName — это имя компьютера, на котором размещен общий ресурс, ShareName — имя общего ресурса, а «Действие» — это либо слово enable (для включения ABE), либо disable (для его отключения). Если не указывать параметр «Действие», то ShareABE.exe просто отобразит, включено ли ABE на указанном общем ресурсе.

На экране 1 показано, как работает утилита ShareABE.exe. Первая команда отображает, что ABE отключено для указанного общего ресурса, а вторая команда включает ABE для этого ресурса. Третья команда аналогична первой, и с ее помощью мы можем убедиться, что ABE для интересующего нас общего ресурса действительно включилась.

Работа утилиты ShareABE.exe, запущенной как автономное приложение

Экран 1. Работа утилиты ShareABE.exe, запущенной как автономное приложение

Сценарий Get-ABE.ps1

Сценарий Get-ABE.ps1 превращает утилиту ShareABE.exe в инструмент, который может представить отчет о состоянии ABE для большого числа общих ресурсов на множестве компьютеров. Сценарий Get-ABE.ps1 имеет следующий синтаксис командной строки:

Get-ABE [-ComputerName String]
   [-ShareName String []]

Несмотря на то, что здесь эта команда переносится по строкам, в консоли PowerShell она набирается целиком в одну строку. То же самое правило действует и для других представленных здесь команд. Оба параметра сценария — ComputerName и -ShareName — являются необязательными. Если не указывать -ComputerName, то Get-ABE.ps1 будет считать, что вы хотите проверить состояние общих папок только на локальном компьютере. А если не указать -ShareName, то для Get-ABE.ps1 это будет сигналом, что вы хотите проверить все общие ресурсы. Имя общего ресурса также может содержать групповые символы. Ниже приводятся примеры команд.

Get-ABE app1

Эта команда отображает отчет о состоянии (статусе) ABE всех общих ресурсов сервера с именем app1. Обратите внимание, что при вводе этой и последующих команд указание имени параметра (-ComputerName и -ShareName) является необязательным.

Get-ABE app1, app2, app3 Scan*

Эта команда отображает отчет о состоянии ABE только для тех общих ресурсов, имена которых начинаются со слова Scan на серверах app1, app2 и app3.

Get-ABE.ps1 также допускает конвейерный (потоковый) ввод для параметра -ComputerName. Например, команда

Get-Content Servers.txt |
   Get-ABE -Sharename Shares, Users

отображает отчет о состоянии (статусе) ABE общих ресурсов с именами Shares и Users для каждого из серверов, перечисленных в файле Servers.txt (в указанном файле имя каждого сервера должно быть введено с новой строки).

Сценарий Get-ABE.ps1 отображает результаты в виде таблицы, столбцы которой содержат следующую информацию: имя компьютера, имя общего ресурса, локальный путь общего ресурса и логическую величину (принимающую значение True или False), указывающую, включено ли ABE для указанного общего ресурса. На экране 2 показан пример такой таблицы.

Выполнение сценария Get-ABE.ps1

Экран 2. Выполнение сценария Get-ABE.ps1

Сценарий Set-ABE.ps1

Сценарий Set-ABE.ps1 во многом подобен сценарию Get-ABE.ps1 с той лишь разницей, что он устанавливает состояние ABE для общих ресурсов, а не отображает его. Ниже представлен его синтаксис командной строки:

Set-ABE [-ComputerName String []]
   -ShareName String [] [-Enable]
   [-Disable] [-WhatIf] [-Confirm]

Параметр -ComputerName является необязательным. Если его не указать, то сценарий Set-ABE.ps1 будет считать, что речь идет о локальном компьютере. Параметр -ShareName является обязательным и допускает использование групповых символов. Так, например, если нужно включить или отключить ABE для всех общих ресурсов, можно использовать звездочку (*), которой соответствует любое имя общего ресурса. Также в команду необходимо включить параметр -Enable или -Disable (но не оба сразу). Для тестовых целей сценарий Set-ABE.ps1 также поддерживает параметры -WhatIf и -Confirm. Ниже приведены примеры команд.

Set-ABE apps1 * -Enable

Эта команда включает ABE для всех общих ресурсов на apps1. В этом примере не используются имена параметров -ComputerName и -ShareName, поскольку оба параметра располагаются в командной строке на местах, определенных синтаксисом команды.

Set-ABE apps1, apps2, apps3 Users -Disable

Эта команда отключает ABE для общего ресурса Users на серверах apps1, apps2 и apps3.

Подобно сценарию Get-ABE.ps1, сценарий Set-ABE.ps1 также поддерживает конвейерный ввод для имен компьютеров. Например, команда

Get-Content Servers.txt |
   Set-ABE -ShareName Dep* -Enable

включает ABE для тех общих ресурсов, имена которых начинаются с Dep, на каждом из серверов, перечисленных в файле Servers.txt (в указанном файле имя каждого сервера должно быть введено с новой строки). На экране 3 показано, как работает сценарий Set-ABE.ps1, причем в сочетании с параметром -Confirm.

Работа сценария Set-ABE.ps1

Экран 3. Работа сценария Set-ABE.ps1

Возьмите управление ABE в свои руки

ABE — это весьма полезный инструмент в арсенале системного администратора, но ему явно не хватает гибкого, поддерживающего сценарии интерфейса администрирования. Утилита ShareABE.exe и сценарии Get-ABE.ps1 и Set-ABE.ps1 исправляют этот недостаток и дают администратору возможность обнаруживать, включать и отключать ABE на множественных общих ресурсах и большом количестве компьютеров одновременно.

Листинг 1. Сценарий Get-ABE.ps1

# Written by Bill Stewart (bstewart@iname.com)
# PowerShell script to retrieve status of access-based enumeration (ABE).
# Requires ShareABE.exe to be in the path.

#requires -version 2

<#
.SYNOPSIS
Returns the status of access-based enumeration (ABE) for shares.

.DESCRIPTION
Returns the status of access-based enumeration (ABE) for one or more shares on one or more computers. Requires ShareABE.exe to be in the path.

.PARAMETER ComputerName
One or more computer names.

.PARAMETER ShareName
One or more share names. This parameter supports wildcards. If you omit this parameter, its default value is '*' (all shares).

.INPUTS
System.String.

.OUTPUTS
PSObjects containing the computer name, share name, path, and ABE status.

.LINK
http://go.microsoft.com/fwlink/?LinkID=100745

.EXAMPLE
C:\> Get-ABE server1 Apps
This command outputs the ABE status for the Apps share on server1.

.EXAMPLE
C:\> Get-ABE server2
This command outputs the ABE status for all shares on server2.

.EXAMPLE
C:\> Get-Content Servers.txt | Get-ABE -ShareName *app*
This command outputs the ABE status for shares matching the pattern '*app*' for all of the servers listed in the file Servers.txt.
#>
[CmdletBinding()]
param(
  [parameter(ValueFromPipeline=$TRUE)]
    [String[]] $ComputerName=$ENV:COMPUTERNAME,
    [String[]] $ShareName="*"
)

begin {
  # Throw an error if we can't find ShareABE.exe.
  $ShareABE = (get-command "ShareABE.exe" -erroraction SilentlyContinue).Definition
  if (-not $ShareABE) {
    throw "Can't find ShareABE.exe."
  }

  # Returns a PSObject containing the ABE information for a share. The $share
  # parameter is a WMI Win32_Share object instance.
  function get-shareABE($share) {
    & $ShareABE $share.__SERVER $share.Name > $NULL
    ""  | select-object `
      @{Name="Computer"; Expression={$share.__SERVER}},
      @{Name="Share";    Expression={$share.Name}},
      @{Name="Path";     Expression={$share.Path}},
      @{Name="ABE";      Expression={if ($LASTEXITCODE -le 1) {$LASTEXITCODE -eq 1} else {$LASTEXITCODE}}}
  }
}


process {
  foreach ($computer in $ComputerName) {
    get-wmiobject Win32_Share -computer $computer -filter "Type=0" | sort-object Name | foreach-object {
      foreach ($share in $ShareName) {
        if ($_.Name -like $share) {
          get-shareABE $_
        }
      }
    }
  }
}

end {
}

Листинг 2. Сценарий Set-ABE.ps1

# Written by Bill Stewart (bstewart@iname.com)
# PowerShell script to enable or disable access-based enumeration (ABE).
# Requires ShareABE.exe to be in the path.

#requires -version 2

<#
.SYNOPSIS
Enables or disables access-based enumeration (ABE) for shares.

.DESCRIPTION
Enables or disables access-based enumeration (ABE) for one or more shares on
one or more computers. Requires ShareABE.exe to be in the path.

.PARAMETER ComputerName
One or more computer names.

.PARAMETER ShareName
One or more share names. This parameter supports wildcards. Use '*' to specify
all shares.

.PARAMETER Enable
Enables access-based enumeration (ABE). You must specify either -Enable or
-Disable, but not both.

.PARAMETER Disable
Disables access-based enumeration (ABE).  You must specify either -Enable or
-Disable, but not both.

.INPUTS
System.String.

.OUTPUTS
PSObjects containing the computer name, share name, path, and ABE status.

.LINK
http://go.microsoft.com/fwlink/?LinkID=100745

.EXAMPLE
C:\> Set-ABE server1 Apps -Enable
This command enables access-based enumeration for the Apps share on server1.

.EXAMPLE
C:\> Set-ABE server2 * -Disable -Confirm
This command disables access-based enumeration for all shares on server2,
prompting for confirmation before modifying each share.

.EXAMPLE
C:\> Get-Content Servers.txt | Set-ABE -ShareName *app* -Enable
This command enables access-based enumeration for shares matching the pattern
'*app*' for all of the servers listed in the file Servers.txt.
#>
[CmdletBinding(SupportsShouldProcess=$TRUE)]
param(
  [parameter(ValueFromPipeline=$TRUE)]
    [String[]] $ComputerName=$ENV:COMPUTERNAME,
  [parameter(Mandatory=$TRUE)]
    [String[]] $ShareName,
    [Switch] $Enable,
    [Switch] $Disable
)

begin {
  # You must specify either -Enable or -Disable, but not both.
  if (-not ($Enable -xor $Disable)) {
    throw "You must specify either -Enable or -Disable."
  }

  # Throw an error if we can't find ShareABE.exe.
  $ShareABE = (get-command "ShareABE.exe" -erroraction SilentlyContinue).Definition
  if (-not $ShareABE) {
    throw "Can't find ShareABE.exe."
  }

  if ($Enable) { $NewABEState = "Enable" } else { $NewABEState = "Disable" }

  # Enables or disables ABE for a share. The $share parameter is a WMI
  # Win32_Share object instance, and the $newState parameter is the string
  # "Enable" or "Disable".
  function set-shareABE($share, $newState) {
    & $ShareABE $share.__SERVER $share.Name $newState > $NULL
    ""  | select-object `
      @{Name="Computer"; Expression={$share.__SERVER}},
      @{Name="Share";    Expression={$share.Name}},
      @{Name="Path";     Expression={$share.Path}},
      @{Name="ABE";      Expression={if ($LASTEXITCODE -eq 0) {$newState} else {$LASTEXITCODE}}}
  }
}

process {
  foreach ($computer in $ComputerName) {
    get-wmiobject Win32_Share -computer $computer -filter "Type=0" | sort-object Name | foreach-object {
      foreach ($share in $ShareName) {
        if ($_.Name -like $share) {
          if ($PSCMDLET.ShouldProcess("\\$($_.__SERVER)\$($_.Name)", "$NewABEState ABE")) {
            set-shareABE $_ $NewABEState
          }
        }
      }
    }
  }
}
end {
}

Билл Стюарт (bill.stewart@frenchmortuary.com) — системный и сетевой администратор компании French Mortuary, Нью-Мехико

Технология Windows Server 2003 Access-based Enumeration (ABE) позволяет скрывать папки в сетевом окружении для тех, у кого к ним нет доступа. До появления этой технологии в Windows 2003 SP1 такая возможность была реализована только в Novell NetWare.

Новая технология позволяет:

— Повысить уровень защиты папок. Пользователь может увидеть только те ресурсы, на которые ему предоставлены права. Ведь зачастую название документа несет в себе очень важную информацию.
— Обеспечить безболезненную миграцию сетевых ресурсов.
— Упрощает поиск необходимых документов, поскольку сотрудник видит только доступные для него документы.

ABE отображает папки в сетевом окружении, основываясь на индивидуальных правах доступа пользователя к этим папкам (ACL). Установка ABE на сервер проходит быстро и не представляет никаких трудностей. Во время процесса инсталляции можно указать способ интеграции технологии в ОС : для всех папок, или конкретные папки будут указаны позже.

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

Разработчик:     Microsoft
Статус программы:     Бесплатная
Интерфейс:     Английский
Версия:      
Размер файла:     430 кб
Система:     Windows 2003 SP1 и выше

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

Немного поговорим о теории и на пальцах разберём как происходит общение между клиентом и сервером в вопросе предоставления файловых данных:
— клиент обращается к серверу с запросом на доступ к определённой директории
— сервер проверяет — есть ли у пользователя разрешение на доступ к этой директории
— если у пользователя доступ к директории (чтение/листинг) разрешён — пользователи видит директории/файлы в этой директории
— по той же схеме пользователь запрашивает доступ к другим директориям/файлам
т.е. можно сделать вывод что проверка прав доступа производится после показа всего содержимого, что не всегда есть хорошо. Расскажу вот абстрактную историю из жизненного опыта: приходит на работу жена ген.директора и пытается совать нос во все дела компании, и естественно хочет получить доступ ко всем данным компании, хранящимся на файловом сервере. С одной стороны — доступ ей давать никто особо и не хочет, по тому что не надо ей туда лезть (ну как максимум — доступ на чтение, но это крайний случай), с другой стороны — жена генерального директора это вам не рядовой менеджер организации и просто так запрос не отклонишь. Но ведь она не в курсе — а что именно хранится на файловом сервер и какая структура данных там существует. Именно в такой ситуации нам и поможет ABE, она позволяет проверять права доступа до обращения к директориям/файлам в директории. Т.е. пользователь заходит в корневую директорию, допустим share и видит всего пару директорий, когда на самом деле все остальные сотрудники (ну кому это положено) видят полную структуру директорий и файлов. Соответственно не возникает вопросов что нет доступа в директорию Х и выдайте мне срочно-срочно права на полный доступ. Это один из тех примеров, когда IT подразделению приходится решать не совсем их проблемы, но чем можно очень сильно облегчить собственную жизнь. Но в принципе эта технология позволяет предотвратить несанкционированные действия в сторону файлового сервера. Ведь многие из вас ни раз встречали среди офисных сотрудников «мини-хакеров», как я люблю их называть. Которые любят позапускать сетевые сканеры, поискать дыры на ваших серверах и вообще — занимаются не работой, а членовредительством.
Настройка в Windows (у меня в данном случае свеженький 2012) достаточно проста:
Включаем данную функцию:

Screenshot 2013-04-16 21.25.54

Ну а дальше остаётся лишь настроить права на директории и всё. Директории, в которые у пользователя доступ есть — видны ему, а в которые доступ запрещён или не выдан — не видны.

Screenshot 2013-04-16 22.36.29

Ну а клиент соответственно видит только то что ему положено

Screenshot 2013-04-16 22.37.40

Настройка в linux ещё более проста, она сводится к включению ABE в конфиге samba:
access based share enum = yes
и выдать так же правильные права на директории.

Что хотелось бы сказать в конце:
Как можно уже логически догадаться — чем больше директорий в корневой директории — тем медленее будет осуществляться доступ к данным. Продумывайте более иерархичной. Microsoft заявляет, что при наличии 15000 файлов осуществляется падение скорости открытия папки на 1-3 секунды. ABE отлично сочетается с DFS, для более удобного администрирования сетевых ресурсов. Облегчайте жизнь себе и своим последователям, делайте администрирование простым, быстрым и удобным.

Это пожалуй первое упоминание Windows Server в моём блоге, но это не значит что я как то игнорирую эту ОС в своей работе, или не знаю её, или она мне на столько не нравится. Да, может быть это конечно в какой то мере и так, но с выходом Windows Server 2012 моё мнение несколько изменилось в лучшую сторону, эта система стала для меня более удобной (ну разве что мне не хватает кнопки пуск и меня бесит Метро-интерфейс) и интересной в плане работы с ней. Так что, возможно, теперь упоминания о ней будут чаще проскакивать в моём блоге 🙂

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Как начать запись экрана на windows 10 pro
  • Как на windows 10 сделать восстановление системы с точки восстановления
  • Как включить таймер на выключение компьютера на windows 10
  • Как открыть far manager в windows 10
  • Windows киоск что это