1

web2pyアプリケーションのユーザーをAFSで認証したいと思います。残念ながら、pam.pyモジュールはAFSをサポートしておらず、ローカルユーザーのみをサポートしているようです。pamでそれを行うことは可能ですか、それとも他のものを使用する必要がありますか?

4

2 に答える 2

0

web2pyはWebベースであり、AFSはKerberosを使用するため、web2pyがユーザーの名前でAFSトークンを取得できるようにするには、ユーザーとweb2pyレイヤーの間でKerberosチケットを渡す必要があります。

SPNEGOでKerberosを使用して、Webサーバーに対してブラウザーを認証できます。ブラウザは、委任を許可するように構成する必要があります(この例では、Java SPNEGOフィルターを使用して説明しています)。

aklogweb2pyアプリケーションで委任されたKerberosチケットを一度取得できれば、AFSトークンを取得するために使用できるはずです。

私はweb2pyにあまり詳しくありませんが、ドキュメントをざっと見てみると、SPNEGOのサポートについてはあまりわかりません。自分で実装する必要があるかもしれません。(それをサポートする既存のGSSライブラリが見つかった場合、適切に構成されていれば、ブラウザとこのライブラリの間でSPNEGOトークンをやり取りするだけで済みます。これは少しトピックから外れている可能性があります。 Pythonですが、このJava / JGSSチュートリアルでは、JGSSと同等のPythonを見つけた場合に、何が必要かを示すことができます。)

web2pyを実行している同じプロセスユーザーの下で、すべての着信リクエスト(異なるユーザーからの可能性がある)のAFSトークンを共有しないように注意してください。web2pyレイヤーからPAG(プロセス認証グループ)を調べることを検討することをお勧めします。これらのプロセスをweb2pyに到着するリクエストに結び付ける必要があります。

于 2012-10-09T01:29:46.160 に答える
0

web2pyにはAFSまたはkrb5のサポートが組み込まれていないため、PAMの使用はおそらくあなたがやりたいことです。非ローカルユーザーを認証するには、認証する別のPAMサービスを指定し、ローカルPAM構成を変更してそのサービスがAFSに対して認証されるようにする必要があります。

pam_auth.pyモジュールはデフォルトの「ログイン」以外のPAMサービスの使用をサポートしていないようですが、そうするか、独自に作成するのは簡単なようです。あなたはただこのようなことをする必要があります:

from gluon.contrib.pam import authenticate

def mypam_auth():
    def pam_auth_aux(username, password):
        return authenticate(username, password, "myservice")

auth.settings.login_methods.append(mypam_auth())

ここで、「myservice」は選択したサービス名です。次に、ローカルPAM構成を変更して、「myservice」がAFSに対して認証されるようにする必要があります。Linuxでは、これは通常、ファイル/etc/pam.d/myserviceを作成し、AFSに対して認証するためにそのファイルにPAM構成を入力することを意味します。

最近のほとんどのAFSセルは認証にKerberos5を使用しているため、これはKerberos 5に対して認証する必要があり、AFSを気にする必要がないことを意味します(ユーザーが有効なAFSアカウントを持っていることを確認する場合を除きますが、それは認証よりも承認の問題の方が多い)。次のように、krb5ログインでPAMを設定するためのガイドと例がいくつかあります。http://techpubs.spinlocksolutions.com/dklar/kerberos.html#PAM_configuration

これらのガイドの1つに従うことを試みることができますが、セッションやチケットなどについて心配する必要がないため、おそらく「auth」セクションのみが必要です。/etc/pam.d/myserviceで次のようなものだけが必要になる場合があります。

auth required pam_krb5.so no_ccache use_first_pass
auth required pam_deny.so

「AFS認証」とは、krb5ではなく古いkaserver krb4ベースの認証を意味する場合(つまり、「kinit」および「aklog」または「klog.krb5」ではなく、「klog」を使用してAFSへの認証を行います)。代わりに、pam_afs.soPAMモジュールを使用する必要があります。このようなものが機能する可能性があります:

auth required pam_afs.so use_first_pass
auth required pam_deny.so

ローカルマシンのローカルPAM構成を制御できない場合は、代わりに「kinit」(krb5)または「klog」(古いkaserver)コマンドを生成し、コマンドにパスワードを与えることでユーザーの認証を試みることができます。これは標準入力です。それはあまりエレガントではありませんが、うまくいくはずです。

于 2014-05-10T06:44:50.670 に答える