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

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


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

Когда вам нужно найти виновника проблемы с правами доступа к файловому серверу 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 , поэтому эта фильтрация будет поддерживать более упорядоченную сортировку папок.



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