レンタルサーバ + Webシステム開発 = E-business

■レンタルサーバご利用参考資料
サーバご利用の参考にJF Project によるJF (Japanese FAQ)を掲載しています。

Linux JF(Japanese FAQ)Project.
JF は, Linux に関する解説文書・FAQ などを作成・収集・配布するプロジェクトです.

グリーンネット・トップページへ戻る


一覧に戻る
User Authentication HOWTO

Peter Hernberg

日本語訳 / 千旦裕司

2000/05/02

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

Table of Contents
1. はじめに
   
    1.1. この文書を書いた経緯
    1.2. 新バージョンについて
    1.3. フィードバック
    1.4. バージョン小史
    1.5. 著作権と商標
    1.6. 謝辞
    1.7. 想定する読者
   
2. ユーザ情報がシステムに保存される仕組み
   
    2.1. /etc/passwd について
    2.2. シャドウパスワード
    2.3. /etc/group と /etc/gshadow
    2.4. MD5 暗号化パスワード
    2.5. 煩雑さの解消
   
3. PAM (Pluggable Authentication Modules)
   
    3.1. なぜ PAM なのか
    3.2. PAM とは何か
    3.3. PAM の設定
    3.4. もっと多くの情報を入手する方法
   
4. ユーザ認証を安全に行う方法
   
    4.1. 強力な /etc/pam.d/other ファイル
    4.2. パスワード無しユーザのログインを禁止する
    4.3. 不要なサービスを無効にする
    4.4. パスワードクラッキングツール
    4.5. シャドウパスワードと MD5 パスワード
   
5. 活用例
   
    5.1. Apache + mod_auth_pam
    5.2. 例題の内容
    5.3. mod_auth_pam のインストール
    5.4. PAM の設定
    5.5. Apache の設定
    5.6. 設定のテスト
   
6. リソース
   
    6.1. PAM
    6.2. セキュリティ全般
    6.3. オフライン文書
   
7. 結語
   
    7.1. 日本語訳について
   
1. はじめに

1.1. この文書を書いた経緯

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

1.2. 新バージョンについて

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

1.3. フィードバック

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

1.4. バージョン小史

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

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

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

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

1.5. 著作権と商標

(c) 2000 Peter Hernberg

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

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

1.6. 謝辞

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

1.7. 想定する読者

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

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 などなど) そうだとすると、login や su などのプログ
ラムは、ユーザのパスワード認証の方法をどうやって知るのでしょうか?さら
に、システム上のパスワードの保存方法を変更したいときはどうすればいいの
でしょう?ユーザのパスワードを必要とするプログラムは、そのパスワードの
保存方法が変更されたことをどうやって知るのでしょう? PAM がその答えにな
ります。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

3. PAM (Pluggable Authentication Modules)

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

3.1. なぜ PAM なのか

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

3.2. PAM とは何か

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

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

3.2.1. 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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

3.2.2. PAM のインストール

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

3.3. PAM の設定

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

3.3.1. 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         
                                                                       

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

3.3.2. 少し説明すべきこと

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

3.3.3. 設定ファイルの構文

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/pam-4.html) を
        ご覧ください。この間違いを指摘してくださった真鍋篤さん、ありが
        とうございました。)
       
    optional
       
        このモジュールが認証の成否に関して意味を持つのは、そのサービス
        に関して、これが(認証の成否を決めるべき)唯一のモジュール型であ
        る場合だけです。
       
    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)認証されるということです。
   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

3.3.4. 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 の構文がそのまま当ては
まります。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

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

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

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

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

4.1. 強力な /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 ファイルを安全に設定する二種類の方法について述べます。ひとつは、
ほとんど偏執的なもので、もうひとつはもっと一般的なものです。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

4.1.1. 偏執狂の設定

/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 ファイルを間違って削除してしまうと、誰もログインできなくなってし
まいます。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

4.1.2. もう少し親切な設定

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

    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 モジュールを介して)
認証を許しますが、ユーザパスワードを変更することは許可しません。その認
証は許すわけですが、そうしたサービスが認証をしようとした際に必ずシステ
ムログに警告を残します。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

4.1.3. /etc/pam.d/other の重要性

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

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

大部分の 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                            
                                                                       

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

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

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

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

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

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

4.5. シャドウパスワードと MD5 パスワード

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

5. 活用例

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

5.1. Apache + mod_auth_pam

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

5.2. 例題の内容

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

5.3. 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                                       
                                                                       

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

5.4. PAM の設定

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

5.4.1. 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 のサービスの設定方法を学ぶスタートとしては悪くないはずです。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

5.5. Apache の設定

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

                                            
    AuthPAM_Enabled on                                                 
    AllowOverride None                                                 
    AuthName "Family Secrets"                                          
    AuthType "basic"                                                   
    require group family                                               
                                                           
                                                                       

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

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

5.6. 設定のテスト

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

6. リソース

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

6.1. PAM

 ・ Linux-PAM System Administrator's Guide 
   
 ・  Linux-PAM Module Writer's Manual 
   
 ・  Linux-PAM Application Developer's Manual 
   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

6.2. セキュリティ全般

 ・ linuxsecurity.com 
   
 ・ securitywatch.com 
   
 ・ Security HOWTO 
    (日本語訳 )
   
 ・ Packetstorm 
   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

6.3. オフライン文書

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

 ・ passwd(5)
   
 ・ crypt(3)
   
 ・ pam.d(5)
   
 ・ group(5)
   
 ・ shadow(5)
   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

7. 結語

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

7.1. 日本語訳について

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

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

一覧に戻る
グリーンネット・トップページへ戻る

http://www.green.ne.jp/