powershellでwindowsのファイル監査設定を簡単にやる

  • 6
    Like
  • 0
    Comment
More than 1 year has passed since last update.

windows環境だとファイル監査設定をして、ファイルの変更履歴をとるケースって結構あると思う。
この設定を、複数台のサーバにGUIで行うのが辛すぎたので、何とかならないかと調べていたところpowershellでNTFSSecurityという拡張モジュールを使って簡単に出来たのでシェア。
GUIで数時間かかっていた作業が、powershell実行で投げて放置できて幸せ。

使い方

1.モジュール置き場を確認

下記コマンドを実行し、ディレクトリに表示されている場所(PSモジュールの置き場)に、NTFSSecurity(このリポジトリにある)をコピーする

PATHが通っているとこならどこでもOK

基本的には、C:\Windows\system32\WindowsPowerShell\v1.0\Modules

PS> Get-Module -ListAvailable

  ディレクトリ: .....

一応、もう一度同じコマンドを実行し、利用可能モジュールとして[NTFSSecurity]がロードされている事を確認

PS> Get-Module -ListAvailable

ModuleType Name                                ExportedCommands
..         ...                                ....
Script     NTFSSecurity                        {Add-NTFSAccess, Add-NTFSAudit, Copy-NTFSAccess, Disable-NTFSAccessIn...

2.モジュールのインポートを実施

PS> Import-Module NTFSSecurity

3.コマンド通ることを確認する。

とりあえず、[Add-Audit]と打ってエラー出なければOK

PS> Add-Audit

コマンド パイプライン位置 1 のコマンドレット Add-NTFSAudit

サンプルコード

上記行った後に、サンプルコードのパスとユーザを追加したら

AddACE.ps1
$TargetFolders = @("Path1",
                   "Path2")
$_host = hostname
$AuditUsers = @("User1",
                "User2")
#監査設定のどの項目を設定したいか
$AuditRules = "Delete,DeleteSubdirectoriesAndFiles,ChangePermissions,Takeownership,WriteData,CreateDirectories,CreateFiles"
$InheritType = "ContainerInherit,ObjectInherit"
$PropagationType = "InheritOnly"
$AuditType = "Success,Failure"

foreach ($AuditUser in $AuditUsers){
  foreach ($TargetFolder in $TargetFolders){
    Write-Host "TagetHost:",$TargetFolder,"TagetUser:",$AuditUser
    Add-Audit $AuditUser $TargetFolder -AccessRights $AuditRules -InheritanceFlags $InheritType -PropagationFlags $PropagationType -Type $AuditType
  }
}

Write-Host "ACE Add Complete"

参照

監査設定項目一覧(powershellは.netのライブラリをそのまま使えるので一緒)
https://msdn.microsoft.com/ja-jp/library/system.security.accesscontrol.filesystemrights%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396