PowerShell を使用した ACL アクセス許可の管理

Marion Paul Kenneth Mendoza 2023年6月21日
  1. PowerShell の NTFS アクセス許可タイプ
  2. Get-Acl コマンドを使用して、PowerShell のフォルダーとファイルの ACL を取得する
  3. PowerShell で Set-Acl コマンドを使用してファイルとフォルダーの ACL を設定する
  4. PowerShell で -RemoveAccessRule パラメーターを使用してユーザー権限を削除する
  5. PowerShell でのアクセス許可の継承を無効または有効にする
  6. PowerShell で SetOwner メソッドを使用してファイルとフォルダーの所有権を変更する
PowerShell を使用した ACL アクセス許可の管理

システム管理者は、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 Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn