Продолжаю делиться своими наработками на Powershell.
В больших организациях обычно стараются стандартизировать большинство ИТ сервисов и процессов. Это касается и файл-сервиса.
Практически все стандарты на файл-сервис, которые я видел, сводились к тому, что на файл сервере создается структура каталогов, на каждый из которых назначаются различные доступы. Обычно на каждый каталог приходится по две группы безопасности: чтение и изменение. Часто группы назначают только на один уровень иерархии, иногда на несколько.
Каталоги, как правило, создаются для каждого отдела/подразделения компании.
В связи с масштабами возникает желание автоматизировать рутину: для каждого каталога создание двух групп безопасности в AD, создание каталога, назначение прав на каталоге для указанных групп. Наиболее актуально это в организациях с множеством филиалов, собственно почему и родился данный скрипт:
$branch = “Mgn”
$branchrus = “Магнитогорск”
$dirs = @(
‘Temp’,
‘Distr’,
‘Multimedia’,
‘SoftwareDistribution’,
‘SharedSoft’,
‘Documents\Формы и бланки’,
‘Documents\Регламенты и стандарты’,
‘Documents\Администрация’,
‘Documents\Секретариат’,
‘Documents\Юридический отдел’,
‘Documents\Планово-экономический отдел’,
‘Documents\Бухгалтерия’,
‘Documents\Отдел управления персоналом’,
‘Documents\Отдел маркетинга’,
‘Documents\Отдел продаж’,
‘Documents\Отдел РКК’,
‘Documents\Абонентский отдел’,
‘Documents\Административно-хозяйственный отдел’,
‘Documents\Служба технического сервиса’,
‘Documents\Производственно-технический отдел’,
‘Documents\Отдел логистики’,
‘Documents\Отдел эксплуатации сети’,
‘Documents\Отдел ИТ’,
‘Documents\Отдел согласований’,
‘Documents\Инвентаризация’
)
# устанавливаем права на разделы
$acl = New-Object System.Security.AccessControl.DirectorySecurity
$addacl = New-Object System.Security.AccessControl.FileSystemAccessRule(“NT AUTHORITY\SYSTEM”, “FullControl”, “ContainerInherit, ObjectInherit”, “None”, “Allow”)
$acl.AddAccessRule($addacl)
$addacl = New-Object System.Security.AccessControl.FileSystemAccessRule(“BUILTIN\Administrators”, “FullControl”, “ContainerInherit, ObjectInherit”, “None”, “Allow”)
$acl.AddAccessRule($addacl)
Set-Acl D: -AclObject $acl
# Создаем корень
md D:\FS
net share FS=D:\FS /GRANT:”everyone,CHANGE”
# права на корень
$acl = New-Object System.Security.AccessControl.DirectorySecurity
$addacl = New-Object System.Security.AccessControl.FileSystemAccessRule(“DOMAIN\Domain Users”, “Read”, “ContainerInherit, ObjectInherit”, “None”, “Allow”)
$acl.AddAccessRule($addacl)
Set-Acl D:\FS -AclObject $acl
# перебираем каталоги
$AD = [ADSI]”LDAP://domain.loc:389/OU=Groups,OU=$branch,DC=domain,DC=loc”
$dirs | % {
echo $_
$dir = $_
$dirname = Split-Path $dir -Leaf
# создаем группу
$group = $AD.Create(“group”, “CN=FS_$($dirname)_чтение_$branchrus”)
$group.Put(‘sAMAccountName’, “FS_$($dirname)_чтение_$branchrus”)
$group.SetInfo()
$group = $AD.Create(“group”, “CN=FS_$($dirname)_запись_$branchrus”)
$group.Put(‘sAMAccountName’, “FS_$($dirname)_запись_$branchrus”)
$group.SetInfo()
# создаем каталог
md “D:\FS\$dir”
# устанавливаем соответствующие права
$acl = New-Object System.Security.AccessControl.DirectorySecurity
$addacl = New-Object System.Security.AccessControl.FileSystemAccessRule(“NT AUTHORITY\SYSTEM”, “FullControl”, “ContainerInherit, ObjectInherit”, “None”, “Allow”)
$acl.AddAccessRule($addacl)
$addacl = New-Object System.Security.AccessControl.FileSystemAccessRule(“BUILTIN\Administrators”, “FullControl”, “ContainerInherit, ObjectInherit”, “None”, “Allow”)
$acl.AddAccessRule($addacl)
$addacl = New-Object System.Security.AccessControl.FileSystemAccessRule(“DOMAIN\FS_$($dirname)_чтение_$branchrus”, “ReadAndExecute”, “ContainerInherit, ObjectInherit”, “None”, “Allow”)
$acl.AddAccessRule($addacl)
$addacl = New-Object System.Security.AccessControl.FileSystemAccessRule(“DOMAIN\FS_$($dirname)_запись_$branchrus”, “Modify”, “ContainerInherit, ObjectInherit”, “None”, “Allow”)
$acl.AddAccessRule($addacl)
# снимаем наследование
$acl.SetAccessRuleProtection($true, $false)
Set-Acl “D:\FS\$dir” -AclObject $acl
}
Скрипт также корректирует права на корень диска и создает шару.
В дополнении надо еще написать скрипт который проверяет правильность разрешений. Алгоритм прост – выгружаем в файл acl, потом сравниваем то что есть с эталонным. Если что сигнализируем админу.