web-dev-qa-db-ja.com

ACL内の特定のユーザーまたはグループを含むNTFS内のすべてのファイルの検索

エグゼクティブサマリー:特定のユーザーまたはグループがアクセスできるすべてのディレクトリとファイルを検索したい。

詳細:DACLのACEに特定のユーザーまたはグループが含まれているすべてのファイルとディレクトリをNTFSディレクトリで再帰的に検索するコマンドラインツールを探しています。権限を変更したい場合は、subinaclまたはSetACLを使用します。これらのツールの1つを使用して検索と表示もできると思いましたが、簡単な解決策を見つけるのに苦労しています。

私は次のようにSetACLを使用できます:

   setacl -on C:\SOME_DIR -ot file -actn list -lst "f:tab;w:d;i:y;" -rec cont

次に、関心のあるユーザーのgrepを実行しますが、よりエレガントなソリューションが必要です。私はおそらくここで何かが欠けています。何か案は?

3
David

ありがとう、「不明」。 PowerShellスクリプトは私には機能しませんが、機能するものを一緒にハッキングしました。私も初めてですが、試行錯誤を繰り返しました。

Get-ChildItem "C:\SOME\DIR" -recurse | 
    ForEach-Object { 
        $fname = $_.FullName
        $acl = Get-Acl $fname
        foreach ($e in $acl.Access) {
            If ( -not $e.IsInherited -and
                 $e.AccessControlType -eq "Allow" -and 
                 $e.IdentityReference -eq "SOMEDOMAIN\Somegroup") 
            {
                Write-Host $fname
                break
            }
        }
    }

PowerShellカンフーを持っている人はおそらくこれを少しクリーンアップすることができます。アクセスがどこから始まるかを知りたいだけなので、継承されたエントリを無視することに注意してください。

5
David

テストされておらず、PowerShellには少し新しいですが、このようなものはそれを画面に書き込みます。そこから、ファイルなどにダンプできます。

Get-ChildItem "RootFolderPath" -recurse | 
    ForEach-Object { 
        $acl = Get-Acl $_.FullName
        If $acl.ContainsKey "User/Group" {Write-Host $_.FullName}
    }
3
user10711

ワンライナーですが、継承フィルターがないため、 'AccessToStringプロパティをチェックします。

Get-ChildItem "C:\SOME\DIR" -recurse|foreach{if((Get-Acl $_.FullName).AccessToString -like "*DOMAIN\username*"){write-Host $_.FullName}}
1
ienaxxx

これが私が上から変更したPowerShellスクリプトで、私のために機能しました。

$files = @()
Get-ChildItem "d:\some\path" -recurse | 
    ForEach-Object { 
        $fname = $_.FullName
        if ($fname -notlike "*_vti*") {
            $acl = Get-Acl $($fname)
            foreach ($e in $acl.Access) {
                If ( $e.FileSystemRights -like "*Modify*" -and 
                     $e.IdentityReference -eq "domain\user") 
                {
                    $files += $fname
                    break
                }
            }
        }
    }
$files > d:\out.txt
0
syntax53

accessenum あなたのユースケースでうまくいくでしょうか?

0
tomfanning