【ITニュース解説】The Hidden Danger of Old Users: Why I Regularly Audit /etc/passwd on My Linux Servers | by Faruk Ahmed | nextgenthreat
2025年09月25日に「Dev.to」が公開したITニュース「The Hidden Danger of Old Users: Why I Regularly Audit /etc/passwd on My Linux Servers | by Faruk Ahmed | nextgenthreat」について初心者にもわかりやすく解説しています。
ITニュース概要
Linuxサーバーに残された古いユーザーアカウントは、攻撃者に悪用される大きなセキュリティリスクとなる。使われなくなったアカウントは権限が放置されたり、脆弱なパスワードのままであることが多く、システムの防御を弱めるためだ。`/etc/passwd`を定期的に監査し、不要なアカウントを適切に管理することが、サーバーの安全を保つ上で非常に重要だ。
ITニュース解説
システムエンジニアを目指す皆さんが、Linuxサーバーのセキュリティについて考える際、一般的にファイアウォールを設置したり、rootユーザーでの直接ログインを禁止したりすることを思い浮かべるかもしれない。しかし、これらだけでは十分ではない場合がある。実は、サーバー内にひっそりと存在する「古いユーザーアカウント」が、予期せぬ大きなセキュリティリスクとなり得ることが、今回の記事で指摘されている重要なポイントだ。
古いユーザーアカウントとは、システムから既に離れた開発者のアカウント、一時的に作成されたテスト用のアカウント、あるいは何らかの目的で作成されたものの、今はもう使われていないシステムユーザーアカウントなどを指す。これらは時間の経過とともに忘れ去られ、放置されがちだが、実は攻撃者にとって非常に魅力的な標的となり得る。
なぜ古いユーザーアカウントが危険なのだろうか。その理由はいくつかある。第一に、これらのアカウントは、通常行われるセキュリティパッチの適用や権限の見直しから見落とされやすい。システム管理者やセキュリティ担当者が、現在活発に利用されているアカウントにのみ注意を払い、使われていないアカウントの管理がおろそかになりがちだからだ。もし、古いアカウントにセキュリティ上の脆弱性が見つかっても、誰も気づかずに放置される可能性がある。
第二に、古いアカウントの中には、いまだに「sudo(スーパーユーザー権限でコマンドを実行する)アクセス権」が残されていたり、非常に「弱いパスワード」が設定されていたりするケースがある。例えば、過去に高い権限を持っていた開発者のアカウントが、退職後も権限が剥奪されずに残っている場合だ。攻撃者がこのようなアカウントを見つけ出し、パスワードを推測したり、ブルートフォース攻撃(総当たり攻撃)などで突破したりできれば、一気にシステム内部へ侵入される恐れがある。
第三に、もし古いアカウントの一つが攻撃者によって侵害された場合、それは攻撃者がサーバー環境内で「横展開」するための足がかりとなり得る。横展開とは、一つのシステムへの侵入を起点として、同じネットワーク内の他のシステムやサービスへと攻撃範囲を広げていく行為を指す。古いアカウントが持っている権限やアクセス情報が、他の重要なシステムへの侵入に悪用される可能性があるのだ。このように、たった一つの見落とされたアカウントが、システム全体のセキュリティを脅かす重大な脆弱性になりかねない。
このような「隠れた危険」からサーバーを守るために、記事の筆者は「/etc/passwd」ファイルを定期的に監査することを強く推奨している。/etc/passwdファイルは、Linuxシステムにおいて非常に重要なファイルの一つで、システム上のすべてのユーザーアカウントに関する基本情報が格納されている。具体的には、ユーザー名、ユーザーID(UID)、グループID(GID)、ホームディレクトリ、ログインシェルなどの情報が含まれている。このファイルを見ることで、どのユーザーがシステムに存在し、どのような設定になっているかを知ることができるのだ。
監査の実践として、記事では具体的なコマンドが紹介されている。一つ目のコマンドは、「awk -F: '$3 >= 1000 && $1 != "nobody" { print $1 }' /etc/passwd」というものだ。このコマンドの意図は、通常の「人間が利用するユーザーアカウント」をリストアップすることにある。Linuxシステムでは、ユーザーID(UID)という数値でユーザーが識別され、通常、システムが内部的に利用するアカウント(例えばデーモンプロセス用のアカウントなど)はUIDが1から999までに割り当てられることが多い。一方、人間がログインして利用する一般ユーザーアカウントは、UIDが1000以上から割り当てられるのが一般的だ。このコマンドでは、awkというテキスト処理ツールを使って、/etc/passwdファイルをコロン(:)区切りで読み込み(-F:)、UIDが1000以上($3 >= 1000)で、かつ"nobody"という特殊なユーザー名ではない($1 != "nobody")アカウントのユーザー名($1)のみを表示する。これにより、現在システム上に存在する人間が使用している可能性のあるアカウントの一覧を得ることができる。
さらに詳細な情報を得るためのコマンドとして、「getent passwd | awk -F: '$3 >= 1000 && $7 != "/usr/sbin/nologin" && $7 != "/bin/false"' | cut -d: -f1,6,7」が紹介されている。getent passwdコマンドは、/etc/passwdファイルだけでなく、他の情報源(例えばLDAPなど)も含めてユーザー情報を取得する。その出力を再びawkコマンドで処理する。ここでは、UIDが1000以上のアカウントに加えて、ログインシェルが「/usr/sbin/nologin」や「/bin/false」ではないアカウントを抽出している。これらのシェルは、そのユーザーがシステムにログインできないように設定されていることを意味する。つまり、このコマンドは「人間が使う可能性があり、かつ実際にログインできるユーザー」を絞り込み、そのユーザー名、ホームディレクトリ、ログインシェルを表示する(cut -d: -f1,6,7で指定されたフィールド)。これにより、より詳細な情報に基づいて、利用されていない不審なアカウントがないかを確認できる。
これらのスクリプトを実行してリストアップされたアカウントについて、本当にそのアカウントが必要なのか、現在も利用されているのか、不必要な権限が付与されていないかなどを一つ一つ確認することが、セキュリティ監査の重要なステップとなる。もし不要なアカウントが見つかれば、適切な手順で削除するか、少なくともログインできないように設定変更すべきだ。また、必要なアカウントであっても、パスワードポリシーが適切に適用されているか、不要なsudo権限が付与されていないかなどを定期的に見直す必要がある。
サーバーを安全に運用するためには、目に見える大きな脅威だけでなく、今回のように見落とされがちな小さな部分にも注意を払うことが極めて重要だ。古いユーザーアカウントの定期的な監査は、システムエンジニアが身につけるべき基本的なセキュリティ習慣の一つと言えるだろう。こうした地道な作業が、サーバー全体の堅牢性を高め、情報漏洩やシステム侵害といった重大なリスクからシステムを守ることに繋がる。セキュリティは一度設定すれば終わりではなく、常に変化する状況に合わせて見直し、改善していく継続的な努力が必要不可欠だ。