Linux
 Computer >> コンピューター >  >> システム >> Linux

Linuxはユーザーパスワードをどう保存・管理しているのか?仕組みを徹底解説

Linuxはユーザーパスワードをどう保存・管理しているのか?仕組みを徹底解説

Linuxはどのようにして複数ユーザーが存在する環境を効率的に管理しているのでしょうか?本記事では、Linuxがユーザーのパスワードやログイン情報をどのように保存・管理しているのかを詳しく解説します。

/etc/passwd ファイルの中身を見てみよう

ユーザーがユーザー名とパスワードを入力すると、Linuxは「/etc」ディレクトリ内の複数のファイルと照合し、入力されたパスワードが正しいかどうかを確認します。

「/etc/passwd」はユーザー情報を保存する最も重要なファイルの一つです。

Linuxはユーザーパスワードをどう保存・管理しているのか?仕組みを徹底解説

このファイルの最後のエントリは「carbon」というユーザーに対応するものです。各項目はコロン(:)で区切られた複数のフィールドで構成されています。

  • carbon:このエントリが対応するユーザー名。
  • x:パスワードが設定されていることを示します。ただし、実際のパスワードは「/etc/shadow」ファイルに保存されています。もしxではなく!が表示されている場合は、パスワードが設定されていないことを意味します。
  • 1000:このユーザーのユーザーID(UID)。
  • 1000:このユーザーが所属するグループのグループID(GID)。
  • carbon,,,:氏名や電話番号など複数の情報を含むフィールドです。ここでは電話番号が登録されていません。
  • /home/carbon:このユーザーに割り当てられたホームディレクトリの場所。
  • /bin/bash:このユーザーに割り当てられたデフォルトシェル。

次に、電話番号などの情報も登録された別のユーザーを作成してみましょう。adduserコマンドを使って、「pluto」というユーザーをシステムに追加します。

Linuxはユーザーパスワードをどう保存・管理しているのか?仕組みを徹底解説

再び「/etc/passwd」ファイルを確認すると、ユーザー「pluto」の完全な情報を閲覧できます。氏名や番号がカンマ区切りで格納されているこのフィールドは「GECOSフィールド」と呼ばれます。

Linuxはユーザーパスワードをどう保存・管理しているのか?仕組みを徹底解説

ユーザーを作成する際に割り当てられるホームディレクトリやデフォルトシェルの値は、「/etc/adduser.conf」ファイルで指定されています。

Linuxはユーザーパスワードをどう保存・管理しているのか?仕組みを徹底解説

作成される一般ユーザーのユーザーIDは1000から59999までの範囲で割り当てられます。

ユーザー「carbon」はcatコマンドを使うだけで「/etc/passwd」ファイルの内容を閲覧できました。ここで、このファイルのパーミッションを確認してみましょう。

Linuxはユーザーパスワードをどう保存・管理しているのか?仕組みを徹底解説

このファイルに書き込みできるのは「root」ユーザーのみで、他のユーザーは読み取りだけが可能です。すべてのユーザーが読み取れるファイルであるため、パスワードをここに直接保存するのは好ましくありません。そこで、パスワードは別のファイル「/etc/shadow」に保存されます。

/etc/shadow ファイルの中身を見てみよう

次に、「/etc/shadow」ファイルでユーザー「carbon」と「pluto」の保存されたパスワードを確認してみましょう。

Linuxはユーザーパスワードをどう保存・管理しているのか?仕組みを徹底解説

「/etc/shadow」ファイルのパーミッションを見ると、読み書きできるのは「root」ユーザーだけであり、さらに「shadow」グループのメンバーのみが読み取り可能であることがわかります。実際には「shadow」グループは空ですが、構文上このグループが必要とされています。

Linuxはユーザーパスワードをどう保存・管理しているのか?仕組みを徹底解説

「root」としてログインすれば、「/etc/shadow」の末尾10行を表示できます。「/etc/passwd」の各エントリには、このファイルにも対応するエントリが存在します。その形式は以下の通りです。

pluto:$6$JvWfZ9u....:18283:0:99999:7:::
Linuxはユーザーパスワードをどう保存・管理しているのか?仕組みを徹底解説

このファイルでも、各エントリはコロン(:)で区切られた複数のフィールドで構成されています。ユーザー「pluto」のエントリを読み解いてみましょう。

  • pluto:このエントリが対応するユーザー名。
  • $6$JvWfZ9u.$yGFIqOJ....:ハッシュ化されたユーザーのパスワードで、使用されたハッシュアルゴリズムに関する情報も一緒に保存されています。さらに、平文のパスワードとソルト値を組み合わせることでパスワードハッシュが生成されます。
{平文パスワード, ソルト} → ハッシュ化パスワード

このフィールドの内容を分解してみましょう。$記号は区切り文字として使われ、3つのフィールドに分けられています。

$6 $JvWfZ9u. $yGFIqOJ....
  • $6:使用されているハッシュアルゴリズム。主な候補は以下の通りです。
    • $1:MD5
    • $2a:Blowfish
    • $2y:Eksblowfish
    • $5:SHA-256
    • $6:SHA-512
  • $JvWfZ9u.:ソルト値。
  • $yGFIqOJ....:ハッシュ化されたパスワード。

