Linuxでユーザーを一覧表示する方法

  • 「cat /etc/passwd」または「getent passwd」などのコマンドを使用して、Linuxでユーザーアカウントを一覧表示できます。
  • 不要なアカウントはシステムを雑然としたものにし、状況によってはセキュリティリスクをもたらす可能性もあります。

Linuxはマルチユーザーオペレーティングシステムであるため、多くのユーザーアカウントを作成するのは簡単です。時間が経つにつれて、どのアカウントが必要なのかを見失いやすくなります。ユーザーアカウントを一覧表示すると、管理しやすくなります。

余分なユーザーアカウントを気にする理由

通常、余分なアカウントは雑然としたものにするだけですが、セキュリティの脆弱性をもたらす可能性もあります。

技術の進歩は、しばしば新しい問題をもたらします。コンピュータが複数のユーザーをサポートできるようになるとすぐに、各人の作業を他のユーザーから隔離し、カプセル化する必要性が明らかになりました。これがユーザーアカウントの概念につながりました。各ユーザーには、名前付きのIDとパスワードがあります。これらは、ユーザーが自分のアカウントにログインするための認証情報です。ユーザーのファイルは、各ユーザーに固有の領域に保管されます。

使用頻度の高いシステムでは、作成したアカウントと不要になったアカウントを見失いやすくなります。セキュリティの観点から、不要になったユーザーアカウントをコンピュータに構成してアクセスできるようにしておくのは、望ましくありません。これらのユーザーは削除する必要があります。

他の人がコンピュータを使用していない場合でも、方法を学ぶため、または管理プロセスを学習して実践するために、いくつかのアカウントを作成したことがあるかもしれません。

最初のステップは、コンピュータに構成されているユーザーアカウントを一覧表示することです。これにより、ユーザーアカウントを確認して、削除できるものを判断できます。ユーザーを一覧表示するには、いくつかの方法があります。使用しているディストリビューションに関係なく、これらの手法は、アプリケーションやユーティリティをインストールすることなく機能するはずです。

catコマンドでユーザーを一覧表示

構成されたユーザーのリストは、各ユーザーに関する情報とともに「/etc/passwd」ファイルに保持されます。これは、一般ユーザーがターミナルウィンドウに一覧表示できるテキストファイルです。「/etc/passwd」ファイルを見るためにsudoを使用する必要はありません。

catコマンドを使用して、「/etc/passwd」ファイルの内容をターミナルウィンドウに送信できます。これにより、ファイルの全内容が一覧表示されます。つまり、人ではなくプロセスやシステムが所有するユーザーアカウントのエントリも表示されます。

cat /etc/passwd

各ユーザーアカウントについて、情報が密に報告された行があります。

「dave」というユーザーアカウントの情報には、コロン「:」で区切られたこれらの情報が含まれています。

  • dave:ユーザーアカウントの名前。通常は、アカウントを所有する人の名前です。
  • x:かつては、アカウントのパスワードがここに保持されていました。現在、パスワードは「/etc/shadow」ファイルに保存されています。「x」は、パスワードがそのファイルにあることを意味します。
  • 1000:このアカウントのユーザーID。すべてのユーザーアカウントには、一意の数字IDがあります。通常、一般ユーザーアカウントは1000から始まり、新しいアカウントごとに1001、1002などの次の空きIDが割り当てられます。
  • 1000:ユーザーが属するデフォルトグループのグループID。通常、デフォルトグループはユーザーIDと同じ値になります。
  • dave,,,:ユーザーに関するオプションの追加情報をまとめたものです。このフィールドには、コンマ「,」で区切られたデータが含まれています。ユーザーのフルネーム、オフィス番号、電話番号などを保持できます。ユーザーアカウント「mary」のエントリには、フルネームがMary Quinnであることが示されています。
  • /home/dave:ユーザーのホームフォルダーへのパス。
  • /bin/bash:このユーザーのデフォルトシェル。

このコマンドからの出力をwcユーティリティにパイプし、-l(行)オプションを使用すると、ファイル内の行をカウントできます。これにより、このコンピュータに構成されているアカウントの数がわかります。

cat /etc/passwd | wc -l

この数値には、システムアカウントとアプリケーションによって作成されたユーザーが含まれています。このコンピュータには約400人の一般ユーザーが構成されています。おそらく、結果ははるかに少なくなります。

これほど多くのアカウントがある場合、lessを使用して「/etc/passwd」ファイルを表示する方が便利です。

less /etc/passwd

lessを使用すると、特定のユーザーアカウントを検索する場合に、出力内で検索することもできます。

awkコマンド

awkコマンドを使用すると、ユーザー名だけを表示できます。これは、多くのユーザーアカウントに対して何らかの処理を行う必要があるスクリプトを作成する場合に役立ちます。ユーザーアカウントの名前を一覧表示し、テキストファイルにリダイレクトすると、大幅に時間を節約できます。その後必要なのは、残りのコマンドを各行にコピーして貼り付けるだけです。

