3

私はJavaで書かれたカスタム認証メカニズムを持っています。Cでコードを書き直さずにLinuxPAMモジュールを実装するための最良の方法は何でしょうか。

私はこの利用可能なPAMモジュールのリストを知っていますが、それらのどれもJava関連ではありません。

JPamもありますが、逆のことをします。Javaアプリで使用するユーザー/グループ情報を取得できますが、Linuxでユーザーを認証するには既存のJavaコードを使用する必要があります(SSHなど)。

どんな提案でも大歓迎です。

4

5 に答える 5

3

pam_execを使用することを考えましたか?

これにより、PAMのスクリプトを実行できます。

たとえば、次のようなものをPAM構成に追加します。

auth sufficient pam_exec.so expose_authtok /usr/local/bin/myscript-example

これは、すべての変数をエコーアウトする単純なスクリプトですが、必要な変数を渡して、Javaプログラムを簡単に開始することもできます。

スクリプトが成功するかエラーになるかに基づいて、認証が成功するかどうかを制御する必要があります。

すべての変数を反映するスクリプトの例:

#!/bin/sh
read password
echo "User: $PAM_USER"
echo "Ruser: $PAM_RUSER"
echo "Rhost: $PAM_RHOST"
echo "Service: $PAM_SERVICE"
echo "TTY: $PAM_TTY"
echo "Password : $password"
exit $?
于 2016-10-03T12:52:02.787 に答える
2

あなたは試すことができます:

  • GCJを使用してJavaプログラムをネイティブコードにコンパイルします
  • JVMを埋め込み、JavaコードをロードするglueCプログラムを作成します

しかし、これらのアイデアはどちらも理想的ではないようです。

于 2010-06-29T21:16:24.073 に答える
1

PAMとインターフェイスするCラッパーを記述し、実装内でJNIを使​​用してJVMのインスタンスを呼び出します。

JVM起動ラッパーは、JARでプログラムを実際に実行する「exe」を提供したいときに非常に人気がありました。バイナリ実行可能ファイルからJVMを呼び出して、JNIでは通常行われないことを調べたいと思うでしょう。不幸なことに、ほとんどのJNI命令は、JavaからCコードを呼び出すことに焦点を合わせています。

CコードからJVMを作成する方法の良い例は、ここにあります。CコードモジュールをPAM共有オブジェクトライブラリに変換するには少し手間がかかりますが、それほど難しくはないでしょう。

最後に、JNIはほとんどの操作でJava型を使用して返すことを忘れないでください。つまり、JVMに渡す前に、「C」データ型(おそらくchar *)を読み取り、Java文字列を作成する必要があります。Javaから情報を受け取り、それをPAMライブラリに戻す場合も同様です。

幸運を!

于 2010-06-29T21:19:10.003 に答える
0

実際には、JavaにCスタブと通信させ、CスタブがPAMコールバックに接続するようにすることができます。JNI(Java Native Interface)について読んでください。ほとんどの場合、JNIはCをJavaに公開するために使用されますが、実際にはその逆も可能です。また、実際には使い勝手が良いため、GNUCNIを調査することもできます。ウィキペディアのJNIページにはたくさんのリソースがリストされています

于 2010-06-29T21:24:55.350 に答える
0

http://jaas-pam.sourceforge.net/

ユーザー認証を行い、Tomcatのjaasレルムで動作しますが、グループ/ロール情報を返さないため、ロールベースのWeb認証は返されません。

于 2014-04-01T10:59:46.167 に答える