「サーバーに知らないユーザーが増えている」——気づいたときには手遅れ、というケースは珍しくありません。2026年8月には19年以上見過ごされていたLinuxカーネルのローカル権限昇格の脆弱性(CVE-2026-43456)が国内のセキュリティ企業から報告され、攻撃者が一般ユーザーからroot権限を奪う手口が改めて注目されました。root権限を奪った攻撃者が次にやることの一つが、あとで戻ってくるための「裏口ユーザー」の作成です。この記事では、/etc/passwdというファイルを使って、UID(ユーザーを識別する番号)の重複や見慣れない管理者アカウントをコピペのコマンドだけで点検する方法を、Ubuntu/Debian環境を基準に解説します。

なぜ/etc/passwdの点検が必要なのか——侵入者は「ユーザー追加」で居座る

/etc/passwdは、そのLinux機に存在するすべてのユーザーアカウントの一覧が書かれたファイルです。パスワードそのものは別ファイル(/etc/shadow)に暗号化されて入っていますが、「誰が」「どのUIDで」「どんな権限で」存在しているかはこのファイルを見ればわかります。

攻撃者が何らかの方法でroot権限を一時的に取得できたとき、その場限りで終わらせず後日また入り直せるように、正規の管理者に紛れる名前のユーザーを追加したり、既存の一般ユーザーのUIDをroot(UID 0)と同じ番号に書き換えたりする手口があります。root権限の奪取自体はカーネルの脆弱性修正で防げても、すでに仕込まれた裏口ユーザーはOSをアップデートしただけでは消えません。だからこそ、脆弱性対応とは別に/etc/passwdそのものを定期的に見る必要があります。

/etc/passwdの各行は次の7つのフィールドを:で区切って並べたものです。

フィールド

内容

点検で見るポイント

1

ユーザー名

見覚えのない名前・紛らわしい名前がないか

2

パスワード欄

現在はx固定(実体は/etc/shadow)

3

UID(ユーザーID)

他のユーザーと重複していないか、rootと同じ0でないか

4

GID(所属グループID)

管理者グループに勝手に入っていないか

5

コメント欄

空欄か、不自然な説明が入っていないか

6

ホームディレクトリ

心当たりのない場所でないか

7

ログインシェル

本来ログイン不要なアカウントに/bin/bash等が設定されていないか

UID重複を見つける——rootと同じ権限を持つ「隠れ管理者」の手口

UIDが重複するとどうなるか

Linuxはユーザー名ではなくUID(数字)で権限を判定します。そのため、別名のユーザーでもUIDを0に設定すればrootと全く同じ権限を持てます。一見「ただの一般ユーザー」に見える名前でも、UIDがrootと同じなら実質は管理者アカウントです。この手口はログイン画面やwhoamiの見た目だけでは気づけないため、UIDを直接確認する必要があります。

実行コマンドと出力の見方

まずUID全体に重複がないかをまとめて確認します。sudoは不要です(閲覧のみのため)。

awk -F: '{print $3}' /etc/passwd | sort | uniq -d

これは/etc/passwdの3列目(UID)だけを取り出し、重複している番号だけを表示するコマンドです。

  • 正常:何も出力されない(空行のまま止まる)
  • 異常:01000のような数字が1行でも表示される

数字が出た場合は、そのUIDを持つユーザー名を特定します。

awk -F: -v uid=0 '$3 == uid {print $1}' /etc/passwd

uid=0の部分を、先ほど表示された重複UIDに置き換えて実行してください。root権限(UID 0)のユーザーだけを直接洗い出すなら次のコマンドが簡潔です。

awk -F: '$3 == 0 {print $1}' /etc/passwd

出力例(正常時):

root

root以外の名前がここに1行でも並んだら、そのアカウントはroot権限を持つ裏口ユーザーの疑いが強い状態です。次章の対処に進んでください。

見慣れないアカウント・不正なシェルをチェックする

全ユーザー一覧を洗い出す

