ロード・トゥ・ザ・ホワイトハッカー

ホワイトハッカーはじめました

Active Directoryのデータ処理

Active Directoryの管理

 Active Directoryを使用していると、ゴミデータが黙ったり、変な設定がいつまでも残っていたり、ということがある。

 GUIでマウスをポチポチしながらの確認作業も、いつの間にか気が遠のいていく。。。

 

 ユーザーとグループの出力

saku-jp.hatenablog.com

 

こちらのサイトを参考にさせていただき、ユーザーとグループの情報を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というフィールドに所属グループが表示されている。「;」で区切られて複数表示される。

f:id:chikuwamaruX:20210626093959p:plain

 

これを、以下のようにグループ毎のレコードに分割したい。

f:id:chikuwamaruX:20210626094358p:plain

 

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')

少し欲張って

これが出来るなら、ファイルサーバーのアクセス権限も見直したい。

 

slog.wp.xdomain.jp

 

こちらを参考に、以下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)

#リスト化されたものを複数行にする
acl_group=acl.explode('GROUP')

 

先ほどのデータとマージすれば、どのユーザー、どのグループが、どのフォルダのアクセス権があるのか、というリストが作成できる。

 

今後、ログの解析から、異常値の検出や予測などできればいいなぁ。

 

つ・づ・く