Active Directoryのデータ処理
Active Directoryの管理
Active Directoryを使用していると、ゴミデータが黙ったり、変な設定がいつまでも残っていたり、ということがある。
GUIでマウスをポチポチしながらの確認作業も、いつの間にか気が遠のいていく。。。
ユーザーとグループの出力
こちらのサイトを参考にさせていただき、ユーザーとグループの情報をCSV出力する。
- ユーザーの一覧のCSVファイル出力
csvde -u -f c:\adlist_u.csv -r objectCategory=user -l cn,description,memberOf
- グループの一覧のCSVファイル出力
csvde -u -f c:\adlist_g.csv -r objectCategory=group -l cn,description
ここまではOKだけど、出力した2つのファイルをどうやって結合するか。
ユーザーデータの構造
ユーザーは複数のグループに所属できる。
adlist_u.csvのデータを見ると、memberOfというフィールドに所属グループが表示されている。「;」で区切られて複数表示される。
これを、以下のようにグループ毎のレコードに分割したい。
Pythonでやってみる
今後ログの分析などを考えて、あと、少しカッコつけて、Pythonでやってみる。
jupyter notebookの環境で以下のコードを入力して実行。
import pandas as pd
#UTF-16でエンコードする
user = pd.read_csv('adlist_u.csv',encoding='UTF-16')
#所属グループを分割する
user['GROUP']= user['memberOf'].str.split(';', expand=False)
#リスト化されたものを複数行にする
user_group=user.explode('GROUP')
#CSV出力
user_group.to_csv('user_group.csv',encoding='utf_8_sig')
explodeが一撃で行の分割をやってくれる。
グループの一覧とユーザーの一覧を結合させる。
#グループの一覧を読み込み
group = pd.read_csv('adlist_g.csv',encoding='UTF-16')
#結合用フィールド作成
group['GROUP']=group['DN']
#結合
mg = pd.merge(group,user_group,on='GROUP', how='outer')
#CSV出力
mg.to_csv('mg.csv',encoding='utf_8_sig')
少し欲張って
これが出来るなら、ファイルサーバーのアクセス権限も見直したい。
こちらを参考に、以下PowerShellコマンドでCSVを出力する。
Get-ChildItem -path \\aa-server\share\*\*\* | where {$_.mode -match "d"} | Get-Acl | Select-object @{Label="Path";Expression={Convert-Path $_.Path}}, AccessToString |Export-Csv acl.csv -encoding Default
※階層の深さは\*で追加する。その深さの階層しか見ないので注意
CSVデータの AccessToStringがアクセス許可されたグループ・ユーザーで、改行コードで分割できる。
import pandas as pd
#UTF-16でエンコードする
acl = pd.read_csv('acl.csv',encoding='UTF-8')
#ACLを分割する
acl['GROUP']= acl['AccessToString'].str.split('\n', expand=False)
先ほどのデータとマージすれば、どのユーザー、どのグループが、どのフォルダのアクセス権があるのか、というリストが作成できる。
今後、ログの解析から、異常値の検出や予測などできればいいなぁ。
つ・づ・く