ユーザーのフォルダーアクセス許可を一覧表示する


14

複数のフォルダーの複数のサブフォルダーにアクセスできるドメインのユーザーがいます。彼の権利はかなりきめ細かく定義されていました。現在、彼は会社を辞めていますが、契約されたリソースとして会社で働き続けます。

彼がアクセス権を持っているすべてのフォルダーを見つけて、許可を取り消してから、別のアクセス許可セットを設定する必要があります。

特定のユーザーのすべてのNTFSアクセス許可を一覧表示するツール(できればフリーウェア)はありますか?SysinternalsのAccessEnumを試しましたが、リストをユーザー名でフィルター処理できず、私にとっては役に立ちません。私もCACLSを見てきましたが、できる限りユーザーごとではなくファイルごとに許可を表示しています。

何か案は?


1
これが、グループにユーザーが1人しかいない場合でも、常にグループに基づいてメンバーシップを付与する必要がある理由です。あなたは彼をグループから削除したかもしれません。その間、回答を待つ間、ADで彼のアカウントを無効にすることができます。
MDマーラ

このツール:AccessChk v5.0を試しましたか?安全な環境を作成するための一環として、Windows管理者は、特定のユーザーまたはグループがファイル、ディレクトリ、レジストリキー、グローバルオブジェクト、Windowsサービスなどのリソースに対してどのようなアクセスを持っているかを知る必要があります。AccessChkは、これらの質問に直観的なインターフェイスと出力ですばやく答えます。ここにあります:technet.microsoft.com/en-us/sysinternals/bb664922.aspx
Luke99

@MarkM:本当です...ユーザーが単一のフォルダへのアクセスを必要とするとき、あなたは彼を追加するだけです。それから数ヶ月で、彼は完全に異なるシェアで別のアクセスを必要とします。そして、2、3フォルダーで再び数か月後に。そのようなユーザーにとって意味のある名前のグループをどのように作成しますか?「Username_granular_access_group」?これはおそらくトリックを行うでしょう。@ Luke99:Sysinternalsの興味深いツール。どうして見逃せますか。とにかく、ユーザーが直接または間接的にアクセスできるすべてのフォルダーが表示されます。ユーザーがACLに明示的にリストされているフォルダーのみを表示する方法はありますか(グループ経由のアクセスを除く)。
今合亭

回答:


13

これは、ユーザーの「someuser」がアクセスするすべてのフォルダーを見つけるために、Cドライブ上で、組み込みのWindows icaclsコマンドを使用して、トリックを実行しているようです(おそらく警告があります)。

icacls c:\*. /findsid someuser /t /c /l

/ tは、ディレクトリを再帰するように指示するために必要です。/ cは、エラーが発生しても続行し続けるように指示するために必要です。/ lは、シンボリックリンク(存在する場合)で動作するようにします。(最後の1つはLであり、これらのフラグは大文字でも小文字でもかまいません。)

*.「ディレクトリに対して、ファイルではない見て」と言うための方法として、DOSの古いタイマーによって認識されます。もちろん、フォルダーではなくファイルを検索する場合は、に変更します。*.*もちろん、任意のドライブをポイントするか、任意のフォルダーから実行してドライブ/フォルダーパスを省略し、その相対検索を実行できます。フォルダのみ。

OPと同じ答えを探して、このエントリを見つけましたが、ダウンロード可能なツールに基づいたオファーしか見られなかったので困りました。他の人と同様に、私はこのicaclsツールで組み込みのものを使用することを好みました。

そして、Windows Server 2012、2008、およびWindows 7で動作することを確認したので、Server 2003、Windows 8などでも同様に動作すると思います。

結果のリストは、次のような行ごとに示されるフォルダーになります。

見つかったSID:c:\ somedir \ somesubdir。

これを、横断するディレクトリへのアクセス権を持っていないユーザーとして実行すると、次のような結果にエラーがインターリーブされることに注意してください。

c:\ System Volume Information:アクセスが拒否されました。

また、ドライブ全体を検索している場合、そのようなエラーが何百も発生する可能性があり、その中から結果を見つけるのが難しくなります。

答えは管理者としてコマンドラインを実行することであると考える人もいるかもしれませんが、以前は非表示だったフォルダーを走査するため、このようなエラーが表示されるだけです。

