PowerShell を使用した ACL アクセス許可の管理
- PowerShell の NTFS アクセス許可タイプ
-
Get-Acl
コマンドを使用して、PowerShell のフォルダーとファイルの ACL を取得する -
PowerShell で
Set-Acl
コマンドを使用してファイルとフォルダーの ACL を設定する -
PowerShell で
-RemoveAccessRule
パラメーターを使用してユーザー権限を削除する - PowerShell でのアクセス許可の継承を無効または有効にする
-
PowerShell で
SetOwner
メソッドを使用してファイルとフォルダーの所有権を変更する
システム管理者は、NTFS ファイルサーバーにアクセス制御エントリ ACE
を追加して最小特権モデルを実装することにより、NTFS アクセス制御リスト ACL
を構成します。
この記事では、さまざまなアクセス許可の種類と、PowerShell を使用してファイルとフォルダーの ACL をクエリ、変更、および削除する方法について説明します。
PowerShell の NTFS アクセス許可タイプ
高度な NTFS アクセス許可と基本的な NTFS アクセス許可の両方があります。たとえば、各権限を拒否
または許可
に設定できます。
フルコントロール
:この権限を持つユーザーは、ファイルとディレクトリ、およびそれらに関連するプロパティを変更、追加、移動、および削除できます。さらに、この権限を持つユーザーは、すべてのサブディレクトリとファイルの権限設定を変更できます。変更
:この権限を持つユーザーは、ディレクトリへのファイルの追加と削除、ファイルへのファイルプロパティなど、ファイルとファイルプロパティを表示および変更できます。読み取りと実行
:この権限を持つユーザーは、スクリプトを含む実行可能ファイルを実行できます。読み取り
:ユーザーは、この権限でファイル、ファイルプロパティ、およびディレクトリを表示できます。書き込み
:この権限を持つユーザーは、ファイルに書き込み、ディレクトリにファイルを追加できます。
高度な権限のリストは次のとおりです。
トラバースフォルダ
またはファイルの実行
:この高度な権限を持つユーザーは、これらのファイルまたはフォルダに対する権限がない場合でも、フォルダ内を移動して他のフォルダまたはファイルにアクセスできます。この高度な権限を持つユーザーは、実行可能ファイルを実行することもできます。トラバースフォルダー
アクセス許可は、ユーザーまたはグループにグループポリシースナップインのバイパストラバースチェック
権限がない場合に有効になります。フォルダの一覧表示
またはデータの読み取り
:この高度な権限を持つユーザーは、フォルダ内のファイルとサブフォルダの一覧、およびファイルの内容を表示できます。属性の読み取り
:この高度な権限を持つユーザーは、フォルダーまたはファイルの属性(非表示か読み取り専用かなど)を表示できます。属性の書き込み
:この高度な権限を持つユーザーは、ファイルまたはフォルダーの属性を変更できます。拡張属性の読み取り
:この高度なアクセス許可を持つユーザーは、アクセス許可や作成時間、変更時間など、フォルダーまたはファイルの拡張属性を表示できます。拡張属性の書き込み
:この高度な権限を持つユーザーは、フォルダーまたはファイルの拡張属性を変更できます。ファイルの作成
またはデータの書き込み
:ファイルの作成
権限により、ユーザーはこの高度な権限でフォルダー内にファイルを作成できます。この権限はフォルダにのみ適用されます。
データの書き込み
権限により、この高度な権限を持つユーザーは、ファイルを変更したり、既存のコンテンツを上書きしたりできます。この権限はファイルにのみ適用されます。フォルダの作成
またはデータの追加
:フォルダの作成
権限により、ユーザーはこの高度な権限でフォルダ内にフォルダを作成できます。この権限はフォルダにのみ適用されます。
データの追加
権限により、この高度な権限を持つユーザーはファイルの末尾に変更を加えることができますが、既存のデータを変更、上書き、または削除することはできません。この権限はファイルにのみ適用されます。削除
:この高度な権限を持つユーザーは、フォルダーまたはファイルを削除できます。ユーザーがフォルダまたはファイルに対する削除
権限を持っていない場合でも、親フォルダに対するサブフォルダとファイルの削除
権限を持っていれば、オブジェクトを削除できます。読み取りアクセス許可
:この高度なアクセス許可を持つユーザーは、フルコントロール
、読み取り
、書き込み
などのフォルダーまたはファイルのアクセス許可を読み取ることができます。権限の変更
:この高度な権限を持つユーザーは、ファイルまたはフォルダーの権限を変更できます。所有権の取得
:この高度な権限を持つユーザーは、ファイルまたはフォルダーの所有権を取得できます。ファイルまたはフォルダーの所有者は、ファイルまたはフォルダーを保護する既存のアクセス許可に関係なく、常にそのアクセス許可を変更できます。同期
:この高度な権限を持つユーザーは、同期のためにオブジェクトを使用できます。この権限により、スレッドはオブジェクトがシグナル状態になるまで待機できるようになります。この権限は ACL エディターに表示されません。
以下の PowerShell スクリプトを実行すると、これらのユーザー権限に関するすべての情報を見つけることができます。
[System.Enum]::GetNames([System.Security.AccessControl.FileSystemRights])
NTFS アクセス許可は、明示的または継承することができます。明示的なアクセス許可は個別に構成されますが、継承されたアクセス許可は親フォルダーから継承されます。
権限の階層は次のとおりです。
- 明示的な拒否
- 明示的な許可
- 継承された拒否
- 継承された許可
Get-Acl
コマンドを使用して、PowerShell のフォルダーとファイルの ACL を取得する
ファイルとフォルダーのアクセス許可を管理するために使用される最初の PowerShell コマンドは Get-Acl
です。すべてのオブジェクトのアクセス許可が一覧表示されます。
Get-Acl \\fs1\shared\hr | fl
ユーザーは、アクセス許可をコピーするために、ターゲットフォルダーとソースフォルダーの両方を所有している必要があります。
Get-Acl \\fs1\shared\hr | Set-Acl \\fs1\shared\hr
PowerShell で Set-Acl
コマンドを使用してファイルとフォルダーの ACL を設定する
PowerShell の Set-Acl
コマンドは、ファイル、フォルダー、レジストリキーなどの指定されたアイテムのセキュリティ記述子を変更するために使用されます。つまり、ファイルまたはフォルダーのアクセス許可を変更するために使用されます。
$acl = Get-Acl \\fs1\shared\hr
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("ENTERPRISE\User01","FullControl","Allow")
$acl.SetAccessRule($AccessRule)
$acl | Set-Acl \\fs1\shared\hr
PowerShell で -RemoveAccessRule
パラメーターを使用してユーザー権限を削除する
$acl = Get-Acl \\fs1\shared\hr
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("ENTERPRISE\User01","FullControl","Allow")
$acl.RemoveAccessRule($AccessRule)
$acl | Set-Acl \\fs1\shared\hr
PowerShell でのアクセス許可の継承を無効または有効にする
継承を管理するには、SetAccessRuleProtection
メソッドを使用できます。このメソッドには 2つのパラメーターがあります。
- 最初のパラメーターは、親フォルダーからの継承をブロックする役割を果たします。ブール状態を返します:
$true
および$false
。 - 2 番目のパラメーターは、現在継承されているアクセス許可が削除されるか保持されるかに関係なく使用されます。また、ブール状態(
$true
および$false
)を返します。
$acl = Get-Acl \\fs1\shared\hr
$acl.SetAccessRuleProtection($true,$false)
$acl | Set-Acl \\fs1\shared\hr
この変更を元に戻して、フォルダーの継承を再度有効にしてみましょう。
$acl = Get-Acl \\fs1\shared\hr
$acl.SetAccessRuleProtection($false,$true)
$acl | Set-Acl \\fs1\shared\hr
PowerShell で SetOwner
メソッドを使用してファイルとフォルダーの所有権を変更する
フォルダの所有者を設定する場合は、SetOwner
メソッドを実行する必要があります。
$acl = Get-Acl \\fs1\shared\hr
$object = New-Object System.Security.Principal.Ntaccount("ENTERPRISE\User01")
$acl.SetOwner($object)
$acl | Set-Acl \\fs1\shared\hr
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn