Linuxサーバーを引き継いだとき、最初に問うべきことは必ずしも「現在誰が接続しているか?」ではありません。本当の問いはしばしば次のとおりです。 どのアカウントがまだ存在しますか誰がログインできるか、そして誰が機密性の高い権限を持っているか。

このガイドでは、慌てることなく、ユーザーをきちんと一覧表示していきます。 /etc/passwd次に、最初に確認する必要のあるアカウントを特定します。ここで一つ言っておきますが、名前が奇妙に思えるからといって、何も削除しないでください。Linuxでは、多くのアカウントがサービス用です。
システムアカウントと人間ユーザーアカウントを混同せずに、/etc/passwd を読み取ってください。
ファイル /etc/passwd ローカルで認識されているアカウントの一覧を表示します。パスワードは平文で表示されませんが、アカウント名、UID、GID、ホームディレクトリ、シェルなどの有用な情報を提供します。
cat /etc/passwd
線は次のようになります。
nathan:x:1000:1000:Nathan Martin:/home/nathan:/bin/bash
各項目はコロンで区切られています。まずは、名前、UID、ホームディレクトリ、シェルに注目してください。
cut -d: -f1,3,6,7 /etc/passwd
多くのディストリビューションでは、ユーザーアカウントはUIDで始まります。 千システムアカウントはUIDが低い場合が多い、またはシェルは /usr/sbin/nologin または /bin/falseこれは普遍的なルールではないが、良い最初のフィルターとなる。
awk -F: '$3 >= 1000 && $3 < 60000 {print $1, $3, $6, $7}' /etc/passwd
のマニュアルページ passwd(5) 正確なファイル形式が詳細に記載されています。古いサーバーやや特殊な配布環境を監査する必要がある場合に備えて、手元に置いておきましょう。
アカウントがローカルのみの場合はgetentを優先します
単純な姿勢では、 /etc/passwd 多くの場合、これで十分です。LDAP、Active Directory、SSSD、またはその他のディレクトリと統合されたサーバーでは、不完全な場合があります。その場合は、以下を使用してください。 ゲテントこれは、システムによって構成されたデータベースに対してクエリを実行します。
パスワードを取得する
特定のアカウントを確認するには:
getent passwd nathan
ユーザーUIDを含むアカウントのより読みやすいリストを生成するには:
getent passwd | awk -F: '$3 >= 1000 && $3 < 60000 {print $1, $3, $6, $7}'
社内マシンではこの方法を好みます。ローカルファイルに書き込まれていないという理由だけでアカウントが存在しないと決めつけることを避けられるからです。コマンドは以下に記載されています。 getent(1)。
機密性の高いグループと権限を確認してください
アカウントの一覧表示は良いことです。どのアカウントが損害を与える可能性があるかを知ることはさらに良いことです。特定のユーザーから始めましょう。 ID :
IDネイサン
グループネイサン
UID、プライマリグループ、セカンダリグループが表示されます。詳しく調べるべきグループは分布によって異なりますが、 須藤、 車輪、 管理者、 港湾労働者 あるいは、特定のアプリケーショングループは、単なるユーザーアクセス以上の機能を提供することができます。
getentグループsudo
ゲテントグループホイール
getentグループdocker
getentグループ管理者
アカウントが表示された場合 須藤 または 車輪sudoers の設定も確認してください。管理者権限を持つ古い忘れられたアカウントは、後々問題を引き起こす典型的な例です。この点については、 Linuxでsudoを使いこなす この最初のチェックは良い補完となる。
注文 id(1) そして グループ(1) それらはシンプルなものですが、アカウントの実際の規模をすぐに把握することができます。
ログインできるアカウントを特定する
リストされているアカウントすべてがログイン用とは限りません。現在インタラクティブシェルが稼働しているアカウントのみを絞り込むには、シェルをフィルタリングできます。
getent パスワード | grep -E '/bin/(bash|sh|zsh|fish)$'
このフィルターは完璧ではありませんが、確認するための初期リストを提供します。次に、アカウントに個人用フォルダがあるかどうかを確認します。
getent passwd | awk -F: '$6 ~ /^/home/ {print $1, $6, $7}'
ls -1 /home
SSH経由で公開されているサーバーを監査する場合は、ユーザーディレクトリに存在する鍵も確認してください。
sudo find /home -maxdepth 3 -path '*/.ssh/authorized_keys' -type f -ls
間違ったアカウントにSSHキーがあると、アクセスが維持される可能性があります。認証設定を整理する必要がある場合は、次の記事も読み直してください。 UbuntuでSSHキーを生成する。
結論を急ぎすぎずに、最新の接続状況を確認してください。
現在オンラインになっているユーザーを確認するには:
誰が
w
最近の履歴:
最後 -a | ヘッド
sudo lastlog | head -30
前回のログ これはアカウントが一度もログインされていないことを示している可能性がありますが、それだけでアカウントが役に立たないと断定することはできません。アカウントはサービス、スケジュールされたタスク、アプリケーションに使用されている場合もあれば、バックアップ手順のために作成された場合もあります。これらのコマンドは、自動的な判断ではなく、あくまでもシグナルとして使用してください。 最後のログ(8) 利用可能なオプションを指定します。
不審な接続後に異常を探す場合は、システムログも併せて確認してください。
sudo journalctl -u ssh -b
sudo journalctl -p warning..alert -b
私たちのガイド journalctlと前回の起動時のログ これは、無作為に検索することなく、この部分を構成するのに役立ちます。
掃除前に使う小さなチェックリスト
- アカウントの正確なスラッグ 名前、UID、ホームディレクトリ、シェルをメモしておいてください。
- 敏感なグループ : コントロール
須藤、車輪、港湾労働者、管理者およびアプリケーショングループ。 - SSHアクセス ファイルを検索する
許可されたキー変更を加える前に必ずコピーを保管してください。 - 最後のアクティビティ : クロス
最後、前回のログそして新聞は、たった一つの手がかりに基づいてそれらを撤去することなく。 - 関連サービス アカウントを無効にする前に、そのアカウントがサービスまたはアプリケーションに属しているかどうかを確認してください。
アカウントが本当に不要と思われる場合は、フォルダを削除するのではなく、まずロックするかログインを無効にすることから始めましょう。サーバー上では、常に状況を把握し、サービスをテストしてからクリーンアップするようにしています。この方法は劇的な変化にはつながりませんが、「不明」のアカウントが実際には毎日使用されていたためにアプリケーションが動作しなくなるといった事態を防ぐことができます。
sudo passwd -l old_account
sudo systemctl --失敗
sudo journalctl -p warning..alert -b
このチェックの後、人間のアカウント、システムアカウント、管理者権限、SSHアクセス、最近のアクティビティなど、より明確なビューが得られます。このチェックをアクティブなサービスにリンクするには、次に次の方法を使用できます。 systemctlサービスの一覧 そして、実際にマシン上で何が実行されているのかを確認してください。