4

PAM を使用して認証モジュールを開発したいのですが、簡単な例をうまく機能させることができません。

手始めに、ユーザーがユーザー名を入力すると、ユーザーがパスワードなしでログインする単純なSSHログインシステムを実行したいと思いbackdoorます(TRONレガシーのように)。

このガイドをテンプレートとして使用しようとしましたが、機能しません。これまでの私のコードは次のとおりです。

PAM_EXTERN int pam_sm_setcred( pam_handle_t *pamh, int flags, int argc, const char **argv ) {
    return PAM_SUCCESS ;
}

PAM_EXTERN int pam_sm_authenticate( pam_handle_t *pamh, int flags,int argc, const char **argv ) {
    int retval;

    printf("I'm here");

    const char* pUsername;
    retval = pam_get_user(pamh, &pUsername, "Username: ");
    if (retval != PAM_SUCCESS) {
        return retval;
    }

    if (strcmp(pUsername, "backdoor") != 0) {
        return PAM_AUTH_ERR;
    }
    return PAM_SUCCESS;
}

名前でログインすると、backdoor権限が拒否されます。ユーザー アカウントを作成しようとしましたが、パスワードの入力を求められます。

有効なユーザーでログインすると、「I'm here」というメッセージが表示されます。このようなものをデバッグするためのより良い方法はありますか、それともほとんど試行錯誤ですか?

編集:

/etc/pam.d/sshd@include common-authの後にこれを追加しました。

auth sufficient mypam.so

これは他の 2 つの .so ファイルの後に続きますが、毎回実行されていると確信しています。

pam.conf を変更していません (そこには何もありません)。毎回ログアウトする必要がないので、SSH から始めるのが最も簡単だと考えました。

編集:

私はついにそれを働かせました。結果は次のとおりです。

https://github.com/beatgammit/simple-pam

オープンソースなので、興味のある方は見てみてください!

4

1 に答える 1

3

まず、以前の必要なモジュールが失敗した場合でも、十分なものは失敗します。common-auth のインクルードの下に十分な行を配置したと言うので、common-auth の必要なモジュールの一部が既にアクセスを拒否しているため、失敗が発生している可能性があります。さらに、sshdが邪魔をしています。

テストが実際には pam モジュールのテストであり、他のものとのさらなる相互作用ではないことがわかるように、これらすべてのものを邪魔にならないようにします。pam_unix の代わりにモジュールを /etc/pam.d/check_user にリストした、こちらのような単純なテスト プログラムから始めます。

于 2011-05-24T17:10:30.093 に答える