programing

set-acl 및 powershell을 사용하여 상속 및 전파 플래그 설정

randomtip 2023. 8. 29. 22:19
반응형

set-acl 및 powershell을 사용하여 상속 및 전파 플래그 설정

폴더를 마우스 오른쪽 단추로 클릭하고, 폴더에 "수정"을 설정하고, 특정 폴더와 하위 폴더 및 파일에 사용 권한을 적용하는 작업을 모방하려고 합니다.

저는 주로 Powershell을 사용하지만 상속은 전체 "이 폴더, 하위 폴더 및 파일"이 아닌 "하위 폴더 및 파일"로만 설정됩니다.

목록에 없는 시스템 플래그가 있습니까?보안.액세스 제어.이것을 올바르게 설정할 전파 플래그?

제가 지금까지 작업한 내용은 다음과 같습니다.

$Folders = Get-childItem c:\TEMP\
$InheritanceFlag = [System.Security.AccessControl.InheritanceFlags]::ContainerInherit -bor [System.Security.AccessControl.InheritanceFlags]::ObjectInherit
$PropagationFlag = [System.Security.AccessControl.PropagationFlags]::InheritOnly
$objType = [System.Security.AccessControl.AccessControlType]::Allow 

foreach ($TempFolder in $Folders)
{
echo "Loop Iteration"
$Folder = $TempFolder.FullName

$acl = Get-Acl $Folder
$permission = "domain\user","Modify", $InheritanceFlag, $PropagationFlag, $objType
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission

$acl.SetAccessRule($accessRule)
Set-Acl $Folder $acl
} 

다음 표는 다양한 권한 조합에 필요한 플래그를 찾는 데 도움이 됩니다.

╔═════════════╦═════════════╦═══════════════════════════════╦════════════════════════╦══════════════════╦═══════════════════════╦═════════════╦═════════════╗║ 폴더만 ║ 폴더,하위 폴더 및 파일 ║ 폴더 및 하위 폴더 ║ 폴더 및 하위 폴더 ║ 하위 폴더 및 파일 ║ 하위 폴더 ║ 파일 ║╠═════════════╬═════════════╬═══════════════════════════════╬════════════════════════╬══════════════════╬═══════════════════════╬═════════════╬═════════════╣전파 ║ 없음 ║ 없음 ║ 없음 ║ 없음 ║ InheritOnly ║ InheritOnly ║ InheritOnly ▁inher Inherit잇 온리 »상속 ║ 없음 ║ 컨테이너 |객체 ║ 컨테이너 ║ 객체 ║ 컨테이너 |개체 ║ 컨테이너 ║ 개체 ║╚═════════════╩═════════════╩═══════════════════════════════╩════════════════════════╩══════════════════╩═══════════════════════╩═════════════╩═════════════╝

그래서, 데이빗이 말했듯이, 당신은 원할 것입니다.

상속 플래그입니다.컨테이너.상속 | 상속 플래그입니다.개체 상속전파 플래그입니다.없음.

당신의 답변은 이 페이지에서 찾을 수 있을 것 같습니다.페이지에서:

이 폴더, 하위 폴더 및 파일:

InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit 
PropagationFlags.None

다음은 기존 ACL(액세스 제어 목록)을 수정하여 폴더에 새 권한을 적용하는 몇 가지 간단한 Powershell 코드입니다.

# Get the ACL for an existing folder
$existingAcl = Get-Acl -Path 'C:\DemoFolder'

# Set the permissions that you want to apply to the folder
$permissions = $env:username, 'Read,Modify', 'ContainerInherit,ObjectInherit', 'None', 'Allow'

# Create a new FileSystemAccessRule object
$rule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList $permissions

# Modify the existing ACL to include the new rule
$existingAcl.SetAccessRule($rule)

# Apply the modified access rule to the folder
$existingAcl | Set-Acl -Path 'C:\DemoFolder'

의 각 값$permissions변수 목록은 FileSystemAccessRule 클래스에 대한 이 생성자의 매개 변수와 관련이 있습니다.

이 페이지에서 제공합니다.

여러분이 파워셸에 있다고 해서 좋은 옛 친구들을 잊지 마세요.때로는 다음과 같은 가장 쉬운 솔루션을 제공할 수 있습니다.

icacls.exe $folder /grant 'domain\user:(OI)(CI)(M)'

여기 MSDN 페이지에서 플래그와 이들의 다양한 조합의 결과를 설명합니다.

Flag combinations => Propagation results
=========================================
No Flags => Target folder.
ObjectInherit => Target folder, child object (file), grandchild object (file).
ObjectInherit and NoPropagateInherit => Target folder, child object (file).
ObjectInherit and InheritOnly => Child object (file), grandchild object (file).
ObjectInherit, InheritOnly, and NoPropagateInherit => Child object (file).
ContainerInherit => Target folder, child folder, grandchild folder.
ContainerInherit, and NoPropagateInherit => Target folder, child folder.
ContainerInherit, and InheritOnly => Child folder, grandchild folder.
ContainerInherit, InheritOnly, and NoPropagateInherit => Child folder.
ContainerInherit, and ObjectInherit => Target folder, child folder, child object (file), grandchild folder, grandchild object (file).
ContainerInherit, ObjectInherit, and NoPropagateInherit => Target folder, child folder, child object (file).
ContainerInherit, ObjectInherit, and InheritOnly => Child folder, child object (file), grandchild folder, grandchild object (file).
ContainerInherit, ObjectInherit, NoPropagateInherit, InheritOnly => Child folder, child object (file).

디렉터리뿐만 아니라 모든 하위 디렉터리 및 파일에 사용 권한을 재귀적으로 적용하려면 다음 플래그를 사용합니다.

InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit 
PropagationFlags.None

예를 들어 다음과 같이 구체적으로 코드를 변경해야 합니다.

$PropagationFlag = [System.Security.AccessControl.PropagationFlags]::None

언급URL : https://stackoverflow.com/questions/3282656/setting-inheritance-and-propagation-flags-with-set-acl-and-powershell

반응형