Редактирование разрешения файлового сервера Windows с помощью PowerShell

Прочитано: 103 раз(а)


Несанкционированное изменение разрешений на общий файловый ресурс может заблокировать других пользователей. Узнайте, как автоматизировать отчет, показывающий разрешения на сервере, чтобы быстро находить эти проблемы.

Когда вам нужно найти виновника проблемы с правами доступа к файловому серверу Windows , попробуйте PowerShell, чтобы выступить в роли вашего детектива, чтобы раскрыть дело.

Если многие пользователи внезапно теряют доступ к папкам в общем файловом ресурсе, обычно это проблема с разрешениями файлового сервера Windows. Но может потребоваться некоторая работа, чтобы выяснить, кто внес несанкционированное изменение. Ручная проверка всего файлового сервера с большим количеством файлов и папок может быть утомительной задачей. С помощью PowerShell вы можете использовать автоматизацию для создания отчета об аудите, чтобы отслеживать папки с проблемами прав, которые вы затем можете решить.

Как работают разрешения на файловом сервере Windows

Хотя для систем Windows доступно несколько файловых систем , файловая система новой технологии (NTFS) сегодня используется наиболее широко.

Среди особенностей NTFS — возможность ограничивать доступ с помощью списков управления доступом ( ACL ), которые каталогизируют каждую запись управления доступом (ACE), содержащую информацию об учетной записи пользователя или группы и их правах доступа к объекту, например файлу или файлу. папка. В документации Microsoft часто используются синонимы Windows ACL и разрешений NTFS .

В зависимости от потребностей организации администратор настраивает разрешения NTFS для управления уровнем доступа к папке, от прав полного доступа до отсутствия доступа. Проблемы могут возникнуть, когда пользователь с более высоким уровнем доступа, например руководитель уровня C, изменяет разрешения для папки Windows Server, которые не позволяют пользователям с более низким уровнем доступа получить доступ к своим файлам в этой папке или подпапке под ней.

Прежде чем мы углубимся в то, как создать аудит разрешений файлового сервера Windows, вы должны понять два метода получения информации о доступе из папки. В этой статье основное внимание будет уделено PowerShell 7 ; однако, если не указано иное, команды будут работать так же в Windows PowerShell.

Несмотря на то, что мы используем PowerShell 7, который является кроссплатформенным, командлет Get-ACL доступен только в Windows.

Найдите разрешения файлового сервера Windows с помощью командлета Get-Acl.

Встроенный командлет Get-Acl получает дескриптор безопасности, хранящийся в объекте, которым в данном случае является папка в общем файловом ресурсе Windows. Дескриптор безопасности содержит информацию, такую ​​как владелец объекта и списки управления доступом, которые показывают пользователей и группы, которые могут получить доступ к папке. Следующая команда покажет права доступа к папке:

Get-Acl .\Marketing\

Вывод дает путь к папке, владельца папки и список доступа к папке.

Найдите разрешения файлового сервера Windows с помощью командлета Get-Acl.

Для получения дополнительных сведений, таких как весь список доступа, добавьте в команду свойство Access :

(Get-Acl .\Marketing\).Access

(Get-Acl .\Marketing\).Access
Командлет показывает, что все права доступа к папке являются явными; свойство IsInherited указывает, что разрешения не наследуются от родительской папки. Вывод также показывает, что администраторы, имеющие доступ к этому общему ресурсу, следовали правильному протоколу, добавляя пользователей в группы, а не непосредственно в папку.

Найдите разрешения файлового сервера Windows с помощью командлета Get-NTFSAccess.

Другой способ просмотра списков ACL папки — с помощью командлета Get-NTFSAccess в модуле NTFSSecurity. Синтаксис этого командлета аналогичен Get-Acl :

Get-NTFSAccess .\Marketing\

Этот командлет создает выходные данные, которые легче понять при оценке разрешений NTFS.

