失われたグループ。 ADの「奇妙な」グループの割り当てを調べる

良い時間、ハブラグ市民!



Active Directoryで継承したゴミを理解しているシステム管理者として、作業を容易にするために設計されたギズモの1つをお急ぎください。

私の意見では、善の最も問題なのはグループです。 これらについては、この記事で説明します。

つまり、Active Directoryに移動して、部門のオープンスペースを耕し、完全に顔のない名前(たとえば、Ugin、Vassa、Opel、wwwなど)で説明のないグループを確認します。 質問への注意:これらのグループが何のためにあるかを決定します。



継承するもの



だから、私たちは、頭の後ろを掻くグループを見る。 このグループには、さまざまな部門のユーザーが含まれます。 常識の兆候はありません。 おそらく、グループの名前によって、それが何であるかを漠然と決定(または推測)できます。 これは、このすべてをあなたに残した人にプラスになります。 私たちは何をするつもりですか?



そのため、私の仕事で、ドメインに関与するとすぐに、そのようなグループの馬車と小さなカートを見つけました。 そして、私の前にそれらを担当していたすべての人々はそのままでしたが、誰も私に分かりやすい答えを与えることができませんでした。 以前にこれに目を留めることができた場合、他にも多くのことがありましたが、今では物事を整理する必要があります。



グループ生活の意味は何ですか? 原則として、これは共有フォルダー内のリソースへのアクセス、またはグループポリシーを適用するためのフィルターのいずれかです(Domain Adminsなどのシステムグループは考慮しません)。

そのため、タスクが設定されました。共有リソースおよびグループポリシー内のフォルダーのアクセス制御リスト(ACL)を確認する必要があります。



こんにちは PoSh



ここで、スイスのナイフがアリーナに入り、それによってフォルダーとポリシーのACLが開きます。

政治家のほうが簡単なので、彼らから始めましょう。



グループポリシー



グループポリシーを使用するには、grouppolicyモジュールが役立ちます。 このモジュールから、2つのコマンドレットを使用します。

1. get-gpo。ドメイン内のすべてのグループポリシーのリストを送信します。

2.get-gppermissions。ACLポリシーを表示できます。

次に、グループの名前とACLのエントリの一致を探し、もしあれば、このポリシーに関する情報を表示します。

$name=read-host "      " Write-Host -Fore RED "   ..." $gpos=get-gpo -all Foreach ($gpo in $gpos) { $ACls=get-gppermissions -Name $gpo.DisplayName -all Foreach ($acl in $ACls) { if ($acl.Trustee.Name -match "$name") { Write-Host -Fore GREEN " !"; $gpo If ($acl.Permission -eq "GpoApply") {if ($acl.Denied) {Write-Host -Fore RED "  "}} } } }
      
      





また、ACLのPermissionプロパティとDeniedプロパティにも注意してください。

1.許可-たとえば、ポリシーの適用(GpoApply)、ポリシーの読み取り(GpoRead)、ポリシーの変更(GpoEdit)、または一括(GpoEditDeleteModifySecurity)などのオブジェクトの許可が含まれます。

2. [拒否]は、[許可]に表示または許可されるものを示します。

スクリプトの一部を見ると、グループのACLがポリシー(Permission -eq "GpoApply")の適用を禁止している(拒否-eq $ true)場合、これに関する通知が表示されることがわかります。 原則として、すべての場合に通知をペイントすることができましたが、ポリシーの配布の禁止にのみ興味があります。

PS次のコードでは、グループの名前が格納されている$ name変数を使用します。



共有フォルダー



それでは、共有フォルダの世話をしましょう。 次の2つのオプションがあります。

1.共有リソースに直接許可が与えられている場合。

2.共有リソースの腸内に隠されたフォルダーに許可が与えられた場合。

順番に行きましょう。



表面を見る


最も簡単で理解しやすい方法は、共有フォルダーにアクセス許可を与えることです。 そのため、すべての権限を1か所で取得し、4層のフォルダーの最下部に移動して、経理の友達だけが入場を許可されている誕生日の写真が含まれる1つのフォルダーを見つけるときに、相続人を混同しないようにすることをお勧めします。 彼女はショートカットを失い、必要なフォルダを推測しますか? しかし、後で彼女に戻ります。

