]-->

## User Authentication HOWTO

2000/05/02
Peter
Hernberg
日本語訳
千旦裕司

この文書では、Linux スシステム上で、ユーザ情報とグループ情報の保存方法、 ユーザ認証の方法 (PAM)、そしてそのユーザ認証を安全に行う方法について説明し ます。

User Authentication
user
password
PAM
NIS
/etc/passwd
/etc/shadow
/etc/group
/etc/gshadow

## はじめに

### この文書を書いた経緯

手元の家庭内ネットワークにいくつか(ほとんど不必要な)ネットワークサービスを追加 しようとしたとき、わたしはいつも認証の問題で泥沼にはまりました。そこで、わた しは意を決して、 Linux システム上での認証の仕組みを理解して HOWTO を書こうと 考えました。そして、その計画をわたしのシニアプロジェクトと呼ぶことにしたので す。等閑視されがちですが非常に重要な、認証というシステム管理上の問題点につい て、この文書が読者の理解の一助となればさいわいです。

### 新バージョンについて

わたしのドメインが順調に立ち上がれば、この文書の最新バージョンはそこで入手で きます。それまでは、http://www.linuxdoc.org だけで我慢です。

### フィードバック

コメント、訂正、提案、火事、UFO の目撃談は、こちらまでお願いします。 petehern@yahoo.com

### バージョン小史

v0.1 (May 13, 2000) 最初のバージョン (リリースされず)

v0.3 (May 14, 2000) 改訂版 (リリースされず)

v0.5 (May 15, 2000) 「ユーザ認証を安全に行う方法」と「リソース」を追加 (リリースされず)

v0.7 (May 15, 2000) 二訂: リリース準備整う

### 著作権と商標

(c) 2000 Peter Hernberg

このマニュアルは、以下の条項に従う限り、無料で、全体もしくは部分を 複製することができます。

- 全体もしくは部分を複製する場合、上記著作権表示とこの使用許諾条件が、それらの 複製上に完全な型で記載されていること。

- 翻訳もしくは二次的著作物を作成した場合、その配布に先だって、この文書の著者の 承認を得ること。

- この文書の一部のみ配布する場合、全文の入手が可能であることの告示と その入手方法が示されること。

- この文書の僅かな部分を、批評や説明の材料として他の著作物に転載する際は、 その引用が正当なものである場合に限り、この許可条項の表記を省略できます。 また、学術目的の利用については、これらの規定の適用例外となる場合があ るので、著者まで連絡をして尋ねてください。こうした制限は著者としてのわれわれ を守るためであり、学習者や教育者に制限を課すことを意図するものではありません。 この文書のソースコードには(文書の執筆形式である SGML を除いて)、 GNU General Public License が適用されます。ライセンス文書については、GNU アーカイブから匿名 FTP を使って入手が可能です。

### 謝辞

わたしのことを 18 年間我慢してくれている家族に感謝します。素敵な遊び道具をく れた Debian の連中に感謝します。わたしを「オタク」にするために給料を払ってくれ る CGR に感謝します。Sandy Harris の 有益な提案に感謝します。最後に、インスタントラーメンの製造会社に感謝したいと 思います。わたしはそれなしには生きていけないからです。

### 想定する読者

この文書で扱う主題からして、読者は既にコマンドラインで快適にコマンドを実行し、 テキスト形式の設定ファイルの編集をしていることを前提とします。

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

### `/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 は必要なかったでしょう。

### シャドウパスワード