生成されたハッシュ値が、ユーザーの暗号化パスワードとして保存されます。ソルト値はユーザーごとに一意です。たとえ2人のユーザーが同じ平文パスワードを設定していても、一意なソルトを使用することで、それぞれ異なるハッシュ値が生成されます。

続いて、このエントリの残りのフィールドを見ていきましょう。

  • 18283:1970年1月1日から数えて、パスワードが最後に変更された日までの日数。
  • 0:パスワードを変更できるようになるまでの日数。0の場合はいつでも変更可能であることを意味します。
  • 99999:パスワードを必ず変更しなければならなくなるまでの日数。99999の場合は、ユーザーが希望する限り同じパスワードを使い続けられることを示します。
  • 7:パスワードに有効期限が設定されている場合、期限が近づいたことをユーザーに警告する日数。
  • ::::さらに3つのフィールドがありますが、ここでは空になっています。1つ目はパスワード失効後、アカウントが無効化されるまでの猶予日数。2つ目は1970年1月1日から数えてアカウントが無効化された日までの日数。3つ目は将来の使用のために予約されています。これらのフィールドが空であることは、このユーザーの現在のパスワードが失効しておらず、近いうちに失効する予定もないことを示しています。

パスワードの有効性に関わる後半7つのフィールドは、総称して「パスワードエージングポリシー(Password Aging Policy)」の情報を保持しています。

「パスワードエージングポリシー」のデフォルト値は「/etc/login.defs」ファイルで指定されています。これらの値はchageコマンドを使ってユーザーごとに変更できます。

Linuxはユーザーパスワードをどう保存・管理しているのか?仕組みを徹底解説

グループ情報はどこにある?

ユーザー情報とパスワードは「/etc/passwd」と「/etc/shadow」ファイルに保存されます。同様に、グループ情報は「/etc/group」ファイルに保存されています。

Linuxはユーザーパスワードをどう保存・管理しているのか?仕組みを徹底解説

上の画像で強調表示されているのは、ユーザー「carbon」と「pluto」が所属するグループです。Linuxでユーザーを作成すると、そのユーザーは即座にユーザー名と同名のグループに割り当てられます。

グループ関連の操作のために、グループメンバー間でグループパスワードを共有することもできます。xという値は、そのグループのパスワード情報が「/etc/gshadow」ファイルに保存されていることを示します。

ただし、「/etc/gshadow」へのアクセスは「root」ユーザーに制限されています。

Linuxはユーザーパスワードをどう保存・管理しているのか?仕組みを徹底解説

「root」ユーザーなら「/etc/gshadow」のエントリを閲覧でき、その形式は「/etc/shadow」と似ています。「carbon」グループのエントリを見ると、2つ目のフィールドが!になっていることがわかります。これは、このグループにパスワードが設定されていないことを意味します。

Linuxはユーザーパスワードをどう保存・管理しているのか?仕組みを徹底解説

全体の流れをまとめると

ユーザーがログインしようとすると、Linuxは入力されたパスワードを「/etc/shadow」に保存されているそのユーザーのソルト値を使ってハッシュ化します。そして、その結果を保存済みのハッシュ値と比較します。両者が一致すれば、ユーザーはアクセスを許可されます。

関連記事:

  • Linuxでrootパスワードをリセットする方法
  • Linuxのターミナルからユーザーパスワードを管理する方法
  1. LinuxでZipファイルを解凍する方法|GUIとコマンドラインの使い方を徹底解説

    Zipファイルは、ダウンロード速度が遅く1バイトでも節約が重要だった時代ほど頻繁には使われなくなりました。それでも今なお広く普及しているファイル形式の一つであり、いずれ開く必要に迫られることもあるでしょう。使用しているディストリビューションにもよりますが、Zipアーカイブの展開自体は比較的簡単です。とはいえ、より高度な操作方法や応用的なテクニックを知っておけば、いざというときにきっと役立ちます。GUIを使ってZipファイルを解凍する多くのLinuxデスクトップ環境では、Zipファイルの解凍は非常に簡単です。ファイルを右クリックすると複数のオプションが表示され、通常は「ここで展開」や「ここに解凍

  2. Linuxでファイルを完全に削除する方法|復元不能にする5つのテクニック

    Linuxオペレーティングシステムでは、削除したファイルはまずゴミ箱へ移動します。ゴミ箱を空にすると、ファイルはシステムから削除されたように見えます。しかし、データ復元ソフトの需要が高まる昨今、ゴミ箱から削除したファイルでも、ある程度まで復元できてしまうのが実情です。つまり、ゴミ箱から取り除かれたファイルは完全に消去されたわけではなく、単に見えなくなっただけなのです。ファイルはハードディスクのどこかに残り続け、不要な領域を占有します。新しいファイルが作成され、同じセクターに上書き保存されて初めて、物理的には完全に消去されることになります。貴重なディスク容量を回収し、ファイル破損を防ぐためにも、