私はJavaで書かれたカスタム認証メカニズムを持っています。Cでコードを書き直さずにLinuxPAMモジュールを実装するための最良の方法は何でしょうか。
私はこの利用可能なPAMモジュールのリストを知っていますが、それらのどれもJava関連ではありません。
JPamもありますが、逆のことをします。Javaアプリで使用するユーザー/グループ情報を取得できますが、Linuxでユーザーを認証するには既存のJavaコードを使用する必要があります(SSHなど)。
どんな提案でも大歓迎です。
私はJavaで書かれたカスタム認証メカニズムを持っています。Cでコードを書き直さずにLinuxPAMモジュールを実装するための最良の方法は何でしょうか。
私はこの利用可能なPAMモジュールのリストを知っていますが、それらのどれもJava関連ではありません。
JPamもありますが、逆のことをします。Javaアプリで使用するユーザー/グループ情報を取得できますが、Linuxでユーザーを認証するには既存のJavaコードを使用する必要があります(SSHなど)。
どんな提案でも大歓迎です。
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 $?
あなたは試すことができます:
しかし、これらのアイデアはどちらも理想的ではないようです。
PAMとインターフェイスするCラッパーを記述し、実装内でJNIを使用してJVMのインスタンスを呼び出します。
JVM起動ラッパーは、JARでプログラムを実際に実行する「exe」を提供したいときに非常に人気がありました。バイナリ実行可能ファイルからJVMを呼び出して、JNIでは通常行われないことを調べたいと思うでしょう。不幸なことに、ほとんどのJNI命令は、JavaからCコードを呼び出すことに焦点を合わせています。
CコードからJVMを作成する方法の良い例は、ここにあります。CコードモジュールをPAM共有オブジェクトライブラリに変換するには少し手間がかかりますが、それほど難しくはないでしょう。
最後に、JNIはほとんどの操作でJava型を使用して返すことを忘れないでください。つまり、JVMに渡す前に、「C」データ型(おそらくchar *)を読み取り、Java文字列を作成する必要があります。Javaから情報を受け取り、それをPAMライブラリに戻す場合も同様です。
幸運を!
実際には、JavaにCスタブと通信させ、CスタブがPAMコールバックに接続するようにすることができます。JNI(Java Native Interface)について読んでください。ほとんどの場合、JNIはCをJavaに公開するために使用されますが、実際にはその逆も可能です。また、実際には使い勝手が良いため、GNUCNIを調査することもできます。ウィキペディアのJNIページにはたくさんのリソースがリストされています
http://jaas-pam.sourceforge.net/
ユーザー認証を行い、Tomcatのjaasレルムで動作しますが、グループ/ロール情報を返さないため、ロールベースのWeb認証は返されません。