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
オープンソースなので、興味のある方は見てみてください!