web-dev-qa-db-ja.com

set-aclとpowershellで継承フラグと伝播フラグを設定する

フォルダーを右クリックし、フォルダーに「変更」を設定し、特定のフォルダーとサブフォルダーとファイルにアクセス許可を適用するアクションを模倣しようとしています。

私は主にPowershellを使用していますが、継承は「このフォルダ、サブフォルダ、ファイル」全体ではなく、「サブフォルダとファイル」としてのみ設定されています。

これを適切に設定するSystem.Security.AccessControl.PropagationFlagsのリストされていないフラグはありますか?

ここに私がこれまで取り組んでいるものがあります。

$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
} 
44
Tim AtLee

あなたの答えは このページ にあると思います。ページから:

このフォルダー、サブフォルダー、およびファイル:

InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit 
PropagationFlags.None
32

さまざまな権限の組み合わせに必要なフラグを見つけるのに役立つ表を次に示します。

    ╔=============╦============╦==================== ================================================ ====╦======================╦============╦======= ======╗
║║フォルダーのみ║フォルダー、サブフォルダーとファイル║フォルダーとサブフォルダー║フォルダーとファイル║サブフォルダーとファイル║サブフォルダー║ファイル║
╠==============╬================================ ============╬==================================== ======╬====== ==================================================== 
║伝播║なし║なし║なし║なし║InheritOnly║InheritOnly║InheritOnly║
║継承║なし║Container | Object║Container║Object║Container | Object║Container║Object║
 ╚=============╩============╩==================== ================================================ ====╩======================╩============╩======= =======╝

だから、デビッドが言ったように、あなたは望むでしょう

 InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit 
 PropagationFlags.None 
 
67
Nick Sarabyn

PowerShellを使用しているからといって、優れたexeを忘れないでください。時には、彼らは最も簡単な解決策を提供することができます:

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

以下は、既存の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 クラスの このコンストラクター のパラメーターに関連しています。

このページ の礼儀。

5
Luke

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
2
deadlydog