드라이브 루트의 Set-Acl이 "객체"의 소유권을 설정하려고 하는 이유는 무엇입니까?
ACL의 .C:드라이브. 사용자가 드라이브에 직접 폴더를 만들 수 있는 권한을 제거하려고 합니다.저는 스크립트를 작성하는 동안 다른 폴더에서 테스트했습니다.문제없이 작동했습니다.완료 후 실제 드라이브의 테스트 환경에서 스크립트를 사용해 보았습니다.알 수 없는 오류가 발생합니다.허가 매뉴얼을 삭제하면 문제없이 작동합니다.생각나는 사람?
$path = "C:\"
$colRights = [System.Security.AccessControl.FileSystemRights]"CreateDirectories"
$InheritanceFlag = [System.Security.AccessControl.InheritanceFlags]::None
$PropagationFlag = [System.Security.AccessControl.PropagationFlags]::None
$objType =[System.Security.AccessControl.AccessControlType]::Allow
$objUser = New-Object System.Security.Principal.NTAccount("Authenticated Users")
$objACE = New-Object System.Security.AccessControl.FileSystemAccessRule ($objUser, $colRights, $InheritanceFlag, $PropagationFlag, $objType)
$objACL = Get-ACL $path
$objACL.RemoveAccessRule($objACE)
Set-ACL $path $objACL
오류:
Set-Acl : The security identifier is not allowed to be the owner of this object.
At C:\Users\mhodler\Desktop\Remove Permission.ps1:57 char:8
+ Set-ACL <<<< $path $objACL
+ CategoryInfo : InvalidOperation: (C:\:String) [Set-Acl], InvalidOperationException
+ FullyQualifiedErrorId : System.InvalidOperationException,Microsoft.PowerShell.Commands.SetAclCommand
답을 찾았습니다.마이크로소프트의 말
도 불하게도행.
Get-Acl일부 기능이 누락되었습니다.DACL을 수정하려는 경우에도 항상 전체 보안 설명자를 읽습니다.그렇기 때문에Set-ACL또한 사용자가 변경하지 않았더라도 소유자를 쓰기를 원합니다.GetAccessControlmethod를 사용하면 보안 설명자의 어떤 부분을 읽을 것인지 지정할 수 있습니다.
를 합니다.Get-Acl로 전화를 걸다.
$acl = (Get-Item $path).GetAccessControl('Access')
당신은 그것이 필요합니다.SeRestorePrivilege소유자를 설정합니다.아래 URL에 있는 Lee Holmes의 스크립트를 사용하여 이 추가 권한으로 제 프로세스를 향상시켰으며 소유자를 제가 아닌 다른 사람으로 설정할 수 있었습니다.
http://www.leeholmes.com/blog/2010/09/24/adjusting-token-privileges-in-powershell/
는 해습니다를 요.(get-item $path).getaccesscontrol("access")방법이지만 내 프로세스가 없었기 때문에 여전히 동일한 오류가 발생했습니다.SeRestorePrivilege.
다음 코드는 저에게 적합합니다.
$ApplicationPoolIdentity = "everyone"
function SetACL()
{
param (
[Parameter(Mandatory=$true)]
[string] $Path
)
$Acl = (Get-Item $Path).GetAccessControl('Access')
Write-Host "Path:" $Path "ID:" $ApplicationPoolIdentity
$Ar = New-Object system.security.accesscontrol.filesystemaccessrule($ApplicationPoolIdentity,"Write","Allow")
$Acl.SetAccessRule($Ar)
Write-Host $Acl
$Acl | Set-Acl $Path
}
SetACL "C:\Test\"
사람들은 이것을 더 쉽게 찾을 수 있습니다.
icacls c:\ /remove "authenticated users"
$Acl = (Get-Item $Path).액세스 제어 가져오기('액세스')
나를 위해 일했습니다.저는 CMD에서 PS 스크립트를 실행하고 이 PS 스크립트에서는 다른 PS 스크립트를 실행합니다. 제 사용자만 사용하면 모든 것이 정상적으로 작동합니다.다른 사용자를 사용할 때 동일한 오류가 발생합니다. Set-Acl : 보안 식별자는 이 개체의 소유자가 될 수 없습니다.
방금 Get-ACL을 위 라인으로 변경했는데 잘 작동했습니다.다시한번 감사합니다.
언급URL : https://stackoverflow.com/questions/6622124/why-does-set-acl-on-the-drive-root-try-to-set-ownership-of-the-object
'codememo' 카테고리의 다른 글
| pinterest.com 의 절대 div 스태킹 레이아웃을 복제하는 방법 (0) | 2023.09.05 |
|---|---|
| 그루비와 함께 @값 스프링 주석 사용 (0) | 2023.09.05 |
| NuGet 패키지에서 어셈블리 로드 (0) | 2023.08.31 |
| 플렉스 항목이 늘어나지 않도록 방지 (0) | 2023.08.31 |
| Swift를 사용하여 로케일을 프로그래밍 방식으로 변경하는 방법 (0) | 2023.08.31 |