Командлет показывает, что все права доступа к папке являются явными; свойство IsInherited указывает, что разрешения не наследуются от родительской папки. Вывод также показывает, что администраторы, имеющие доступ к этому общему ресурсу, следовали правильному протоколу, добавляя пользователей в группы, а не непосредственно в папку. Найдите разрешения файлового сервера Windows с помощью командлета Get-NTFSAccess. Другой способ просмотра списков ACL папки — с помощью командлета Get-NTFSAccess в модуле NTFSSecurity. Синтаксис этого командлета аналогичен Get-Acl : Get-NTFSAccess .\Marketing\ Этот командлет создает выходные данные, которые легче понять при оценке разрешений NTFS.

В таблице показан атрибут IsInherited , определяющий папки с разрешениями, отличными от разрешений родительской папки.

Лучшая функция Get-NTFSAccess заключается в том, что он проверяет весь файловый ресурс с помощью одной строки PowerShell. Вам нужно всего несколько дополнительных строк кода, чтобы преобразовать его в презентабельный отчет.

Для начала давайте рассмотрим, как рекурсивно получить разрешения для папки с помощью Get-ChildItem, чтобы найти все папки, а затем передать вывод в Get-NTFSAccess :

Get-ChildItem-Directory-Recurse | Get-NTFSAccess

На большом файловом ресурсе создание вывода консоли может занять довольно много времени. Будьте готовы отменить его, нажав CTRL+C, или сначала протестируйте его в папке меньшего размера, чтобы убедиться, что он работает должным образом.

В таблице показан атрибут IsInherited , определяющий папки с разрешениями, отличными от разрешений родительской папки. Лучшая функция Get-NTFSAccess заключается в том, что он проверяет весь файловый ресурс с помощью одной строки PowerShell. Вам нужно всего несколько дополнительных строк кода, чтобы преобразовать его в презентабельный отчет. Для начала давайте рассмотрим, как рекурсивно получить разрешения для папки с помощью Get-ChildItem, чтобы найти все папки, а затем передать вывод в Get-NTFSAccess : Get-ChildItem-Directory-Recurse | Get-NTFSAccess На большом файловом ресурсе создание вывода консоли может занять довольно много времени. Будьте готовы отменить его, нажав CTRL+C, или сначала протестируйте его в папке меньшего размера, чтобы убедиться, что он работает должным образом.

На снимке экрана показаны первые несколько строк из тестовой среды. Все разрешения вложенной папки Events наследуются, а атрибут InheritedFrom ссылается на корневую папку Marketing . Однако это не находит разрешения, которые не унаследованы. Для этого используйте командлет Where-Object и ищите разрешения, которые не унаследованы, с помощью восклицательного знака, который является оператором Not:

Get-ChildItem-Directory-Recurse | Get-NTFSAccess | Где-Объект {!($_.IsInherited)}

Это также может занять много времени, поэтому будьте готовы подождать, если вы запустите его в папке с большим количеством файлов. В тестовой среде только одна папка имеет права, отличные от корневой папки.

На снимке экрана показаны первые несколько строк из тестовой среды. Все разрешения вложенной папки Events наследуются, а атрибут InheritedFrom ссылается на корневую папку Marketing . Однако это не находит разрешения, которые не унаследованы. Для этого используйте командлет Where-Object и ищите разрешения, которые не унаследованы, с помощью восклицательного знака, который является оператором Not: Get-ChildItem-Directory-Recurse | Get-NTFSAccess | Где-Объект {!($_.IsInherited)} Это также может занять много времени, поэтому будьте готовы подождать, если вы запустите его в папке с большим количеством файлов. В тестовой среде только одна папка имеет права, отличные от корневой папки.


Вывод показывает, что у пользователя по имени John Doe есть разрешения на доступ к папке «Файлы» , а другие унаследованные разрешения по-прежнему включены. Если бы пользователь отключил наследование для этой папки, отчет показал бы что-то другое.


Вывод показывает, что у пользователя по имени John Doe есть разрешения на доступ к папке «Файлы» , а другие унаследованные разрешения по-прежнему включены. Если бы пользователь отключил наследование для этой папки, отчет показал бы что-то другое.