UIDが重複していなくても、正規の管理者を装った新規アカウントが追加されているケースもあります。ユーザー名・UID・ホームディレクトリ・シェルをまとめて一覧表示します。

awk -F: '{print $1, $3, $6, $7}' /etc/passwd

出力例:

root 0 /root /bin/bash
daemon 1 /usr/sbin /usr/sbin/nologin
sshd 105 /run/sshd /usr/sbin/nologin
kaz 1000 /home/kaz /bin/bash

見るポイントは2つです。

  • UID 1000未満(システム用アカウント)なのにシェルが/bin/bash/bin/shになっている——本来これらは/usr/sbin/nologin/bin/falseでログイン不可のはずです。ログインできる設定に変わっていたら要調査です
  • 自分で作った覚えのないUID 1000以降のユーザーがいる——Ubuntu/Debianでは通常UID 1000以降が人間用のアカウントです。心当たりのない名前が並んでいないか確認してください

SUIDが付いた不審なプログラムと組み合わせて権限を奪われるケースについては、SUID/Capability権限昇格チェック2026年8月版で別途扱っています。あわせて確認すると点検の抜けが減ります。

sudo/wheelグループに入っているユーザーを確認する

UID 0を名乗らなくても、sudoコマンドが使えるグループに入れられれば実質的に管理者権限を握れます。Ubuntu/Debianではsudoグループ、AlmaLinux・Rocky LinuxなどRHEL系ではwheelグループが管理者権限の入口です。

getent group sudo

出力例:

sudo:x:27:kaz

コロンの後、最後に並んでいるのがsudo権限を持つユーザー名です。ここに自分が追加した覚えのない名前が並んでいたら異常です。

最終ログイン日時から「使われているのに知らないアカウント」を探す

存在は把握していても、実際に使われているかどうかまでは見落としがちです。lastlogで各アカウントの最終ログイン日時を確認します。

lastlog | grep -v "Never logged in"

これは「一度もログインしていない」行を除外し、実際にログイン履歴があるアカウントだけを表示します。自分と同僚以外の名前がここに出てきた場合、そのアカウントは第三者に使われている可能性があります。

異常が見つかったときにやること

ここまでのコマンドはすべて閲覧のみで、実行しても環境には何も影響しません。しかし異常なアカウントを見つけたあとの対処は、システムの設定変更を伴うため慎重に行ってください。

  1. まず作業前に/etc/passwdをバックアップする:sudo cp /etc/passwd /etc/passwd.bak.$(date +%Y%m%d)。何かおかしくなった場合はこのファイルを元の場所に戻せば復旧できます
  2. 不審なアカウントをすぐには消さず、まずロックする:sudo passwd -l ユーザー名でログインだけを止められます。元に戻すにはsudo passwd -u ユーザー名です。いきなり削除すると、侵入経路の調査に使える手がかり(いつ作られたか、何に使われたか)も一緒に失われます
  3. 他に侵入の痕跡がないか合わせて確認する:SSHのログイン試行や鍵の突き合わせはSSHログとauthorized_keys突合2026年8月版の手順で調べられます。裏口ユーザーが1つ見つかった場合、他にも仕込まれている可能性があるため、UID重複チェックとsudoグループ確認はもう一度やり直してください
  4. 調査が終わり不要と確認できたら削除する:sudo userdel -r ユーザー名(-rでホームディレクトリごと削除)。サーバーを他の担当者と共有している場合は、削除前に本当に不要なアカウントか確認を取ってください

IPAが2026年7月30日に出した夏季休暇前の注意喚起でも、休暇に入る前の対策として「アカウントの見直し」が挙げられています。長期不在の前後は特に、ここまでのチェックを一度通しておくと安心です。

UIDの重複やsudoグループのメンバーは、放置していても普段の操作画面には出てこないため、定期的にコマンドで確認しない限り気づけません。月に一度でよいので、今回のawkgetentのコマンドをメモしておき、思い出したときに実行する習慣をつけてください。あわせてSUID/Capability権限昇格チェックも定期点検に加えると、権限まわりの異常を広くカバーできます。