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
'programing' 카테고리의 다른 글
ADB 장치를 찾을 수 없음 (0) | 2023.08.29 |
---|---|
C에서 2차원 배열의 요소에 액세스하기 위해 포인터 표현을 사용하는 방법은 무엇입니까? (0) | 2023.08.29 |
mariadb sql 파일에서 mysql로 (0) | 2023.08.29 |
SQL 개발자의 "바인딩 입력" 대화 상자에서 날짜 변수를 사용하는 방법은 무엇입니까? (0) | 2023.08.29 |
jQuery: 외부 JS가 페이지 하단에 있는 경우 document.ready를 사용하는 이유는 무엇입니까? (0) | 2023.08.29 |