treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

※https化しました。その影響でしばらくリンク切れなどがあるかもしれませんが徐々に修正していきます。 リンク切れなどのお気づきの点がございましたらコメントなどでご指摘いただけますと助かります。

セキュリティグループからメンバー一覧作成

今日はActive Directory簡単TIPSです。
Active Directoryのグループアカウント、数が増えるとなかなか管理が難しくなってきます。
今日はこのグループアカウント、簡単にグループに登録されているメンバー=ユーザアカウントの一覧、を表示するコマンドについてご報告します。

基本はdsquery

まずはdsqueryコマンドを利用します。グループアカウントのプロパティを見るときに対象のグループをクリックしますが、「どのグループアカウントを見るか」を指定するのにコマンドではdsqueryを利用します。

dsquery group -name [グループ]

そしてdsget

上記のdsqueryでどのグループアカウントについて操作を実行するかを決定したら、具体的にやりたいことをdsgetで指定し、二つのコマンドをパイプシンボルで接続します。
グループに所属するメンバーが見たい、という場合には、
dsget group -members
としますが、このコマンドを

dsquery group -name [グループ] | dsget group -members

という具合に「|」で接続してしまうということです。Linuxでは同じみのパイプシンボルですが、昔はDOS窓と呼ばれるコマンドプロンプトでは利用できませんでした。便利になりましたね。

接続すると

こんな表示になります。
「テストグループ(全員)」がグループ名で、そのグループに所属しているメンバーアカウントを表示してみます。
----------------------------------------------
>dsquery group -name "テストグループ(全員)" | dsget group -members
"CN=テストユーザー1G,OU=Group,OU=lab,DC=domain,DC=local"
"CN=テストユーザー3G,OU=Group,OU=lab,DC=domain,DC=local"
"CN=テストユーザー2G,OU=Group,OU=lab,DC=domain,DC=local"
"CN=User1,OU=bUsers,DC=domain,DC=local"
----------------------------------------------
こんな感じで出力されます。
基本の形はこれです。プロパティ画面で表示される所属ユーザ&所属グループを忠実に表示してくれます。

ちょっと工夫

入れ子(子グループ)のユーザまでを全体として出力したいなぁ、という場合にオプションを付加することで実現が可能です。この場合、dsgetコマンドの最後に「-expand」というオプションを付加します。
そうするとどう出力が変わるかというと…
----------------------------------------------
>dsquery group -name "テストグループ(全員)" | dsget group -members -expand
"CN=テストユーザー1G,OU=Group,OU=lab,DC=domain,DC=local"
"CN=テストユーザー3G,OU=Group,OU=lab,DC=domain,DC=local"
"CN=テストユーザー2G,OU=Group,OU=lab,DC=domain,DC=local"
"CN=User1,OU=bUsers,DC=domain,DC=local"
"CN=テスト ユーザ01,OU=User,OU=lab,DC=domain,DC=local"
"CN=テスト ユーザ11,OU=User,OU=lab,DC=domain,DC=local"
"CN=テスト ユーザ03,OU=User,OU=lab,DC=domain,DC=local"
"CN=テスト ユーザ02,OU=User,OU=lab,DC=domain,DC=local"
----------------------------------------------
この例では動作確認のため、「テストグループ(全員)」というグループにさらにセキュリティグループである「テストユーザー1G」や「テストユーザー2G」「テストユーザー3G」といったグループを登録していました。前のコマンドは忠実にグループ名だけを出力していましたが、「-expand」というオプションを付加すると、「テストユーザー1G」や「テストユーザー2G」「テストユーザー3G」のグループに所属しているユーザ名も表示してくれるようになります。
ここでは「テストユーザー1G」所属ユーザが"テスト ユーザ01""テスト ユーザ11"で「テストユーザー2G」の所属ユーザが"テスト ユーザ02"、「テストユーザー3G」所属ユーザが"テスト ユーザ03"というグループの所属ユーザとなっています。

セキュリティグループのアカウントである「テストユーザー1G」に含まれるユーザ:テスト ユーザ01とユーザ:テスト ユーザ11、なども表示されるようになります。要するにグループを掘り進んでどのユーザが最終的にこのグループに所属することになっているかを一覧で見ることができます。これは便利(?)

もう一つ

dsquery group -name "テストグループ(全員)" | dsget group -members -expand | dsget user -samid

とすると、さらに実際のログインユーザIDの文字列を抜き出すことができます。

dsqueryとdsget、覚えておくとドメインのアカウントやActive Directoryのアクセス権棚卸作業に役立ちそうです。
毎年のようにアカウントの棚卸作業って発生しますからね。