参考资料 https://www.docs4dev.com/docs/zh/linux-pam/1.1.2/reference/adg-introduction.html
示例程序 注意按照程序开头的注释添加 /etc/pam.d/check_user
。 编译命令如下:
1 gcc -o check_user check_user.c -lpam -lpam_misc
编译完之后运行,程序会提示你输入密码,然后告诉你授权是否成功。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 #include <security/pam_appl.h> #include <security/pam_misc.h> #include <stdio.h> static struct pam_conv conv = { misc_conv, NULL }; int main (int argc, char *argv[]) { pam_handle_t *pamh=NULL ; int retval; const char *user="nobody" ; if (argc == 2 ) { user = argv[1 ]; } if (argc > 2 ) { fprintf (stderr , "Usage: check_user [username]\n" ); exit (1 ); } retval = pam_start("check_user" , user, &conv, &pamh); if (retval == PAM_SUCCESS) retval = pam_authenticate(pamh, 0 ); if (retval == PAM_SUCCESS) retval = pam_acct_mgmt(pamh, 0 ); if (retval == PAM_SUCCESS) { fprintf (stdout , "Authenticated\n" ); } else { fprintf (stdout , "Not Authenticated\n" ); } if (pam_end(pamh,retval) != PAM_SUCCESS) { pamh = NULL ; fprintf (stderr , "check_user: failed to release authenticator\n" ); exit (1 ); } return ( retval == PAM_SUCCESS ? 0 :1 ); }
PAM的应用 GNOME Keyring