awkにコロン「:」をフィールド区切り文字として使用し、最初のフィールドを印刷するように指示します。-F(フィールド区切り文字)オプションを使用します。

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

ユーザーアカウント名は、他のアカウント情報なしでターミナルウィンドウに書き込まれます。

cutコマンド

cutコマンドを使用して、同じような処理を実行できます。-d(区切り文字)オプションを使用し、-f(フィールド)オプションを使用して最初のフィールドのみを選択する必要があります。

cutr -d: -f1

これにより、システムアカウントやその他の非人間アカウントを含む、すべてのユーザーアカウントが一覧表示されます。

compgenコマンド

compgenコマンドは、-u(ユーザー)オプションとともに使用して、ユーザーアカウントを一覧表示できます。columnコマンドに出力をパイプして、ユーザーアカウントを列に一覧表示します。1行に1つのユーザー名のみが表示される長いリストではなく。

compgen -u | column

繰り返しますが、最初にリストされたユーザーアカウントは人間ではなく、プロセスに属します。

UID MINとUID MAX

ユーザーアカウントには、前に見たように、数値IDが与えられます。通常、一般の人間ユーザーアカウントは1000から始まり、システムの非人間ユーザーアカウントは0から始まります。rootアカウントのIDは0です。

最も低いユーザーIDと最も高いユーザーIDを確認できれば、その情報を使用して、その2つの値の間にあるユーザーアカウントを選択できます。これにより、実際の人間に属するユーザーアカウントのみを選択できます。

Linuxは、UID_MINUID_MAXという構成パラメータを使用して、これらの2つの値を追跡します。これらは「/etc/login.defs」ファイルに保持されます。grepを使用して、これらの値を簡単に確認できます。

-E(拡張正規表現)オプションを使用します。検索文字列は、「/etc/login.defs」ファイル内で「UID_MIN」または「UID_MAX」で始まる行を検索します。キャレット「^」は行の開始を表します。

grep -E '^UID_MIN|^UID_MAX' /etc/login.defs

このコンピュータのユーザーIDの範囲は1000から60,000です。

getentコマンド

getentコマンドは、システムデータベースから情報を取得します。「passwd」をパラメータとして使用して、「/etc/passwd」ファイルのエントリを一覧表示するように指示できます。

getent passwd

これにより、catを使用して取得できるものと同じ読み取り結果が得られます。しかし、getentが優れているのは、「キー」と呼ばれる値を受け入れることです。キーは、getentが報告する情報を決定します。1人のユーザーのエントリを確認したい場合は、コマンドラインでそのユーザーアカウント名を渡すことができます。

getent passwd Sarah

ユーザーアカウント名は、大文字と小文字が区別されることに注意してください。

getent passwd sarah

また、確認したいユーザーアカウントIDの上限と下限を渡すこともできます。一般ユーザーアカウントをすべて確認するには、UID_MINUID_MAXの値を使用できます。

getent passwd {1000..60000}

実行にはしばらく時間がかかります。最終的には、コマンドプロンプトに戻ります。

実行時間が長い理由は、getentが60000までのすべてのユーザーアカウント値と一致するものを探そうとするためです。

最も高いユーザーアカウントIDを確認してみましょう。cutコマンドを使用しますが、今回はフィールド3(ユーザーIDフィールド)を要求します。出力をsortにパイプし、-g(一般的な数値ソート)オプションを使用します。

cut -d: -f3 /etc/passwd | sort -g

人間が所有するユーザーアカウントの最も高いID値は1401です。

ユーザーID 65534は、「nobody」というシステムの概念に割り当てられています。

getent passwd {65534..65534}

したがって、このコンピュータでは、UID_MAX値の60000を使用する代わりに、1500のようなより現実的な値を使用できます。これにより、処理速度が大幅に向上します。また、出力をcutにパイプして、ユーザーアカウントの名前だけを抽出します。

getent passwd {1000..1500} | cut -d: -f1

ユーザーが一覧表示され、すぐにコマンドプロンプトに戻ります。

出力をcutにパイプする代わりに、出力をwcにパイプして、もう一度行数をカウントしてみましょう。これにより、「実際の」ユーザーアカウントの数がわかります。

getent passwd {1000..1500} | wc -l

このコンピュータには、400人の人間が所有するユーザーアカウントが構成されていることが明確になりました。

パワーとシンプルさ

Linuxコンピュータのユーザーアカウントを確認する必要がある場合、これらのテクニックのいずれかが必ずニーズに合います。これらのコマンドはすべてのディストリビューションに存在するはずであり、どれもsudoアクセスを必要としないため、すべてのユーザーが使用できます。