次に、ファイルサーバー上の共有フォルダーのACLを確認する必要があります(ここではFileServerと呼ばれます...(はい、私はオリジナルです))。 このために、私たちは皆のために最愛のWMIを使用します。 サーバーへの単純なログインでは表示されないフォルダーをすぐに破棄することに注意してください。 なんで? 通常のユーザーはそこにアクセスしませんが、通常とは異なるユーザーは質問できます(必要に応じて削除できます)。

 Write-Host -Fore RED "   \\FileServer" $dirs=get-wmiobject win32_Share -computername FileServer | where-object {$_.Name -notmatch "\$"} Foreach ($dir in $dirs) { Trap [System.UnauthorizedAccessException] {"     $share"; continue;} $out=$null $share=$dir.Path if ($share -match "^D:") {$share = $share.ToUpper().Replace('D:','\\FileServer\d$')} elseif ($share -match "^C:") {$share = $share.ToUpper().Replace('C:','\\FileServer\c$')} $out=($share | get-acl).Access | where-object {$_.IdentityReference -match "$name"} if ($out -ne $null) {Write-Host -Fore green " !" $share} }
      
      





また、特定のフォルダーへのアクセスが閉じられていることを示すエラーをキャッチし、赤い恐ろしいエラーの代わりに、簡単なメッセージを受け取ります。

「D:」を「\\ FileServer \ d $」(および「C」ドライブと同様)に置き換える2行が必要です。 これが行われない場合、コマンドレットget-aclはコンピューター上でこれらのフォルダーを検索しようとし、ほとんどの場合それを見つけられません。 そして、彼(コマンドレットget-acl)は、パス\\ FileServer \ Folderに沿って検索できません。 この例では、ディスクは2つしかありませんが、追加しても問題はありません。



私たちは深みに行きます


私たちは経理から友人に戻ります。 次に、サブフォルダーを掘り下げます。

get-childitem -recurseを使用できるのに、なぜ何かを思いつくのか、多くの人が言うだろうと思います。 サーバーに多くのフォルダーがない場合-はい、再帰を使用できます。 ただし、約7 TBのファイルサーバーがある場合は、原則として何の問題もありません。数時間待つだけですべてが機能します。 そして、検索の途中で間違いがないように神に祈ります。

では、-recurseは役に立たないでしょう。 次に、思いのままに、必要なだけフォルダの腸に入るサイクルを作成する必要があります(そのように聞こえます)。 部門用のサブフォルダーを含むフォルダーがあるとします(トートロジーはご容赦ください)。 これらのフォルダーは共有されません。 これらのフォルダーの一部には、大事なアクセス許可を持つ必要なフォルダーがあります。

 Write-Host -Fore RED "   \\FileServer\WorkFolders..." $AllPath=@{} $sub=4 $path=dir \\FileServer\c$\WorkFolders | where-object {$_.PSIscontainer} $AllPath=$path $cnt=0 For ($o=1; $o -lt $Sub; $o++) { $PPath=$AllPath For ($i=$Cnt; $i -lt $PPath.Count; $i++) { $a = dir $PPath[$i].FullName | where-object {$_.PSIscontainer} if ($a -ne $null) {$AllPath = $AllPath + $a} } $cnt=$PPath.Count } Foreach ($WF in $AllPath) { Trap [System.UnauthorizedAccessException] {"    " + $WF.FullName; continue;} $out=$null $out=(get-acl $WF.FullName).Access | where-object {$_.IdentityReference -match "$name"} if ($out -ne $null) {Write-Host -Fore GREEN " !"; $WF.FullName} }
      
      





フォルダーのみが必要なことに気付くかもしれません。そのため、PSSIscontainerプロパティを使用して出力をフィルター処理します。

$サブ変数は、検索の深さを設定します。 $ AllPath変数には、見つかったすべてのフォルダーへのパスが格納されます。 さて、それでは、既におなじみのジェスチャーで、見つかったフォルダーのACLを調べて、フォルダー内にグループが存在するかどうかを確認します。



最後に



したがって、特定のグループのほぼすべてのサブ土壌許可を見つけることができます。 当然、グループの検索だけでなく、ユーザーとコンピューターの検索にも使用できます(残念ながら、私はめったにこれに遭遇しません)。

このすべて、1つ、または複数の機能から1つのスクリプトを作成するかどうかを決定するのはユーザー次第です。



結論として、私はいくつかの感動的な言葉を言いたいです。仲間、同僚、新しい職場でお互いの人生を複雑にしないようにしましょう。 グループの説明には、その目的について書くのが難しいものはありません。 また、このグループを作成し、アカウントのアクセス許可を切断しないようにするのに複雑なことはありません。 私たち全員がこれをすれば、すぐにそのような記事を書く必要はありません。



All Articles