読者自身の `/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:::

### `/etc/group` と `/etc/gshadow`

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

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

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

### MD5 暗号化パスワード

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

### 煩雑さの解消

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

## PAM (Pluggable Authentication Modules)

PAM (Pluggable Authentication Modules) は現在的な ディストリビューションにおけるユーザ認証の核となるものです。

### なぜ PAM なのか

古き良き時代の Linux であれば、`su` や `passwd` や `login` あるいは `xlock` と いったプログラムは、ユーザ認証の必要が生じた時に、`/etc/passwd` から必要なユーザ情報を読み込めばいいだけでした。 ユーザパスワードの変更が必要なら、`/etc/passwd` ファイルを 編集するだけでした。 しかし、この単純ですが稚拙な方法のために、システム管理者やアプリケーション 開発者は数々の問題に直面することになったのです。MD5 とシャドーパスワードの利用 がだんだんと広がるにつれて、ユーザ認証を必要とするプログラムは、何種類もの異 なる認証方法を扱う際にその認証方法に適した情報を得る手段を個別に知っていなけ ればならなくなったからです。また、認証方式を変更したい場合は、そうしたすべて のプログラムをコンパイルし直さなければなりませんでした。PAM は、ユーザ情報が 保存される方法とは無関係な透過的ユーザ認証方式をプログラムに提供することで、 この煩雑な手続きを一掃したのです。

### PAM とは何か

Linux-PAM System Administrator's Guide から引用すると、「Linux-PAM プロジェクトの目的は、ユーザに何らかの権限を付与するソフトウェアの開発を、 安全かつ適切な認証方式自体の開発から分離することです。この目標は、関数のライ ブラリを提供し、アプリケーション側でそれを使ってユーザ認証をリクエストする 仕組みを作ることで達成されました。」 つまり、PAM があれば、パスワードが `/etc/passwd` にあるか、 香港のサーバ上にあるかといったことは問題ではなくなります。プログラムがユーザ 認証を必要としたときは、PAM が適切な認証方式のための関数を含むライブラリを提供 してくれます。このライブラリは動的にロードされるので、認証方式の変更は設定 ファイルの編集だけで実現可能になるのです。

柔軟性は PAM が最強である理由のひとつです。PAM の設定によって、あるプログラム のユーザ認証権の行使を禁止したり、特定のユーザだけの認証を可能にしたり、あ るいは、プログラムがユーザ認証をしようとすると警告を発したり、さらに全ての ユーザをログインできなくしてしまったりできるようになります。PAM のモジュール 設計は、ユーザ認証方法の完全な管理を可能にします。

#### PAM をサポートするディストリビューション

いずれほとんど全ての有名ディストリビューションが PAM をサポートするでしょう。 以下は不完全ですが、 PAM をサポートしているディストリビューションの一覧です。

- Redhat バージョン 5.0 以降

- Mandrake 5.2 以降

- Debian バージョン 2.1 以降( 2.1 では部分的サポート、2.2 で完全 サポート)

- Caldera バージョン 1.3 以降

- Turbolinux バージョン 3.6 以降

- SuSE バージョン 6.2 以降

- (訳注) Vine すべてのバージョン

- (訳注) Kondara すべてのバージョン

上記リストは、不完全なはずですし、不正確でもあるでしょう。このリストへの追 加や修正情報を送ってくれるとうれしいです。 petehern@yahoo.com

#### PAM のインストール

PAM をソースからインストールすることは、時間のかかる作業であり、この HOWTO の 範疇を越えるものです。システムに PAM がインストールされていないなら、おそら く、アップグレードすべき理由が他にもいろいろある古いバージョンのディス トリビューションを使っているからでしょう。また、自分でインストールしなければ 気が済まないという人なら、わたしの手助けは不要なはずです。いずれにせよ、ここ からは、既に PAM がインストールされていることを前提にします。

### PAM の設定

一般的な話はこれくらいにして、問題を掘り下げましょう。

#### PAM の設定ファイル

PAM の設定ファイルは、`/etc/pam.d` に保存されています。 (もし `/etc/pam.d` というディレクトリが ないとしても心配いりません。次章で取り上げます。) そのディレクトリに行って、 中を覗いてみましょう。

      ~$ cd /etc/pam.d
      /etc/pam.d/$ ls
      chfn	chsh	login	other	passwd	su	xlock
      /etc/pam.d/$

システムに何をインストールしているかによって、このディレクトリにあるファイルは 多少増減するかもしれません。詳細はどうであれ、システム上でユーザの認証に関わ るプログラムごとにひとつのファイルが存在することが分かると思います。既に気付 いたかもしれませんが、どのファイルも PAM による認証の設定ファイルなのですが、 それぞれ該当するプログラムと同一の名前が付いています。 ( `other` だけが例外です が、これはすこし後で話します。) それではパスワードに関連した PAM の設定ファイ ルを見てみましょう。(次のファイルは分かり易くするために単純化してあります。)

      /etc/pam.d/$ cat login
      # PAM 設定ファイル( login プログラム用 )
      auth       requisite  pam_securetty.so
      auth       required   pam_nologin.so
      auth       required   pam_env.so
      auth       required   pam_unix.so nulok
      account    required   pam_unix.so
      session    required   pam_unix.so
      session    optional   pam_lastlog.so
      password   required   pam_unix.so nullok obscure min=4 max=8

このファイルを掘り下げる前に、少し説明すべきことがあります。

#### 少し説明すべきこと

少数の方はこう考えているかもしれません。「えっ！ `/etc/pam.d` ディレクトリなんてない。 ディストリビューションの収録 プログラムリストに PAM は含まれているのに、ディレクトリが見つからない。PAM が ない人生なんて、空っぽで無意味だ！ どうすればいいんだろう？」 心配無用です。 無くなったのではありません。ディストリビューションに PAM が含まれているのに、 `/etc/pam.d` がないときは、PAM の設定 ファイルは `/etc/pam.conf` に保存されているのです。 いくつものファイルに分散させるかわりに、PAM の設定ファイルをまとめてひとつの ファイルに保存しているのです。 この場合、PAM の設定はすこしだけ異なった構文になりますが、そこでの設定 については この章の 「 `pam.conf` ファイルの設定」で説明します。

#### 設定ファイルの構文

PAM の設定ファイルは以下のような構文になっています。

      type  control  module-path  module-arguments

`login` プログラム(先ほどの記述を見てください)の設定 ファイルを参考にして、PAM 設定ファイルの構文を見てみましょう。

##### PAM の設定字句

type

  type という字句では、その行のモジュールでどういう認証の型が使用 されるべきかを PAM に知らせます。 認証の際に複数の要求をユーザに課す場合は、同じ型のモジュールを 重複して使用することもできます。PAM は次の 4 つの型を認識します。

  account

    ユーザがサービスへのアクセスを許可されているかどうか、パスワードが期限 切れになっていないかなどを(パスワードとは無関係に)確認します。

  auth

    ユーザが自称する通りの本物のユーザかどうかを確かめます。通常はパスワード で確認しますが、バイオメトリクス(biometrics)などのもっと洗練された方法で確かめ る場合があるかもしれません。

  password

    ユーザに自分の認証方法を変更するメカニズムを提供します。これも通常はパス ワードの変更によってなされます。

  session

    ユーザの認証前または認証後、あるいはその両方で実行したいことを指定しま す。これには、ユーザディレクトリのマウントやアンマウント、ログインやログアウト 時のログ記録、ユーザが利用できるサービスを制限したり、その制限を外したりといっ たことがなどが含まれるでしょう。

  上記 `login` の設定ファイルでは、type の各々の型 が最低でもひとつのエントリーを形成しているのが分かると思います。 `login` プログラムは、その名前の通りユーザの「ログイン」そのも のを許可するプログラムなので、認証の過程ですべての異なった型にアクセスす る必要があることは納得できると思います。

control

  control 字句が果たす役割は、認証が失敗したときに何をすべきかを PAM に伝えることです。PAM が理解するのは次の 4 つの control 型 です。

  requisite

    このモジュールを経由して認証に失敗した場合に、即座に認証を拒絶します。

  required

    認証に失敗した場合に、認証を拒否します。しかし、PAM は、認証拒否をユーザ に知らせる前に、このサービスのためにリストアップされた(同一 type の)全てのモジュールを実行します。

  sufficient

    このモジュールによる認証が成功した場合、その前の required 型のモジュールが認証に失敗していたとしても、PAM はそのユーザに認証を与えま す。

    (訳注：上記 "sufficient" の説明は誤りです。"sufficient" は、それまでの "required" 型モジュールがすべて成功している場合のみ意味を持ちます。 これについては、近日中に原著者の訂正が入る予定です。詳しくは、Linux-PAM System Administrators' Guide ( http://www.kernel.org/pub/linux/libs/pam/Linux-PAM-html/sag-configuration.html) をご覧ください。この間違いを指摘してくださった真鍋篤さん、ありがとうござい ました。)

  optional

    このモジュールが認証の成否に関して意味を持つのは、そのサービスに関して、 これが(認証の成否を決めるべき)唯一のモジュール型である場合だけです。

  In the configuration file for login, we see nearly all of the different control types. Most of the required modules are pam_unix.so (the main authentication module), the single requisite module is pam_securetty.so (checks make sure the user is logging in on a secure console), and the only optional module is pam_lastlogin.so (the module that retrieves information on the user's most recent login).
-->

`login` プログラムの設定ファイルでは、異なる control 型のほぼ全てを見ることができます。required 型のモジュール の大部分は `pam_unix.so` (メインの認証モジュール)です。 そして、ひとつの requisite 型のモジュールが `pam_securetty.so` (ユーザが安全なコンソールでログインしているか 確かめるもの)であり、ひとつの optional 型のモジュールが `pam_lastlog.so` (前回ログインしたときのユーザの情報を取ってくる モジュール)となっています。

(訳注: control については、新しい構文も開発されています。 詳細は、The Linux-PAM System Administrators' Guide をご覧ください)

module-path

  module-path の役割は、どのモジュールを使用するか、(オプションとし て)それがどこにあるかを PAM に伝えることです。`login` の設定 ファイルに見られるように、大部分の設定ファイルではモジュール名だけが含まれてい ます。この場合、PAM は、PAM 用のデフォルトディレクトリ、通常は `/usr/lib/security/` を探します。しかし、 もし使っているディストリビューションが Linux ファイルシステムの標準規格に従って いるなら、PAM モジュールは `/lib/security` ディレクトリにあるでしょう。

module-arguments

  module-arguments は、モジュールに渡す引数を指定するものです。 それぞれのモジュールが自分自身の引数を持っています。例えば、`login` の設定ファイルであれば、"nullok" ("null ok" を意味します)という引数は、`pam_unix.so` モジュールに渡されますが、その意味は、パスワードとして何も入力しな くても(null)認証されるということです。

#### `pam.conf ファイルの設定`

もし PAM の設定が `/etc/pam.d/` ディレク トリではなく、`/etc/pam.conf` ファイルに保存されているなら、 PAM の設定の書式は若干異なったものになります。サービスごとに設定ファイルを持つ のではなく、全ての設定が `/etc/pam.conf` ファイルの中で行わ れ、サービス名が各行の先頭の識別情報となります。例えば、`/etc/pam.d/login` ファイルの次の行は、

        auth       required   pam_unix.so

`/etc/pam.conf` ファイルでは、以下のようになる でしょう。

        login	auth       required   pam_unix.so

上記のちょっとした違いを除けば、残りの全ての PAM の構文がそのまま当てはまり ます。

### もっと多くの情報を入手する方法

PAM の設定や PAM の全モジュールのリファレンスなど、より詳細な情報が必要なとき は、 Linux-PAM System Administrator's Guide を参考にしてください。 このガイドは、PAM の設定に関するあらゆることを説明するもので、最新のリファレ ンスでもあります。

## ユーザ認証を安全に行う方法

多くのディストリビューションでは、ユーザ認証について充分安全な設定がなされ ないまま出荷されています。この章では、システム上でのユーザ認証を安全にする 方法をいくつか取り上げます。ただ、それらを実行すればシステムはより安全なも のになりますが、それでセキュリティが完璧になったなどとは決して思わないでく ださい。

### 強力な `/etc/pam.d/other` ファイル

`/etc/pam.d` にあるファイルは全て、特定の サービスに関する設定をするためのものです。このルールに対する注目すべき例外が、 `/etc/pam.d/other` ファイルです。 このファイルは、自分自身の設定ファイルを持たないサービス全部の設定をする ものです。例えば、(実際は存在しませんが) xyz というサービスがユーザ 認証をしようとした場合、PAM は `/etc/pam.d/xyz` という ファイルを探します。それが見つからないと、認証は `/etc/pam.d/other` ファイルに従ってなされます。`/etc/pam.d/other` ファイルは PAM サービスの最後の拠り所となっているので、その安全性は重要な意味 を持ちます。ここでは `/etc/pam.d/other` ファイルを安全に設定 する二種類の方法について述べます。ひとつは、ほとんど偏執的なもので、もうひとつ はもっと一般的なものです。

#### 偏執狂の設定

`/etc/pam.d/other` の偏執的な設定は以下のようになり ます。

        auth	required	pam_deny.so
        auth	required	pam_warn.so
        account	required	pam_deny.so
        account	required	pam_warn.so
        password	required	pam_deny.so
        password	required	pam_warn.so
        session	required	pam_deny.so
        session	required	pam_warn.so

上記の設定にしておけば、不明なサービスが設定ファイルの 4 つの型のいずれにアク セスしようとする場合でも、PAM は(`pam_deny.so` モジュールを 介して)認証を拒絶し、(`pam_warn.so` モジュールを介して)シス テムログに警告を残します。 PAM にはバグがほとんどないので、この設定は冷酷とも言える安全性を発揮します。 この冷酷さの問題点は、もしたまたま他のサービスの設定を削除してしまった場合に 問題が起きるかもしれないということです。`/etc/pam.d/login` ファイルを間違って削除してしまうと、誰もログインできなくなってしまいます。

#### もう少し親切な設定

以下の設定は、もう少しおおらかなものです。

        auth	required	pam_unix.so
        auth	required	pam_warn.so
        account	required	pam_unix.so
        account	required	pam_warn.so
        password	required	pam_deny.so
        password	required	pam_warn.so
        session	required	pam_unix.so
        session	required	pam_warn.so

この設定では、不明なサービスに対しても(`pam_unix.so` モジュールを介して)認証を許しますが、ユーザパスワードを変更することは許可 しません。その認証は許すわけですが、そうしたサービスが認証をしようとした際に 必ずシステムログに警告を残します。

#### `/etc/pam.d/other` の重要性

特別な理由がない限り、`/etc/pam.d/other` は全てに先立って実 装することを強くお薦めします。「デフォルトで安全寄りに振る」ことは、どんな場合 でも良いことです。新たなサービスに認証の権限を与える必要ができたとしても、その サービスについて PAM の設定ファイルを新たに作ればいいだけです。

### パスワード無しユーザのログインを禁止する

大部分の Linux システムでは、ftp や webserver, mail ゲートウェイなどある種の システムサービスに権限を与えるために、「ダミー」のユーザアカウントがいくつか 存在します。確かに、アカウントが乗っ取られても、アタッカーはルート権限で実行さ れているサービスではなくダミーアカウントに付与された限定的な権限しか入手でき ないのですから、こうしたアカウントがあるとシステムはより安全になると言えなくも ありません。しかし、こうしたダミーアカウントはパスワードなし(null)でログイン できてしまう場合が普通なので、そうしたログインの権限を与えることは、ひとつの セキュリティーリスクとなります。パスワードなしでログインを許す設定オプション は、"nullok" というモジュール引数(module-argument)です。ログイン を許可するサービスについては、その "auth" タイプの 全てのモジュールからこの引数を削除するようにすべきでしょう。 そうしたサービスとは、通常 `login` サービスのことですが、 `rlogin` や `ssh` なども含まれるかもしれませ ん。そうすると、`/etc/pam.d/login` の次の行は、

       auth		required	pam_unix.so	nullok

以下のように変更されるべきです。

       auth		required	pam_unix.so

### 不要なサービスを無効にする

`/etc/pam.d` にあるファイルを見ると、いく つかの使わないプログラム用の設定ファイルや、あるいは聞いたこともないプログラム 用のファイルなどがあると思います。 こうしたサービスへの認証を許したとしてもおそらく大きなセキュリティホールには ならないでしょうが、やはりそれらは禁止したほうがいいでしょう。そうしたプログ ラムに対して PAM が認証できないようにする最良の方法は、そうしたファイルの ファイル名を変更することです。認証を要求するプログラムと同じファイル名の設定 ファイルが見つからないので、PAM は `/etc/pam.d/other` という (おそらく)非常に安全な設定ファイルを最終的に使用します。後ほどそうしたプログラ ムが必要になった場合は、ファイル名を元に戻すだけですべてが意図した通りに動くわ けです。

### パスワードクラッキングツール

パスワードクラッキングツールは、アタッカーにとってはシステムを弱体化させる 目的で使用されますが、システム管理者にとっては、システムのパスワードの強さを 確認するための積極目的の道具として利用することも可能です。最も広く使用されて いるパスワードクラッキングツールはふたつあり、それぞれ "crack" と "John the Ripper" です。 crack はおそらく読者の好きなディストリビューションにすでに 同梱されているでしょう。John the Ripper は、 http://www.false.com/security/john/index.htmlで入手できます。その ツールをパスワードデータベースに対して実行すれば、表示された結果を見て おそらく驚いてしまうでしょう。

加えて、ユーザパスワードを変更するたびにその強度を crack のライブラリを使って 検証する PAM のモジュールもあります。このモジュールをインストールすると、 ユーザは、最低限度の強度を持つパスワードへの変更でない限り既存のパスワードを 変更できなくなります。

### シャドウパスワードと MD5 パスワード

この文書の第二章で取り上げたように、シャドウパスワードと MD5 パスワードを 使うとシステムをもっと安全にすることができます。最近のディストリビューション では、インストールの過程で MD5 や シャドウパスワードをインストールするかどう か尋ねるようになっています。拒否すべき特別の理由がない限り、それらを有効に するべきです。シャドウや MD5 を使わないパスワードからそれらへの変換の手続きは 非常に込み入っているので、この文書の範疇を越えます。次の文書は新しくはない ですが、多少は役に立つかもしれません。 Shadow Password HOWTO( 日本語訳)

## 活用例

この章では、簡単な実例を挙げます。前章の内容をまとめるのに役立つかと思います。

### Apache + mod_auth_pam

ここでは、例として、`mod_auth_pam` という Apache の モジュールのインストールと設定を行います。これは、PAM を使ってウェブサーバの ユーザを認証するのに利用されるものです。この例題の趣旨は PAM にあるので、 Apache については既にインストールされているものとします。まだインストール されていないなら、利用している Linux の配布元で、インストール用パッケージが 見つかるはずです。

### 例題の内容

この例題の目標は、ウェブサーバ上に、制限のかかった `family` というディレクトリを作成し、 PAM を介した ユーザ認証をその領域に設定することです。そのディレクトリには family のメンバー の個人情報を置くので、ユーザグループ family の一員でないとアクセスできないよう にします。

### mod_auth_pam のインストール

最初に、`mod_auth_pam` を http://blank.pages.de/pam/mod_auth_pam からダウンロードしてください。 そして、次のコマンドで `mod_auth_pam` をコンパイルします。 ( root でログインすることが必要です)

       ~# tar xzf mod_auth_pam.tar.gz
       ~# cd mod_auth_pam-1.0a
       ~/mod_auth_pam-1.0a# make
       ~/mod_auth_pam-1.0a# make install

もし `mod_auth_pam` をインストールするときに問題が生じたら、 ディストリビューションに付属している `apache-dev` という パッケージをインストールしているかどうか確認してください。 `mod_auth_pam` のインストールが終わったら、Apache を再起動 する必要があります。Apache は通常次のコマンドで再起動できます。(ここでも、root でないといけません)

       ~# /etc/init.d/apache restart

### PAM の設定

Apache のための PAM の設定ファイルは `/etc/pam.d/httpd` に あります。デフォルトの設定(これは `mod_auth_pam` をインス トールしたときに同時にインストールされています)は、安全ではありますが、 `pam_pwdb.so` というモジュールを使っていて、このモジュール は多くのシステムでは入手できないかもしれません。(それにいちから設定していく ほうが楽しいですから。) したがって、`/etc/pam.d/httpd` と いうファイルは削除して、最初からスタートしましょう。

#### PAM の設定方法を決める

Apache の認証要求を PAM が処理する方法を定める前に、PAM が必要なのは何を チェックするためなのかを正確に理解しなければなりません。まず、PAM を使うの は、標準的な Unix パスワードデータベースにあるパスワードとユーザのパスワードが 一致するかどうかを確認させるためです。だとすると、"auth " 型に "`pam_unix.so`" モジュールというのが 使えそうです。 正しいパスワードが入力されないと認証が失敗するようにするために、モジュールの control 型は "required" にセットするの がいいでしょう。以下は、この場合の `/etc/pam.d/httpd` ファイルの最初の行がどうなるかを示したものです。

         auth	required	pam_unix.so

次に、ユーザのアカウントが有効になっているかどうか確認しなければなりません。 (つまり、ユーザのパスワードの有効期限が切れているなどの問題がないかどうか ということです。) これは "account" タイプの問題で、 その機能についても `pam_unix.so` モジュールで提供されて います。 再度、このモジュールの "control" タイプを " required" に設定します。その行を追加し終わると、`/etc/pam.d/httpd` の設定は以下のようになります。

         auth	required	pam_unix.so
         account	required	pam_unix.so

上記の設定は非常に洗練されているとは言い難いですが、しっかり機能します。 PAM のサービスの設定方法を学ぶスタートとしては悪くないはずです。

### Apache の設定

PAM は Apache からの認証要求を処理できるように設定されたので、今度は Apache が PAM の認証を適切に利用して `family` ディレクトリへのアクセスを制限できるように設定しましょう。それをするには、次の 数行を `httpd.conf` ファイルに付け加えてください。 ( `httpd.conf` ファイルは通常 `/etc/apache` か `/etc/httpd` ディレクトリにあります)

        <Directory /var/www/family>
        AuthPAM_Enabled on
        AllowOverride None
        AuthName "Family Secrets"
        AuthType "basic"
        require group family
        </Directory>

もしかすると、上記の `/var/www` の部分は、 ウェブ関係の文書がデフォルトで置かれている `/home/httpd` といった場所に変更しなければならないかも しれません。その場所がどこであろうとも、そこに `family` というディレクトリを作成する必要があります。

今回の設定をテストする前に、今編集した Apache の設定について簡単に説明 したいと思います。<Directory> ディレクティブ(directive)は、このディレク トリに関する設定データをカプセル化するために使用されます。 そして、このディレクティブの内部では、まず、PAM の認証機能を有効にして ("AuthPAM_enabled on")、この設定の上書きを禁止し(" AllowOverride none")、この認証領域の名前を "Family Secrets " としています("AuthName "Family Secrets"")。 そして、httpd の認証タイプ(PAM による認証ではありません)をデフォルトにセット した上で("AuthType "basic"")、ユーザグループとして family の接続を許可する設定("require group family")にしました。

### 設定のテスト

これで全ての設定が問題なく終了したので、成功を祝いましょう。さっそくお気に入 りのブラウザを起動させて、http://your-domain/family/ に突進しましょう。 (your-domain の部分には、えーっと、あなたのドメイン名(your-domain)を入れてく ださい) これであなたは完全な認証を受けた者(uber-authenticator)になったわけで す。

## リソース

オンライン、オフラインともに多くのリソースがありますから、ユーザ認証に関する より多くの情報をそこで収集できます。もしこのリストに付け加えるべきリソースを 御存知なら、わたしまで書き送ってください。 petehern@yahoo.com

### PAM

- Linux-PAM System Administrator's Guide

- The Linux-PAM Module Writers' Guide

- Linux-PAM Application Developer's Manual

### セキュリティ全般

- linuxsecurity.com

- securitywatch.com

- Security HOWTO ( 日本語訳)

- Packetstorm

### オフライン文書

システムのマニュアルページを使えば、かなりの情報が集められます。以下は ユーザ認証に関係するマニュアルページです。丸カッコの中の数字はマニュアル ページのセクション番号です。`passwd(5)` のマニュアルページを 見るには、`man 5 passwd` と打ち込んでください。

- passwd 5

- crypt 3

- pam.d 5

- group 5

- shadow 5

## 結語

この HOWTO が役に立つことを願っています。質問、コメント、提案などがあれば、 メールをもらえるとたいへん嬉しく思います。メールの宛先はこちらです。 petehern@yahoo.com

### 日本語訳について

- 翻訳：
- 千旦裕司
- 校正：
- 武井伸光
- 真鍋篤
- Katsunori Aoki

ご連絡は、JF@linux.or.jp か、訳者 ysenda@pop01.odn.ne.jp まで お願いします。