Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Сброс прав на папку через Set-Acl

Ответить
Настройки темы
PowerShell - Сброс прав на папку через Set-Acl

Пользователь


Сообщения: 148
Благодарности: 39

Профиль | Сайт | Отправить PM | Цитировать


Здравствуйте!

Имеется вот такая папка:
Код: Выделить весь код
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;;;BU)')
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
Некорректно отрабатывает. Ошибок нет, но новые права не применены.

Спасибо.

-------
Alex Dragokas


Отправлено: 18:40, 19-02-2021

 

Аватара для YuS_2

Crazy


Contributor


Сообщения: 1171
Благодарности: 487

Профиль | Отправить PM | Цитировать


Цитата Dragokas:
В чём проблема? »
Для выполнения этой операции учетная запись должна быть владельцем ресурса (Owner) и обладать правами Take Ownership.

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

-------
scio me nihil scire. Ѫ

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:29, 19-02-2021 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Fors1k

Старожил


Сообщения: 193
Благодарности: 112

Профиль | Отправить PM | Цитировать


На всякий, версия 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)
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:38, 19-02-2021 | #3


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1171
Благодарности: 487

Профиль | Отправить PM | Цитировать


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

-------
scio me nihil scire. Ѫ


Отправлено: 21:42, 19-02-2021 | #4


Пользователь


Сообщения: 148
Благодарности: 39

Профиль | Сайт | Отправить PM | Цитировать


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 ошибка не воспроизводится.

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

-------
Alex Dragokas


Отправлено: 18:24, 20-02-2021 | #5


Аватара для Fors1k

Старожил


Сообщения: 193
Благодарности: 112

Профиль | Отправить PM | Цитировать


Цитата Dragokas:
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)
Скрытый текст
Цитата Dragokas:
Код: Выделить весь код
PS C:\Windows\system32> ....
»
Рекомендую использовать powershell_ise.
Код всегда перед глазами ; F8 - запустить строку или выделенный фрагмент ; F5 - запустить весь код - "Чистый кайф" (с) Баста.

Последний раз редактировалось Fors1k, 20-02-2021 в 20:00.


Отправлено: 19:50, 20-02-2021 | #6


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1171
Благодарности: 487

Профиль | Отправить PM | Цитировать


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

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

-------
scio me nihil scire. Ѫ


Отправлено: 19:58, 20-02-2021 | #7


Аватара для Fors1k

Старожил


Сообщения: 193
Благодарности: 112

Профиль | Отправить PM | Цитировать


YuS_2, тогда здесь мои полномочия всё

Отправлено: 20:10, 20-02-2021 | #8



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Сброс прав на папку через Set-Acl

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
2012 R2 - Настройка прав на сетевую папку ChaZmik Windows Server 2012/2012 R2 1 17-02-2017 10:56
Доступ - сброс пароля на папку в сети ivanvol77 Microsoft Windows 2000/XP 1 06-11-2014 11:25
2008 R2 - Настройка прав на папку NTFS KAB Windows Server 2008/2008 R2 1 05-11-2014 23:19
Наследование прав доступа ACL на подпапки и подуровни poddex Microsoft Windows NT/2000/2003 4 01-11-2010 15:45
Удаленная раздача прав на папку. Butunin Klim Microsoft Windows NT/2000/2003 2 08-12-2006 00:07




 
Переход