PAM

<< 戻る   トップ >>

PAM, the magic dragon lived by the sea...

PAM じゃなくて Puff だってば。というわけで、PAM (Pluggable Authentication Modules) 周辺をいじる。ターゲットは Solaris なシステムなのだが、PAM まわりといえばナーバスな部分であるから、まず開発用の Linux でなんとかしてみよう。

JPAM

システムに関する重要なモジュールなので、当然 C言語で扱うのだが、void main() をついうっかり public static void main() と書いてしまう今日この頃なので Java で何とかならないか、と試してみる。JPamというものがあるらしいので利用してみよう。

概説

JPam は Java と PAM を接続するブリッジである。PAMは Linux, Mac OS X, Solaris, HP-UX およびその他の UNIX システムにおいて標準的な認証アーキテクチャである。JPam は Java と PAM のミッシングリンクである。

JPam は上記のプラットフォーム上の Java アプリケーションに PAM 認証機能を与える。

認証機能には次のものがある。

次に、Getting Started にしたがって作業を行う。

  1. JPam-1.1.jar を /usr/java/default/jre/lib/ext/ にコピー。
  2. Apache Commons Logging をインストール (commons-logging-1.1.jar 他を /usr/java/default/jre/ext にコピー)。
  3. libjpam.so を /usr/java/default/jre/lib/i386/ にコピー。.../i386/client/ と .../i386/server/ 下にシンボリックリンクを作成 (JPam-1.1.jar と同じディレクトリに入れておいてもよいそうだ)。
  4. /etc/pam.d/ を設定 (Solaris では /etc/pam.conf)。とは言っても、net-sf-jpam を /etc/pam.d/ にコピーしただけ。

"Optional step" としてログのレベルを適切に設定しろ、と言われたのだが省略。また、JAAS API を使うなら .java.login.config をホームディレクトリにコピーしなくてはならないのだがとりあえず省略。

以上の手続きにより、以下のサンプルプログラム (環境のよってはパスワード流出の危険あり)が稼働。

package sample;

import net.sf.jpam.Pam;

public class JpamTest {

	public static void main(String[] args) {
	    Pam pam = new Pam();
	    boolean authenticated = pam.authenticateSuccessful(args[0], args[1] );
	    
	    System.out.println( args[0] +": " + authenticated );
	}
}

本来ならばこの後、ターゲットシステムにおける動作確認に続く予定であったのだが、次のようなトラブルに見舞われた。まず、ターゲットシステムである Sparc Soralis に適合すると思われるバイナリが入手困難であった。それじゃソースからコンパイルするか、と思ったのだが、ここらでふと Tomcat について調べてみると、JPam を仕様するより JAAS 系の技術を使用するのが正統なのではないか、と思われた。

JAAS が本命になりそうなのだが、さらにまたよく考えてみればこれは急ぎの仕事なのだ。暫定的にひどく古くて危ない認証手段を使うことにした。POP である。危ないのは承知の上だが、どうせターゲットマシンでは互換性の都合で未だに動作していることだし、一応イントラネットどころか localhost 内で認証するだけだし、早期のよりセキュアな手段への以降を担保として今回は勘弁してもらおう。

というわけで、今回の「Java アプリケーションサーバから PAM 認証を使う (え、そういう話だったのかって? そうなのだ)」は保留とし、POP 認証による暫定版を作成してみるとしよう。


作成: 2007-09-28 11:59:34.0更新: 2007-09-30 16:36:45.0
http://museo-anonimo.jp/nanban/?id=559,http://museo-anonimo.jp/nanban/tr/559