TT Lab
はじめる
学ぶ 学習パス コース

企業認証の連携

アカウント監査レポートの自動生成

TT Labで続きを見る

目標

人事名簿とLDAPディレクトリを突合して、幽霊アカウント・未作成アカウント・特権の幽霊アカウント・長期未ログインのアカウントをスクリプトで取り出し、隔離処理のあとに監査レポートを作成できるようになります。

なぜ重要なのか

「退職者のアカウントはただちに無効化されますか」は、すべてのセキュリティ監査の最初の質問です。そして、ほとんどの組織は、この突合を四半期に1回、人がExcelで行います。その間に事故が起きます。幽霊アカウントが生まれる理由は、怠慢ではなく構造です。増分同期は削除を検出できず、プロビジョニング(SCIM)がないと、個別のシステムにアカウントがそのまま残ります。この突合を毎週自動で回せれば、監査対応ではなく運用になります。

ステップ

  1. 準備: slapdを1389で起動し、00-base、10-people、20-groupsをロードしておきます。
  2. ディレクトリのすべてのinetOrgPersonを取り出して、/root/audit/ldap_users.csvを作成してください。1行目はuid,cn,ou,titleで、uidの昇順で並べ替えます。
  3. /opt/lab/fixtures/auth/audit/hr_roster.csvを/root/audit/hr.csvにコピーしてください。(内容が同じである必要があります)
  4. ディレクトリにはあるが、HR名簿にはないuidを、1行に1つずつ昇順で/root/audit/ghost.txtに保存してください。
  5. HR名簿にはあるが、ディレクトリにはないuidを、同じ形式で/root/audit/missing.txtに保存してください。
  6. 幽霊アカウントのうち、cn=admins,ou=Groups,dc=labhub,dc=co,dc=krグループのmemberであるものを選んで、/root/audit/critical.txtに保存してください。
  7. /opt/lab/fixtures/auth/audit/lastlogin.csvを基準に、2026-08-01を基準に90日以上ログインがないuidを、/root/audit/stale.txtに昇順で保存してください。(ファイルにないuidは「ログイン履歴なし」として、対象に含めます。)
  8. 幽霊アカウントをすべてou=Disabled,dc=labhub,dc=co,dc=krの下へ移動させてください。(ou=Disabledのエントリを先に作る必要があります。)移動後は、ou=Peopleでは照会されない必要があり、ou=Disabledのエントリ数が幽霊アカウント数と同じである必要があります。
  9. /root/audit/report.mdを作成してください。## 총계、## 유령 계정、## 미생성 계정、## 특권 계정、## 휴면 후보、## 조치 계획(韓国語の見出しで、順に総計、幽霊アカウント、未作成アカウント、特権アカウント、休眠の候補、対応計画を意味します)の6つのh2見出しが必要で、次の5行が正確に含まれている必要があります。
    total=<디렉터리 전체 사용자 수(격리 포함)>
    ghost=<유령 계정 수>
    missing=<미생성 계정 수>
    critical=<특권 유령 계정 수>
    stale=<90일 미접속 계정 수>
    
    (山括弧の中の韓国語はプレースホルダーで、順にディレクトリの全ユーザー数(隔離を含む)、幽霊アカウント数、未作成アカウント数、特権の幽霊アカウント数、90日ログインがないアカウント数です。)

参考

ディレクトリのアカウント抽出

ディレクトリのすべてのinetOrgPersonを取り出して、/root/audit/ldap_users.csvを作成してください。 1行目はuid,cn,ou,titleで、uidの昇順で並べ替えます。

必要な属性だけを取り出す必要があります。出力形式をCSVにそろえるには、ldapsearchの結果を加工する必要がありますが、-LLLで余分なものを減らしてから始めてください。

人事名簿の確保

/opt/lab/fixtures/auth/audit/hr_roster.csvを/root/audit/hr.csvにコピーしてください。(内容が同じである必要があります)

元のファイルには触れず、コピーで作業します。件数を先に数えておけば、あとの集合演算の結果を検算できます。

幽霊アカウントの抽出

ディレクトリにはあるが、HR名簿にはないuidを、1行に1つずつ昇順で/root/audit/ghost.txtに保存してください。

両方のuid一覧をソートしておき、差集合を求めます。commは入力がソートされていないと正確ではありません。

未作成アカウントの抽出

HR名簿にはあるが、ディレクトリにはないuidを、同じ形式で/root/audit/missing.txtに保存してください。

方向が逆なだけの差集合です。この一覧は、セキュリティの問題ではなく、業務遅延の指標だという点を覚えておいてください。

特権の幽霊アカウント

幽霊アカウントのうち、cn=admins,ou=Groups,dc=labhub,dc=co,dc=krグループのmemberであるものを選んで、/root/audit/critical.txtに保存してください。

幽霊アカウントの一覧と、管理者グループのメンバー一覧の積集合です。監査で最優先の対応対象になる部分です。

長期未ログインのアカウント

/opt/lab/fixtures/auth/audit/lastlogin.csvを基準に、2026-08-01を基準に90日以上ログインがないuidを、/root/audit/stale.txtに昇順で保存してください。 (ファイルにないuidは「ログイン履歴なし」として、対象に含めます。)

基準日が固定されて初めて、結果を再現できます。日付の計算は、dateコマンドで秒に変換して比較すれば簡単です。

隔離処理

幽霊アカウントをすべてou=Disabled,dc=labhub,dc=co,dc=krの下へ移動させてください。 (ou=Disabledのエントリを先に作る必要があります。) 移動後は、ou=Peopleでは照会されない必要があり、ou=Disabledのエントリ数が幽霊アカウント数と同じである必要があります。

アカウントを削除せずに隔離する理由を考えてみてください。移動後もデータは残る必要があり、「有効なユーザー」の検索からは外れる必要があります。

監査レポートの作成

/root/audit/report.mdを作成してください。 ## 총계、## 유령 계정、## 미생성 계정、## 특권 계정、## 휴면 후보、## 조치 계획(韓国語の見出しで、順に総計、幽霊アカウント、未作成アカウント、特権アカウント、休眠の候補、対応計画を意味します)の6つのh2見出しが必要で、次の5行が正確に含まれている必要があります。

total=<디렉터리 전체 사용자 수(격리 포함)>
ghost=<유령 계정 수>
missing=<미생성 계정 수>
critical=<특권 유령 계정 수>
stale=<90일 미접속 계정 수>

(山括弧の中の韓国語はプレースホルダーで、順にディレクトリの全ユーザー数(隔離を含む)、幽霊アカウント数、未作成アカウント数、特権の幽霊アカウント数、90日ログインがないアカウント数です。)

レポートの価値は、数字とトレンドにあります。前のステップで求めた数値をそのまま引用し、各項目に対応計画を付けてください。