Этот пользователь совершил несколько нестандартных действий на файловом ресурсе. Они отключили наследование и удалили группу администраторов общего доступа к файлам. Этому может быть логическое объяснение, но это сомнительное поведение.

Как отформатировать вывод разрешений общего доступа к файлам Windows в отчет

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

Есть два варианта: либо запустить команду PowerShell из одной строки, которая будет большой, либо присвоить предыдущий вывод переменной, а затем вывести переменную в электронную таблицу. Поскольку сбор всех разрешений для большого или сложного общего файлового ресурса может занять много времени, наилучшим способом является маршрут назначения переменных. Еще одно преимущество заключается в том, что вы можете проверить данные перед форматированием отчета о разрешениях файлового сервера Windows.

Как использовать модуль ImportExcel

Вы будете использовать командлет Export-Excel в модуле ImportExcel для создания файла Excel. Он работает как в Windows PowerShell, так и в PowerShell 7 . Если в вашей системе его нет, установите его с помощью следующей команды:

Install-Module ImportExcel

Следующий код PowerShell указывает предпочтительные параметры для Export-Excel , чтобы поместить данные в таблицу и автоматически изменить размер столбцов:

$notInherited = Get-ChildItem -Directory -Recurse | Get-NTFSAccess | Где-Объект {!($_.IsInherited)}
$ не унаследовано | Export-Excel C:\Path\To\Report.xlsx -TableName Permissions -AutoSize

На этом снимке экрана показан образец электронной таблицы, автоматически сгенерированной PowerShell.

Этот пользователь совершил несколько нестандартных действий на файловом ресурсе. Они отключили наследование и удалили группу администраторов общего доступа к файлам. Этому может быть логическое объяснение, но это сомнительное поведение. Как отформатировать вывод разрешений общего доступа к файлам Windows в отчет Теперь, когда мы смогли подготовить данные, мы можем перейти к представлению отчета, чтобы получить выходные данные в удобочитаемой форме , чтобы поделиться с лицом, принимающим решения в отделе. По моему опыту, отчет обычно направляется владельцам каждой общей папки и менеджеру по ИТ. Для простоты мы экспортируем отчет в виде электронной таблицы Excel. Есть два варианта: либо запустить команду PowerShell из одной строки, которая будет большой, либо присвоить предыдущий вывод переменной, а затем вывести переменную в электронную таблицу. Поскольку сбор всех разрешений для большого или сложного общего файлового ресурса может занять много времени, наилучшим способом является маршрут назначения переменных. Еще одно преимущество заключается в том, что вы можете проверить данные перед форматированием отчета о разрешениях файлового сервера Windows . Как использовать модуль ImportExcel Вы будете использовать командлет Export-Excel в модуле ImportExcel для создания файла Excel. Он работает как в Windows PowerShell, так и в PowerShell 7 . Если в вашей системе его нет, установите его с помощью следующей команды: Install-Module ImportExcel Следующий код PowerShell указывает предпочтительные параметры для Export-Excel , чтобы поместить данные в таблицу и автоматически изменить размер столбцов: $notInherited = Get-ChildItem -Directory -Recurse | Get-NTFSAccess | Где-Объект {!($_.IsInherited)} $ не унаследовано | Export-Excel C:\Path\To\Report.xlsx -TableName Permissions -AutoSize На этом снимке экрана показан образец электронной таблицы, автоматически сгенерированной PowerShell.

Как настроить отчет о разрешениях общего доступа к файлам Windows

Чтобы исключить свойства, вы используете Select-Object для внесения изменений в отчет. Замените предыдущую команду Export-Excel приведенной ниже:

$ не унаследовано | Select-Object-ExcludeProperty
AccountType, InheritanceEnabled, InheritedFrom, IsInherited | Экспорт-
Excel C:\temp\Report.xlsx -TableName Permissions -AutoSize


Когда вы отправляете отчет, напомните своей аудитории о необходимости фильтрации по столбцу FullName . Часто файловый сервер будет иметь несколько папок с вариациями общего термина, такого как Files , поэтому эта фильтрация будет поддерживать более упорядоченную сортировку папок.



Новости партнеров