【 Set-Acl 】コマンドレット――ファイルのアクセス権を設定する(3)フォルダアクセス権の設定/追加と継承Windows PowerShell基本Tips(85)

本連載は、PowerShellコマンドレットについて、基本書式からオプション、具体的な実行例までを紹介していきます。前々回、前回と解説してきた「Set-Acl」コマンドレットの最終回です。

» 2023年10月06日 05時00分 公開
[後藤諭史@IT]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「Windows PowerShell基本Tips」のインデックス

連載目次

 本連載では、Windows PowerShellの基本的なコマンドレットについて、基本的な書式からオプション、具体的な実行例までを分かりやすく紹介していきます。前々回、前回と解説してきたコンピュータ上のファイル/フォルダにアクセス権を設定する「Set-Acl」コマンドレット。最終回となる今回は、Set-Aclコマンドレットによる「フォルダアクセス権の設定/追加」と「継承」の考え方を扱います。

 なお、Set-Aclコマンドレットの基本的な使い方、オプションについては、本連載第82回をご覧ください。



フォルダのACLを設定する

 フォルダに対するアクセス権(Access Control List:ACL)もSet-Aclコマンドレットで設定可能ですが、ファイルの権限設定では意識しなかった「継承」を考慮する必要があります。

 フォルダの場合、継承設定は親フォルダからの権限継承の他、自身の子フォルダに対して権限を継承するかどうか、また自身のフォルダに格納されるファイルに対して権限を継承するかどうかを設定します。

 例えば、画面1のように「woods」に割り当てられた権限の適用先が「このフォルダーとファイル」だけになっているとします。このフォルダ内に新規フォルダを作成した場合、このユーザー「woods」の権限は継承されませんが、「SYSTEM」アカウントと「Administrators」グループの2つのユーザー権限が継承されます。

ALT 画面1 フォルダにおける継承設定

 これらの継承もSet-Aclコマンドレットで設定できます。画面1のフォルダに対してユーザー「stenson」を「Full Control」の権限で追加し、「このフォルダ―、サブフォルダーおよびファイル」に権限を継承させるには、以下のようにコマンドレットを実行します(画面2)。

コマンドレット実行例

$ACL = Get-Acl .\TestFolder
$identity = "stenson"
$fileSystemRights = "FullControl"
$type = "Allow"
$inheritance = "ContainerInherit,ObjectInherit"
$Permission = ($identity,$fileSystemRights,$inheritance,"None",$type)
$AddAccessList = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule $Permission
$ACL.SetAccessRule($AddAccessList)
Set-Acl -Path .\TestFolder -AclObject $ACL

ALT 画面2 Set-Aclコマンドレットでユーザー「stenson」に対して継承先を全てとするフォルダのアクセス権を設定した

 継承先設定は「ContainerInherit」がフォルダに対する権限継承、「ObjectInherit」がファイルに対する権限継承になります。

 ユーザー「stenson」の権限は「このフォルダ―、サブフォルダーおよびファイル」に継承されるので、「ContainerInherit」と「ObjectInherit」の設定を実施します。

 新規ユーザーの権限設定となるので「SetAccessRule」メソッドを使用します。ファイルに対する権限設定と異なり、継承設定が必要となるので、SetAccessRuleメソッドに渡す引数は5つになります。

 第1引数と第2引数は、ファイルの場合と同じように「ユーザーもしくはグループ名」と「アクセス権」です。

 第3引数は「継承先設定」となり、前述の「ContainerInherit」と「ObjectInherit」をカンマ(,)区切りで指定します。

 第4引数は「継承の制限」の設定です。前述の実行例のように「None」(6行目)を指定すると制限がないため全てに継承されます。

 そして、第5引数が「アクセスタイプ(許可/拒否)」で、その順序でACLを指定します。

 このようにフォルダに対するアクセス権設定は、ファイルに対するアクセス権設定と引数の数が異なる点に注意が必要です。

 これに追加してユーザー「watson」には「読み取りと実行」の権限で追加し、「このフォルダーとファイル」のみの継承設定を行います(画面3)。

コマンドレット実行例

$ACL = Get-Acl .\TestFolder
$identity = "watson"
$fileSystemRights = "ReadAndExecute, Synchronize"
$type = "Allow"
$inheritance = "ObjectInherit"
$Permission = ($identity,$fileSystemRights,$inheritance,"None",$type)
$AddAccessList = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule $Permission
$ACL.SetAccessRule($AddAccessList)
Set-Acl -Path .\TestFolder -AclObject $ACL

ALT 画面3 Set-Aclコマンドレットでユーザー「watson」に対し、継承先をファイルとフォルダのみに限定してフォルダのアクセス権を設定した

 ユーザー「stenson」とユーザー「watson」のGet-Aclコマンドレットの出力結果が異なっていることが分かりますが、これをGUIで確認すると画面4のようになっています。

ALT 画面4 GUIでユーザー「stenson」とユーザー「watson」の継承先の違いを確認


フォルダのACLを追加する

 ユースケースとしては「カレントフォルダは『読み取り』と『実行』だけだが、サブフォルダは『フルコントロール』」といった権限設定があると思います。もちろん、継承設定を行わずに個別にACLを設定することでも実現できますが、継承設定をうまく活用することで管理工数を最小にできる可能性があります。

 現在ユーザー「watson」は「TestFolder」に対して「読み取りと実行」の権限しか持っていませんが、サブフォルダには「フルコントロール」の権限を渡したいと考えています。

 継承設定を無効にして、新たにサブフォルダに対して権限を設定することもできますが、以降サブフォルダを作成するたびに権限を付与しなければならなくなるため、管理コストは増大します。

 そのような場合は、「SetAccessRule」メソッドや「AddAccessRule」メソッドに渡す引数の中の「継承の制限」を活用します。

 また、既にACLが設定されているフォルダに対する権限追加になりますので、SetAccessRuleメソッドではなく、AddAccessRuleメソッドを利用します(画面5)。なお、SetAccessRuleメソッドを使用すると、ACLを上書きしてしまうため注意が必要です。

コマンドレット実行例

$ACL = Get-Acl .\TestFolder
$identity = "watson"
$fileSystemRights = "FullControl"
$type = "Allow"
$inheritance = "ContainerInherit,ObjectInherit"
$Propagation = "InheritOnly"
$Permission = ($identity,$fileSystemRights,$inheritance,$Propagation,$type)
$AddAccessList = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule $Permission
$ACL.AddAccessRule($AddAccessList)
Set-Acl -Path .\TestFolder -AclObject $ACL

ALT 画面5 Set-Aclコマンドレットでユーザー「watson」に対して「継承の制限」を付与してフォルダのアクセス権を設定した

 Set-Aclコマンドレットの実行結果をGUIで確認すると、画面6のようになりました。

ALT 画面6 異なる権限と継承先を付与したため、GUI上ユーザー「watson」がそれぞれの権限で表示されている

 「継承の制限」として「InheritOnly」を設定したため、カレントフォルダには適用されず、サブフォルダ以降のフォルダとファイルに対してのみアクセス権が継承されます。

筆者紹介

後藤 諭史(ごとう さとし)

Microsoft MVP for Cloud and Datacenter Management(2012-2024)。現業の傍ら、コミュニティーイベントでの登壇や著作にてMicrosoftテクノロジーに関する技術情報の発信、共有を続けている。ネットワークやハードウェアといった物理層に近いところが大好きな、昔ながらのインフラ屋さん。得意技はケーブル整線。近著は『詳解! Windows Server仮想ネットワーク』(日経BP社)。


Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

4AI by @IT - AIを作り、動かし、守り、生かす
Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。