PDA

Показать полную графическую версию : Сброс прав на папку через Set-Acl


Dragokas
19-02-2021, 18:40
Здравствуйте!

Имеется вот такая папка:

PS C:\Windows\system32> Get-Acl -Path c:\temp | Format-List

Path : Microsoft.PowerShell.Core\FileSystem::C:\temp
Owner : BUILTIN\Администраторы
Group : BUILTIN\Администраторы
Access :
Audit :
Sddl : O:BAG:BAD:PAI

Владелец - локальная группа администраторов.
Привилегии не установлены.

Хочу сбросить права с использованием строки SDDL.
Powershell запущен с повышенными правами. Юзер находится в группе "Администраторы".

$SD = Get-Acl -Path c:\temp
$SD.SetSecurityDescriptorSddlForm('O:BAG:BAD:PAI(A;OICIID;FA;;;SY)(A;OICIID;FA;;;BA)(A;OICIID;FA;;;B U)')
PS C:\Windows\system32> Set-Acl -Path c:\temp -AclObject $SD
Set-Acl : Попытка выполнить несанкционированную операцию.
At line:1 char:1
+ Set-Acl -Path c:\temp -AclObject $SD
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : PermissionDenied: (C:\temp:String) [Set-Acl], UnauthorizedAccessException
+ FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShell.Commands.SetAclCommand


В чём проблема?

SDDL корректен.
Тоже самое происходит, если сделать без SetSecurityDescriptorSddlForm, при попытке перенести права, например, с C:\Windows.

2) Попытно вопрос, как записать однострочником, что-то вроде:

(Get-Acl -Path c:\path).SetSecurityDescriptorSddlForm('...') | Set-Acl -Path c:\path

Некорректно отрабатывает. Ошибок нет, но новые права не применены.

Спасибо.

YuS_2
19-02-2021, 21:29
В чём проблема? »
Для выполнения этой операции учетная запись должна быть владельцем ресурса (Owner) и обладать правами Take Ownership. (https://winitpro.ru/index.php/2019/04/22/ntfs-razresheniya-na-papki-powershell/)

как записать однострочником, что-то вроде:
(Get-Acl -Path c:\path).SetSecurityDescriptorSddlForm('...') | Set-Acl -Path c:\path »
так не получится... метод изменяет свойство объекта, но на выходе сам объект не присутствует, поэтому в конвейер не уходит ничего
Можно так:
($acl=Get-Acl -Path c:\path).SetSecurityDescriptorSddlForm('...');$acl | Set-Acl -Path c:\path

Fors1k
19-02-2021, 21:38
На всякий, версия 5.1?

У меня этот код отрабатывает, не могу пока воспроизвести ошибку:
cls
$path = 'c:\test'
$newParam = 'O:BAG:BAD:PAI(A;OICIID;FA;;;SY)(A;OICIID;FA;;;BA)(A;OICIID;FA;;;BU)'
$SD = Get-Acl -Path $path
$SD|FL
"Sddl До:`n`t"+$SD.Sddl
$SD.SetSecurityDescriptorSddlForm($newParam)
Set-Acl -Path $path -AclObject $SD
$SDnew = Get-Acl -Path $path
"Sddl После:`n`t"+$SDnew.Sddl
Path : Microsoft.PowerShell.Core\FileSystem::C:\test
Owner : BUILTIN\Администраторы
Group : BUILTIN\Администраторы
Access :
Audit :
Sddl : O:BAG:BAD:PAI



Sddl До:
O:BAG:BAD:PAI
Sddl После:
O:BAG:BAD:PAI(A;OICI;FA;;;SY)(A;OICI;FA;;;BA)(A;OICI;FA;;;BU)

YuS_2
19-02-2021, 21:42
У меня этот код отрабатывает, не могу пока воспроизвести ошибку »
аналогично... всё же там, что-то с правами на изменение владельца, скорее всего...

Dragokas
20-02-2021, 18:24
Fors1k, а у меня ваш код, увы нет :(
Лично я условия воссоздавал просто зайдя в свойства папки - отключаю наследование прав от родителя и удаляю все явно назначенные права, если есть.

Windows 7 x64.


PS C:\Windows\system32> (Get-Command Set-Acl).Version

Major Minor Build Revision
----- ----- ----- --------
3 0 0 0


PS C:\Windows\system32> (Get-Host).Version

Major Minor Build Revision
----- ----- ----- --------
5 1 14409 1018


YuS_2, спасибо, да я в курсе про требования. Но если моя учётка входит в состав группы "Администраторы", то и условия соблюдены. По остальному:

PS C:\Windows\system32> whoami /priv

Сведения о привилегиях
----------------------

Имя привилегии Описание Область, край
=============================== =========================================== =============
SeAssignPrimaryTokenPrivilege Замена маркера уровня процесса Отключен
SeIncreaseQuotaPrivilege Настройка квот памяти для процесса Отключен
SeSecurityPrivilege Управление аудитом и журналом безопасности Отключен
SeTakeOwnershipPrivilege Смена владельцев файлов и других объектов Отключен
SeLoadDriverPrivilege Загрузка и выгрузка драйверов устройств Отключен
SeSystemProfilePrivilege Профилирование производительности системы Отключен
SeSystemtimePrivilege Изменение системного времени Отключен
SeProfileSingleProcessPrivilege Профилирование одного процесса Отключен
SeIncreaseBasePriorityPrivilege Увеличение приоритета выполнения Отключен
SeCreatePagefilePrivilege Создание файла подкачки Отключен
SeBackupPrivilege Архивация файлов и каталогов Отключен
SeRestorePrivilege Восстановление файлов и каталогов Отключен
SeShutdownPrivilege Завершение работы системы Отключен
SeDebugPrivilege Отладка программ включен
SeSystemEnvironmentPrivilege Изменение параметров среды изготовителя Отключен
SeChangeNotifyPrivilege Обход перекрестной проверки включен
SeRemoteShutdownPrivilege Принудительное удаленное завершение работы Отключен
SeUndockPrivilege Отключение компьютера от стыковочного узла Отключен
SeManageVolumePrivilege Выполнение задач по обслуживанию томов Отключен
SeImpersonatePrivilege Имитация клиента после проверки подлинности включен
SeCreateGlobalPrivilege Создание глобальных объектов включен
SeIncreaseWorkingSetPrivilege Увеличение рабочего набора процесса Отключен
SeTimeZonePrivilege Изменение часового пояса Отключен
SeCreateSymbolicLinkPrivilege Создание символических ссылок Отключен



PS C:\Windows\system32> net user $env:UserName
...
Членство в локальных группах *Debugger Users
*HomeUsers
*individual
*Администраторы
*Пользователи журналов
*Пользователи удаленно
Членство в глобальных группах *None


При этом, утилита cacls.exe прекрасно справляется:


PS C:\Windows\system32> cacls "c:\temp" /S:"O:BAG:BAD:PAI(A;OICIID;FA;;;SY)(A;OICIID;FA;;;BA)(A;OICIID;FA;;;BU)"
Продолжить? (Y/N)y
обработан каталог: c:\temp
PS C:\Windows\system32> Get-Acl c:\temp | Format-List


Path : Microsoft.PowerShell.Core\FileSystem::C:\temp
Owner : BUILTIN\Администраторы
Group : BUILTIN\Администраторы
Access : NT AUTHORITY\система Allow FullControl
BUILTIN\Администраторы Allow FullControl
BUILTIN\Пользователи Allow FullControl
Audit :
Sddl : O:BAG:BAD:PAI(A;OICI;FA;;;SY)(A;OICI;FA;;;BA)(A;OICI;FA;;;BU)


Попробовал на другой (чистой) Win 7. Ошибка такая же.

На Windows 10 ошибка не воспроизводится.

Получается, что это бага ... (?)

Fors1k
20-02-2021, 19:50
PermissionDenied
UnauthorizedAccessException»
Команда говорит, что недостаточно прав. Пока что больше копать некуда.
Проверьте так:
cls
$isAdmin = [Security.Principal.WindowsPrincipal]::new([Security.Principal.WindowsIdentity]::
GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
if($isAdmin){
$path = 'c:\test'
$newParam = 'O:BAG:BAD:PAI(A;OICIID;FA;;;SY)(A;OICIID;FA;;;BA)(A;OICIID;FA;;;BU)'
#
$SD = Get-Acl -Path $path
Write-Host "Sddl До:`n" -fo Yellow
$SD|FL
$SD.SetSecurityDescriptorSddlForm($newParam)
Set-Acl -Path $path -AclObject $SD
$SDnew = Get-Acl -Path $path
Write-Host "Sddl После:`n" -fo green
$SDnew|FL
}
else{
Write-Host "Запустите PowerShell от имени Администратора" -fo Red
}
Sddl До:

Path : Microsoft.PowerShell.Core\FileSystem::C:\test
Owner : BUILTIN\Администраторы
Group : BUILTIN\Администраторы
Access :
Audit :
Sddl : O:BAG:BAD:PAI


Sddl После:

Path : Microsoft.PowerShell.Core\FileSystem::C:\test
Owner : BUILTIN\Администраторы
Group : BUILTIN\Администраторы
Access : NT AUTHORITY\СИСТЕМА Allow FullControl
BUILTIN\Администраторы Allow FullControl
BUILTIN\Пользователи Allow FullControl
Audit :
Sddl : O:BAG:BAD:PAI(A;OICI;FA;;;SY)(A;OICI;FA;;;BA)(A;OICI;FA;;;BU)
PS C:\Windows\system32> ....»
Рекомендую использовать powershell_ise.
Код всегда перед глазами ; F8 - запустить строку или выделенный фрагмент ; F5 - запустить весь код - "Чистый кайф" (с) Баста.

YuS_2
20-02-2021, 19:58
Получается, что это бага ... (?) »
скорее всего, да, причем баг не PS и даже не .net, т.к. при установленном .NET 5.0 и PS 7.2, эта ошибка также воспроизводится на Win7 SP1

Проверьте так: »
ОС Win7, это не поможет...

Fors1k
20-02-2021, 20:10
YuS_2, тогда здесь мои полномочия всё =)




© OSzone.net 2001-2012