[解決済み] PowerShell NTFSの高度なパーミッションの設定
質問
Windowsのセキュリティ設定の「詳細」タブで定義されているNTFSのパーミッションを適用しようとしています。1つのACL
$Rule
は
This folder only
と、もうひとつは
Subfolders and files only
.
以下のように、パーミッションが大きく変更されています。
(Get-Acl 'L:\Test\Beez\RAPJOUR\Appels List\Correct').Access
FileSystemRights : FullControl
AccessControlType : Allow
IdentityReference : BUILTIN\Administrators
IsInherited : False
InheritanceFlags : ContainerInherit, ObjectInherit
PropagationFlags : None
FileSystemRights : CreateFiles, AppendData, DeleteSubdirectoriesAndFiles, ReadAndExecute, Synchronize
AccessControlType : Allow
IdentityReference : Domain\Dirk
IsInherited : False
InheritanceFlags : None
PropagationFlags : None
FileSystemRights : DeleteSubdirectoriesAndFiles, Modify, Synchronize
AccessControlType : Allow
IdentityReference : Domain\Dirk
IsInherited : False
InheritanceFlags : ContainerInherit, ObjectInherit
PropagationFlags : InheritOnly
<イグ
- を除いてすべてオンになっています。フルコントロール、属性書き込み、拡張属性書き込み、削除、権限変更、所有権取得を除くすべてをオンにします。
- を除き、すべてオンになっています。フルコントロール、パーミッションの変更、オーナーシップの取得を除くすべてをオンにします。
これは、パーミッションを適用するために使用するコードの一部です。この場合、以下の部分で定義する必要があります。
Change
:
$f = 'L:\Test\Beez\RAPJOUR\Appels List\Wrong'
$ADobject = 'Domain\User'
$acl = Get-Acl $f
$Grant = 'Change'
# Remove user/group first
$rule = New-Object system.security.AccessControl.FileSystemAccessRule("$ADobject","Read",,,"Allow")
$acl.RemoveAccessRuleAll($rule)
# Add read permissions
if ($Grant -eq 'ReadAndExecute') {
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("$ADobject", "ReadAndExecute", "ContainerInherit, ObjectInherit", "None", "Allow")
}
if ($Grant -eq 'Change') {
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("$ADobject", "Modify", "ContainerInherit, ObjectInherit", "Synchronize", "Allow DeleteSubdirectoriesAndFiles")
$acl.AddAccessRule($rule)
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("$ADobject", "AppendData", "ContainerInherit, ObjectInherit", "ReadAndExecute","Synchronize", "Allow CreateFiles","DeleteSubdirectoriesAndFiles")
}
if ($Grant -eq 'Modify') {
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("$ADobject", "Modify", "ContainerInherit, ObjectInherit", "None", "Allow")
}
if ($Grant -eq 'FullControl') {
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("$ADobject", "FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")
}
if ($Grant -eq 'ListFolderContents') {
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("$ADobject", "ReadAndExecute", "ContainerInherit", "None", "Allow")
}
$acl.AddAccessRule($rule)
Set-Acl $f $acl
構文がうまくいかないのですが・・・。よろしくお願いします。
おかげさまで ポスト の部品はもう見つけた。
-
サブフォルダとファイルのみ」。
"ContainerInherit, ObjectInherit", "InheritOnly"
-
このフォルダーのみ」。
"None", "InheritOnly"
解決方法は?
Windowsのオブジェクトアクセス許可は、以下の方法で制御されます。 アクセス制御リスト (ACL) のリストで構成され、基本的には アクセスコントロールエントリ (ACE)といいます。各ACEは、アクセスを許可するか拒否するか、ACEが誰に適用されるか、ACEが親オブジェクトから継承されたかどうか、子オブジェクトに継承されるべきかどうかを制御する属性の集合である。
のドキュメントを見てみると
FileSystemAccessRule
クラスでは、コンストラクタが 5 つのパラメータを受け取ることがわかります。
-
IdentityReference
/String
: ACE が適用される受託者(ユーザー、グループ、コンピュータ、...)を識別するオブジェクトまたは文字列。 -
FileSystemRights
: 実際の パーミッション を許可または拒否します。 -
InheritanceFlags
: このオブジェクトから権限を継承するオブジェクトの種類を制御するためのフラグです(コンテナ、リーフオブジェクト、またはなし)。 -
PropagationFlags
: 制御するフラグ プロパゲーション のパーミッションがあります。フラグInheritOnly
は、現在のオブジェクトがACEを受け取ることを免除する。フラグNoPropagateInherit
は、継承を直系の子オブジェクトに制限する。 -
AccessControlType
: は タイプ のACE(allowまたはdeny)。
さて、ある受託者に複数のアクセス権を割り当てたい場合、個々のACEでそれを行うことができます。
$acl = Get-Acl $path
$ace1 = New-Object Security.AccessControl.FileSystemAccessRule 'DOMAIN\user',
'ListDirectory', 'ContainerInherit, ObjectInherit', 'InheritOnly',
'Allow'
$acl.AddAccessRule($ace1)
$ace2 = New-Object Security.AccessControl.FileSystemAccessRule 'DOMAIN\user',
'ReadAttributes', 'ContainerInherit, ObjectInherit', 'InheritOnly',
'Allow'
$acl.AddAccessRule($ace2)
...
または、パーミッションをカンマ区切りの文字列として提供する。
$acl = Get-Acl $path
$ace = New-Object Security.AccessControl.FileSystemAccessRule 'DOMAIN\user',
'ListDirectory, ReadAttributes, ...', 'ContainerInherit, ObjectInherit',
'InheritOnly', 'Allow'
$acl.AddAccessRule($ace)
ただし、同じACEでパーミッションの付与と拒否ができないことに注意してください。特定のアクセス権を拒否したい場合は、別のACEでそれを行う必要があります。
$acl = Get-Acl $path
$ace1 = New-Object Security.AccessControl.FileSystemAccessRule 'DOMAIN\user',
'Modify', 'ContainerInherit, ObjectInherit', 'InheritOnly',
'Allow'
$acl.AddAccessRule($ace1)
$ace2 = New-Object Security.AccessControl.FileSystemAccessRule 'DOMAIN\user',
'CreateDirectories', 'ContainerInherit, ObjectInherit', 'InheritOnly',
'Deny'
$acl.AddAccessRule($ace2)
...
また、明示的なパーミッションは継承されたパーミッションより優先されることに注意してください。
Deny
よりも優先されます。
Allow
.
関連
-
[解決済み] PowerShellです。エラー "引数 ... を受け入れる位置パラメーターが見つかりません"
-
[解決済み] PowerShellでSharePoint 2013の連絡先リストに項目を作成する方法は?
-
[解決済み] 管理者として実行しても、「要求されたレジストリへのアクセスは許可されません」と表示される。
-
[解決済み] PowerShellでディレクトリを変更する
-
[解決済み] PowerShellで改行するには?
-
[解決済み] インストールされたPowerShellのバージョンを確認する
-
[解決済み] ssh "パーミッションが開きすぎています "エラー
-
[解決済み] PowerShellで「このシステムではスクリプトの実行が無効になっています」と言われる。
-
[解決済み] フォルダとそのサブフォルダ/ファイルのパーミッションを一括で変更する方法
-
[解決済み] Windows PowerShellの環境変数を設定する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] NULL 値の式でメソッドを呼び出すことはできない
-
[解決済み】Invoke-Command エラー "Parameter set cannot be resolved using specified named parameters".
-
[解決済み】'<'演算子は将来の使用のために予約されている
-
[解決済み] Powershellスクリプトから7-Zipを実行する
-
[解決済み] Invoke-Sqlcmd エラー : リモート DB サーバを呼び出すために powershell を実行すると、ユーザ xxxx のログインに失敗しました。
-
[解決済み] PowerShellで環境変数をコンソールに出力する方法は?
-
[解決済み] PowerShellでディレクトリを変更する
-
[解決済み] Powershell Get-ChildItem -Filter は、同じ値でWhere句とは異なる動作をします。
-
[解決済み] Join-Pathを使って、2つ以上の文字列をファイルパスに結合するにはどうすればよいですか?
-
[解決済み] PowerShellで変数とその型がBooleanであることを宣言する方法は?[重複している]をクリックします。