PowerShell: Работаем с ACL
Покажу пример, как с помощью PowerShell можно управлять настройками безопасности для файлов и каталогов (т.е. как работать с ACL).
Добавляем правило для каталога:
# Экспериментальный каталог $dir = "C:\000" # Если каталог существует - удаляем его со всем содержимым if ([System.IO.Directory]::Exists($dir)) { Remove-Item -Path $dir -Recurse } # Создаём каталог New-Item -Path $dir -ItemType Directory | Out-Null # Получаем значение ACL каталога $acl = Get-Acl -Path $dir # Запретим пользователю "Host\Катя" права на создание файлов в этом каталоге: # Аккаунт, для которого хотим добавить запись в ACL каталога $account = "Host\Катя" # Интересующие нас права доступа к объекту $rights = [System.Security.AccessControl.FileSystemRights]::CreateFiles # Перечисление разрешающее, или запрещающее доступ. Доступные варианты: Allow, Deny. # Мы хотим запретить, поэтому - Deny $controlType = [System.Security.AccessControl.AccessControlType]::Deny # Получаем текущий ACL каталога (объект класса # System.Security.AccessControl.DirectorySecurity) $dirSec = [System.IO.Directory]::GetAccessControl($dir); # Создаём новое правило доступа $rule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule ` -ArgumentList $account, $rights, $controlType # Добавляем созданное нами правило доступа к набору уже имеющихся правил $dirSec.AddAccessRule($rule) # Назначаем каталогу модифицированные нами настройки доступа [System.IO.Directory]::SetAccessControl($dir, $dirSec);
Полный перечень доступных вариантов перечисления System.Security.AccessControl.FileSystemRights смотреть здесь.
Удаляем добавленное нами ранее правило:
# Теперь удаляем добавленную нами ранее запись из ACL # Получаем значение ACL каталога $acl = Get-Acl -Path $dir # Интересующие нас права доступа к объекту $rights = [System.Security.AccessControl.FileSystemRights]::CreateFiles # Перечисление разрешающее, или запрещающее доступ. Доступные варианты: Allow, Deny. # Мы хотим запретить, поэтому - Deny $controlType = [System.Security.AccessControl.AccessControlType]::Deny # Получаем текущий ACL каталога (объект класса # System.Security.AccessControl.DirectorySecurity) $dirSec = [System.IO.Directory]::GetAccessControl($dir); # Создаём новое правило доступа $rule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule ` -ArgumentList $account, $rights, $controlType # Добавляем созданное нами правило доступа к набору уже имеющихся правил $dirSec.RemoveAccessRule($rule) # Назначаем каталогу модифицированные нами настройки доступа [System.IO.Directory]::SetAccessControl($dir, $dirSec); # Вот собственно и всё...
Для файлов всё выполняется по аналогии, с той лишь разницей, что вместо класса DirectorySecurity нужно использовать FileSecurity.
- Bush's блог
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
- 350 просмотров



Комментарии
1 комментария(ев)Дата: ПТ, 17/02/2012 - 12:11
Класс! Все так просто. Я подобную задачу раньше решал с помощью своего небольшого приложения, написанного на Delphi. Намучился же я тогда с курением манов.