これらのエラーを非表示にすることに関心がある場合、エラーが除外されないため、findコマンドを使用して、DOが成功する結果(DOが "SID found"を参照するもの)のみをパイプすることはできません。 findコマンドへのパイプによって。代わりに、すべてのエラーを削除する場合は、を使用してエラーストリーム(stderr)を「ビットバケット」にリダイレクトする、かなりあいまいなトリックを使用する必要があります2>nul:。したがって、上記の例は次のようになります。

icacls c:\*. /findsid someuser /t /c /l 2>nul:

そのようなエラーを生成したフォルダーのうち、現在は非表示になっているフォルダーは、「someuser」という名前のユーザーがアクセスできるが、アクセスできないフォルダーになる可能性があることに注意してください。そのため、これらのエラーを単に無視することについて考え直した方がよいでしょう。しかし、必要に応じて、それを行うことができます。

その可能性はこの答えの価値を潜在的に制限する、と私は理解しています。物事にもっと精通している人が私の答えを拡大したり修正したりしたいなら、私はそれを歓迎します。


明らかなはずのように思えますが、指摘しているのは:*を検索することです。ディレクトリのみの検索、またはすべてのディレクトリの検索と同等ではありません。ディレクトリ名には拡張子を付けることができ、ファイルには拡張子を付ける必要はありません。徹底的になりたい場合は、すべてを検索します。
スコットE

6

PowerShellを使用するには、他のものをダウンロードする必要はありません。これはv2.0以降で動作します。

$ReferenceAccountName = 'DOMAIN\Username'
[string[]]$SearchDirectories = @('X:\SomeDirectory', 'F:\AnotherDirectory')

foreach ($RootDir in $SearchDirectories) {
    $DirACL = Get-Acl -Path $RootDir
    foreach ($ACL in $DirACL.Access){
        if ($ACL.IdentityReference -like $ReferenceAccountName){
            Write-Output $RootDir
        }
    }
    foreach ($Directory in (Get-ChildItem -Path $RootDir -Recurse | `
                            Where-Object -FilterScript {$_.Attributes `
                            -contains 'Directory'})){
        $DirACL = Get-Acl -Path $Directory.FullName
        foreach ($ACL in $DirACL.Access){
            if ($ACL.IdentityReference -like $ReferenceAccountName){
                Write-Output $Directory.FullName
            }
        }
    }
}

PowerShell v3以降で利用できるものほどクリーンではありませんが、機能します。これにより、見つかったディレクトリのリストが文字列形式で出力されます。

Write-の入力オブジェクトを操作することにより、それらをオブジェクトとして簡単に出力し、作業を続行できます(CSVファイルにエクスポートし、見つかったエントリを削除し、情報でチケットを更新するなど)。出力呼び出し。


継承されたアクセス許可を「除外」することも可能でしょうか?(つまり、「DOMAIN \ Username」が明示的に追加されているすべてのフォルダを検索しますか?
-dognose

1
はい、次のことができますif ($ACL.IdentityReference -like $ReferenceAccountName -and !$ACL.IsInherited){
。– dognose

3

私は自分の質問に対する解決策を見つけました。それは非常にシンプルでクリーンだと思います。subinaclをインストールして、コマンドプロンプトから1行実行するだけです。

subinaclはここからダウンロードできます。Windows 2000、Windows XP、およびWindows Server 2003でのみ公式にサポートされていますが、Windows Vista、Windows Server 2008、およびWindows 7でも動作するはずです。

次に、コマンドプロンプトから次を実行します。

subinacl /testmode /noverbose /outputlog=c:\TEXTFILENAME.TXT /subdirectories=directoriesonly X:\*.* /findsid=DOMAIN\username

ここで、X:あなたしているスキャンドライブで、usernameはその権限リストにたいユーザーです。スキャンには時間がかかることがあり、TEXTFILENAME.TXTで結果を取得します。

スイッチ/ noverboseを使用すると、アクセス許可のコンパクトなリストが得られます-基本的に、ユーザーがアクセスできるディレクトリを確認できます(アクセスマスクやその他の便利なものがある場合)。

OpenOffice Calcを使用してリストをインポートし、カスタムフィルターを適用して、+ FILEで始まる行のみをフィルター処理しました。これらの行には、ユーザーがアクセスできるディレクトリが含まれています。これは、単純なツールを使用して、関連する情報のみを取得する方法です。

多くの場合、継承は親ディレクトリで有効になっているため、アクセス許可を調整するためにアクセスする必要があるディレクトリの実際の数は、通常、リスト自体よりも大幅に少なくなります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.