2. ユーザ情報がシステムに保存される仕組み

2.1. /etc/passwd について

ほとんど全ての Linux ディストリビューション(それと商用の *nix など)では、 ユーザ情報は /etc/passwd に保存されています。このファイル はテキストファイルであり、 ユーザのログイン名、暗号化されたパスワード、固有のユーザ ID 番号(uid と呼ばれ ます)、グループ ID 番号(gid と呼ばれます)、任意のコメント(通常は、ユーザの 実名、電話番号などが書かれています)、ホームディレクトリ、そして好みのシェル などの情報を含んでいます。/etc/passwd の典型的なエントリー は、以下のようなものです。

  pete:K3xcO1Qnx8LFN:1000:1000:Peter Hernberg,,,1-800-FOOBAR:/home/pete:/bin/bash

ご覧の通り、非常にストレートな表記になっています。個々のエントリーは上記に見 られるように 6 つのフィールドを持ち、それぞれのフィールドはコロンで区切られま す。もしこれが、わたしを悩ませたユーザ認証の仕組みと同じくらい複雑であってく れたなら、この HOWTO は必要なかったでしょう。

2.2. シャドウパスワード

読者自身の /etc/passwd ファイルを見れば、実際は以下のよう になっているのが分かるでしょう。

  pete:x:1000:1000:Peter Hernberg,,,1-800-FOOBAR:/home/pete:/bin/bash

上記では、暗号化されたパスワードはどこに行ったのでしょう?それがどこへ行った かをお話しする前に、若干の説明が必要です。

/etc/passwd ファイルには、全ユーザの情報とその暗号化された パスワードが含まれています。しかし、そのファイルはすべてのユーザに閲覧可能と なっています。つまり、システム上の全員の暗号化されたパスワードが入手可能なわけ です。この点、確かにパスワードは暗号化されてはいますが、パスワードのクラッキン グツールの入手はわけもないことです。したがって、このセキュリティ上の脅威の高ま りに対抗するために、シャドーパスワードが開発されました。

シャドーパスワードを有効にしたシステムでは、/etc/passwd の パスワードが書かれていた部分は、x で置き換えられ、実際の暗号 化されたユーザパスワードは /etc/shadow ファイルに保存され ます。/etc/shadow はルートユーザだけしか読めないので、悪意 のあるユーザが同僚のパスワードをクラックすることはできません。 /etc/shadow の各エントリーは、ユーザのログイン 名、暗号化されたパスワード、そしてパスワードの有効期限に関係するいくつかの フィールドからなっています。典型的なエントリーは、以下のようなものです。

    pete:/3GJllg1o4152:11009:0:99999:7:::
   

2.3. /etc/group/etc/gshadow

グループ情報は /etc/group ファイルに保存されます。これは 前記の /etc/passwd と似たもので、エントリーにはグループ 名、パスワード、id 番号(gid)、それに カンマで区切られたグループメンバーのフィールドが含まれています。 /etc/group のエントリーは以下のようなものです。

   pasta:x:103:spagetti,fettucini,linguine,vermicelli
  

パスワードフィールドの "x" を見てお分かりのように、 グループパスワードもシャドー化できます。グループがグループ自体のパスワードを持 つことはほとんどないのですが、シャドー化されたグループパスワードの情報は /etc/gshadow ファイルに保存されるということに注意してくだ さい。

2.4. MD5 暗号化パスワード

伝統的には、Unix のパスワードは標準的な crypt() 関数で暗号 化されていました。( crypt() 関数の詳細については、crypt(3) のマニュアルページをご覧ください。) しかし、コンピュータの高速化が進むにつれ、この関数で暗号化されたパスワードを クラックすることが容易になりました。インターネットが登場すると、多数のホストに 対してパスワードクラッキングを実行できるようなツールも入手可能になりました。 そこで、新しいディストリビューションの多くにはより協力な MD5 ハッシュアルゴリ ズムでパスワードを暗号化するオプション機能が同梱されるようになっています。 ( MD5 ハッシュアルゴリズムについての詳しい情報は、RFC1321 をご覧ください) MD5 パスワードはパスワードクラッキングの脅威を完全に取り除くものではありませ んが、パスワードのクラッキングをずっと難しくすることは確かです。

2.5. 煩雑さの解消

以上でお分かりのように、ユーザ認証のための情報がシステムに保存される方法には 何種類もあります。(MD5 で暗号化しないシャドウパスワード、MD5 で暗号化した /etc/passwd などなど) そうだとすると、loginsu などのプログラムは、ユーザのパスワード認証 の方法をどうやって知るのでしょうか? さらに、システム上のパスワードの保存方法を変更したいときはどうすればいい のでしょう?ユーザのパスワードを必要とするプログラムは、そのパスワードの保存 方法が変更されたことをどうやって知るのでしょう? PAM がその答えになります。