- File and Directory Access Rights Constants
- Настройка разрешений файловой системы для доступа к компоненту ядра СУБД Configure File System Permissions for Database Engine Access
- Предоставление разрешение на доступ к файловой системе идентификатору безопасности службы To Grant File System Permission to the Per-service SID
- Управление NTFS разрешениями на папки и файлы из PowerShell
- Встроенные командлеты для управления ACL в NTFS: Get-Acl и Set-Acl
- Используем модуль NTFSSecurity для управления разрешениями из PowerShell
- Проверка эффективных NTFS разрешений на объекты из PowerShell
File and Directory Access Rights Constants
WMI classes that represent files or directories, such as Win32_CodecFile or CIM_DataFile, contain an AccessMask property. This property contains bit settings that specify the access rights a user or group must have for specific access or operations on the file. For more information, see File Security and Access Rights and Changing Access Security on Securable Objects.
The file or directory classes which contain an AccessMask property include:
The following list lists the values for file and directory access rights in the AccessMask property. This property is a bitmap.
FILE_READ_DATA
Grants the right to read data from the file.
FILE_LIST_DIRECTORY
Grants the right to read data from the file. For a directory, this value grants the right to list the contents of the directory.
FILE_WRITE_DATA
Grants the right to write data to the file.
FILE_ADD_FILE
Grants the right to write data to the file. For a directory, this value grants the right to create a file in the directory.
FILE_APPEND_DATA
Grants the right to append data to the file. For a directory, this value grants the right to create a subdirectory.
FILE_ADD_SUBDIRECTORY
Grants the right to append data to the file. For a directory, this value grants the right to create a subdirectory.
FILE_READ_EA
Grants the right to read extended attributes.
FILE_WRITE_EA
Grants the right to write extended attributes.
FILE_EXECUTE
Grants the right to execute a file.
FILE_TRAVERSE
Grants the right to execute a file. For a directory, the directory can be traversed.
FILE_DELETE_CHILD
Grants the right to delete a directory and all the files it contains (its children), even if the files are read-only.
FILE_READ_ATTRIBUTES
Grants the right to read file attributes.
FILE_WRITE_ATTRIBUTES
Grants the right to change file attributes.
DELETE
Grants the right to delete the object.
READ_CONTROL
Grants the right to read the information in the security descriptor for the object, not including the information in the SACL.
WRITE_DAC
Grants the right to modify the DACL in the object security descriptor for the object.
WRITE_OWNER
Grants the right to change the owner in the security descriptor for the object.
SYNCHRONIZE
Grants the right to use the object for synchronization. This enables a process to wait until the object is in signaled state. Some object types do not support this access right.
Настройка разрешений файловой системы для доступа к компоненту ядра СУБД Configure File System Permissions for Database Engine Access
Применимо к: Applies to: SQL Server SQL Server (все поддерживаемые версии) SQL Server SQL Server (all supported versions) Применимо к: Applies to: SQL Server SQL Server (все поддерживаемые версии) SQL Server SQL Server (all supported versions)
В этом разделе описана процедура предоставления компоненту Компонент SQL Server Database Engine SQL Server Database Engine доступа к расположению в файловой системе, где хранятся файлы базы данных. This topic describes how to grant the Компонент SQL Server Database Engine SQL Server Database Engine file system access to the location where database files are stored. Служба компонента Компонент Database Engine Database Engine должна иметь разрешение файловой системы Windows для доступа к папке, в которой хранятся файлы базы данных. The Компонент Database Engine Database Engine service must have permission of the Windows file system to access the file folder where database files are stored. Разрешение на расположение по умолчанию задается во время установки. Permission to the default location is configured during setup. Если файла базы данных размещаются в другом расположении, то необходимо выполнить эти действия, чтобы предоставить компоненту Компонент Database Engine Database Engine разрешение полного доступа к этому расположению. If you place your database files in a different location, you might need to follow these steps to grant the Компонент Database Engine Database Engine the full control permission to that location.
Начиная с версии SQL Server 2012 (11.x) SQL Server 2012 (11.x) , разрешения назначаются идентификатору безопасности каждой из служб. Beginning with SQL Server 2012 (11.x) SQL Server 2012 (11.x) permissions are assigned to the per-service SID for each of its services. Эта система позволяет обеспечить изоляцию и всестороннюю защиту службы. This system helps provide service isolation and defense in depth. Идентификатор безопасности службы создается на основе имени службы и является уникальным для каждой службы. The per-service SID is derived from the service name and is unique to each service. В разделе Настройка учетных записей и разрешений службы Windows описывается идентификатор безопасности каждой службы доступа, а имена перечисляются в разделе Права и привилегии Windows. The topic Configure Windows Service Accounts and Permissions describes the per-service SID and provides the names in the section Windows Privileges and Rights. Разрешение на доступ к расположению файла назначается именно идентификатору безопасности службы. It is the per-service SID that must be assigned the access permission on the file location.
Предоставление разрешение на доступ к файловой системе идентификатору безопасности службы To Grant File System Permission to the Per-service SID
С помощью проводника Windows перейдите в папку файловой системы, в которой находятся файлы базы данных. Using Windows Explorer, navigate to the file system location where the database files are stored. Правой кнопкой мыши щелкните эту папку и выберите пункт Свойства. Right-click the file system folder, and then click Properties.
На вкладке Безопасность щелкните Изменить и затем ― Добавить. On the Security tab, click Edit, and then Add.
В диалоговом окне Выбор пользователей, компьютеров, учетных записей служб или групп щелкните Расположения, в начале списка расположений выберите имя своего компьютера и нажмите кнопку ОК. In the Select Users, Computer, Service Account, or Groups dialog box, click Locations, at the top of the location list, select your computer name, and then click OK.
В поле Введите имена объектов для выбора введите имя идентификатора безопасности службы, указанное в разделе Настройка учетных записей службы и разрешений Windowsэлектронной документации. In the Enter the object names to select box, type the name of the per-service SID name listed in the Books Online topic Configure Windows Service Accounts and Permissions. (В качестве идентификатора безопасности службы компонента Компонент Database Engine Database Engine используйте NT SERVICE\MSSQLSERVER для экземпляра по умолчанию или NT SERVICE\MSSQL$InstanceName — для именованного экземпляра.) (For the Компонент Database Engine Database Engine per service SID name, use NT SERVICE\MSSQLSERVER for a default instance, or NT SERVICE\MSSQL$InstanceName for a named instance.)
Щелкните Проверить имена , чтобы проверить введенные данные. Click Check Names to validate the entry. Проверка зачастую выявляет ошибки, по ее окончании может появиться сообщение о том, что имя не найдено. (If the validation fails, it might advise you that the name was not found. При нажатии кнопки ОК открывается диалоговое окно Обнаружено несколько имен . When you click OK, a Multiple Names Found dialog box appears. Теперь выберите идентификатор безопасности службы MSSQLSERVER или NT SERVICE\MSSQL$InstanceName и нажмите кнопку ОК. Now select the per-service SID name, either MSSQLSERVER or NT SERVICE\MSSQL$InstanceName, and then click OK. Снова нажмите кнопку ОК , чтобы вернуться в диалоговое окно Разрешения . Click OK again to return to the Permissions dialog box.)
В поле имен Группа или пользователь выберите имя идентификатора безопасности службы, а затем в поле Разрешения для установите флажок Разрешить для параметра Полный доступ. In the Group or user names box, select the per-service SID name, and then in the Permissions for box, select the Allow check box for Full control.
Нажмите кнопку Применить, а затем дважды кнопку ОК , чтобы выполнить выход. Click Apply, and then click OK twice to exit.
Управление NTFS разрешениями на папки и файлы из PowerShell
Для управления доступом к файлам и папкам в Windows на каждый объект файловой системы NTFS (каталог или файл) назначается специальный ACL (Access Control List, список контроля доступа). В ACL объекта задаются доступные операции (разрешения), которые может совершать с этим объектом пользователь и/или группы . В большинстве случаев администраторы Window для управления NFTS разрешениями на файлы и папки используют графический интерфейс File Explorer (свойства папки/файла -> вкладка Security/Безопасность) или консольную утилиту icacls. В этой статье мы рассмотрим способы управления разрешениями на объекты файловой системы NTFS из PowerShell. Вы можете использовать эти команды в скриптах и для автоматизации управлением NTFS разрешениями на файловых серверах Windows.
Встроенные командлеты для управления ACL в NTFS: Get-Acl и Set-Acl
В PowerShell v5 (Windows 10 / Windows Server 2016) для управления ACL имеется два отдельных встроенных командлета (входят в модуль Microsoft.PowerShell.Security):
- Get-Acl — позволяет получить текущие ACL для конкретного объекта на файловой системе NTFS;
- Set-Acl – используется для добавления/изменения текущих ACL объекта.
Мы не будем подробно останавливаться на этих встроенных командлетах, т.к. их функционал в большинстве случае недостаточен для управления NTFS разрешениями в реальных задачах. Рассмотрим лишь несколько типовых примеров их использования.
Выведем текущего владельца папки (файла) и список назначенных NTFS разрешений:
get-acl C:\Drivers\ |fl
Path : Microsoft.PowerShell.Core\FileSystem::C:\Drivers\
Owner : WORKSTAT1\root
Group : WORKSTAT1\Отсутствует
Access : NT AUTHORITY\Authenticated Users Allow Modify, Synchronize
NT AUTHORITY\SYSTEM Allow FullControl
BUILTIN\Администраторы Allow FullControl
BUILTIN\Пользователи Allow ReadAndExecute, Synchronize
WORKSTAT1\root Allow Modify, Synchronize
Audit :
Sddl : O:S-1-5-21-3650440056-3766451173-3310994491-1001G:S-1-5-21-3650440056-766451173-3310994491-513D:PAI(A;OICI;0x 1301bf;;;AU)(A;OICI;FA;;;SY)(A;OICI;FA;;;BA)(A;OICI;0x1200a9;;;BU)(A;OICI;0x1301bf;;;S-1-5-21-3650440056-37664 51173-3310994491-1001)
Можно вывести только списки NTFS разрешений в более понятном формате:
С помощью следящей команды можно скопировать NTFS разрешения с одной папки и применить их на другую:
Get-Acl C:\Drivers | Set-Acl C:\Distr
Главная проблема при использовании Set-ACL – командлет всегда пытается сменить владельца ресурса, даже если вы просто хотите изменить NTFS разрешения. В результате, чтобы добавить права на объект нужно использовать такую конструкцию:
$path = «c:\drivers»
$user = «WORKSTAT1\user1»
$Rights = «Read, ReadAndExecute, ListDirectory»
$InheritSettings = «Containerinherit, ObjectInherit»
$PropogationSettings = «None»
$RuleType = «Allow»
$acl = Get-Acl $path
$perm = $user, $Rights, $InheritSettings, $PropogationSettings, $RuleType
$rule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList $perm
$acl.SetAccessRule($rule)
$acl | Set-Acl -Path $path
Чтобы убрать NTFS доступ к папке для пользователя или группы:
$path = «c:\drivers»
$acl = Get-Acl $path
$rules = $acl.Access | where IsInherited -eq $false
$targetrule = $rules | where IdentityReference -eq «WORKSTAT1\user1»
$acl.RemoveAccessRule($targetrule)
$acl | Set-Acl -Path $path
Чтобы отключить наследование для папки из PowerShell:
$path = ‘C:\dist’
$acl = Get-ACL -Path $path
$acl.SetAccessRuleProtection($True, $True) # первый $True указывает, является ли данный каталог защищенным, второй $True – нужно ли скопировать текущие NTFS разрешения
Set-Acl -Path $path -AclObject $acl
Используем модуль NTFSSecurity для управления разрешениями из PowerShell
Как я уже говорил, встроенный модуль для управления ACL на объекты в PowerShell не самый удобный. Для управления NTFS правами на файлы и папки в Windows лучше использовать отдельный модуль их галереи PowerShell – NTFSSecurity. Последнюю версию модуля NTFSSecurity (4.2.4 на данный момент) можно установить командой Install-Module -Name NTFSSecurity , или скачать вручную (линк). При ручной установке достаточно распаковать содержимое архива модуля в каталог C:\Windows\System32\WindowsPowerShell\v1.0\Modules\NTFSSecurity (не забудьте разблокировать скачанные файлы).
Импортируйте модуль NTFSSecurity в сессию PowerShell:
Выведем список команд, доступных в модуле (доступно 36 командлетов):
Get-Command -Module NTFSSecurity
Выведем текущие NTFS разрешения на каталог:
Get-Item ‘c:\distr’ | Get-NTFSAccess
Как вы видите, текущие разрешения представлены в более удобной форме.
Чтобы предоставить конкретному пользователю и группе группе полные права на папку, выполните команду:
Add-NTFSAccess -Path C:\distr -Account ‘WORKSTAT1\confroom’,’BUILTIN\Администраторы’ -AccessRights ‘Fullcontrol’ -PassThru
Чтобы предоставить права только на верхнем уровне и не изменять разрешения на вложенные объекты (только на папку), используйте команду:
Add-NTFSAccess c:\data\public -Account corp\aaivanov -AccessRights Modify -AppliesTo ThisFolderOnly
Удалить назначенные NTFS разрешения:
Remove-NTFSAccess -Path C:\distr -Account ‘WORKSTAT1\confroom’ -AccessRights FullControl -PassThru
Следующей командой можно лишить указанную учетную прав на все вложенные объекты в указанной папке (наследованные разрешения будут пропущены):
Get-ChildItem -Path C:\distr -Recurse | Get-NTFSAccess -Account ‘WORKSTAT1\confroom’ -ExcludeInherited |Remove-NTFSAccess -PassThru
Следующей командой можно назначить учетную запись Administrator владельцем всех вложенных объектов в каталоге:
Get-ChildItem -Path C:\distr -Recurse -Force | Set-NTFSOwner -Account ‘Administrator’
Чтобы очистить все разрешения, назначенные на объекты каталога вручную (не будет удалены унаследованные разрешения):
Get-ChildItem -Path C:\distr -Recurse -Force | Clear-NTFSAccess
Включить NTFS наследование для всех объектов в каталоге:
Get-ChildItem -Path C:\distr -Recurse -Force | Enable-NTFSAccessInheritance
Чтобы вывести все разрешения, которые назначены вручную, исключая унаследованные разрешения:
dir C:\distr | Get-NTFSAccess –ExcludeInherited
Можно вывести разрешения, назначенные для определенного аккаунта (не путайте с эффективными разрешениями, речь о них ниже):
dir C:\distr | Get-NTFSAccess -Account corp\aaivanov
Проверка эффективных NTFS разрешений на объекты из PowerShell
Вы можете проверить эффективные NTFS разрешения на конкретный файл или папку с помощью командлета Get-EffectiveAccess . Допустим вы предоставили доступ на некоторую папку нескольким группам безопасности AD и теперь хотите понять, есть ли у конкретного аккаунта (SID) доступ к данной папке или нет. Как это сделать, не выводя состав групп AD, в которых входит его учетная запись? В этой ситуации как раз поможет функция проверки эффективные NTFS разрешений. Допустим, нужно проверить эффективные права на все вложенные папки в каталоге для пользователя confroom.
Get-ChildItem -Path c:\distr -Recurse -Directory | Get-NTFSEffectiveAccess -Account ‘WORKSTAT1\confroom’ | select Account, AccessControlType, AccessRights, FullName
Либо вы можете проверить эффективные разрешения на конкретный файл: