免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2043 | 回复: 2
打印 上一主题 下一主题

[Linux] ubuntu解锁不走我的PAM [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-10-22 15:29 |只看该作者 |倒序浏览
最近做一个Linux下的登录管理,用PAM做。
登录是控制住了,但是锁屏之后解锁却不走我的PAM,而走了 pam_unix.so
求大侠指导

论坛徽章:
0
2 [报告]
发表于 2015-10-22 15:45 |只看该作者
本帖最后由 170fangjun 于 2015-10-22 15:48 编辑
  1. /* expected hook */
  2. MY_PAM_EXTERN int pam_sm_setcred( pam_handle_t *pamh, int flags, int argc, const char **argv )
  3. {

  4.         DPRINT(LOG_DEBUG, "进入pam_sm_setcred()   flags:%d  argc :%d ",flags,argc);
  5.         int nret = PAM_SUCCESS, *pret;
  6.         pret = &nret;
  7.         pam_get_data(pamh, "sample_setcred_return", (const void **)&pret);
  8.         return *pret;


  9.     //return PAM_AUTH_ERR;
  10. }

  11. MY_PAM_EXTERN int pam_sm_chauthtok(pam_handle_t *pamh, int flags,
  12.                                 int argc, const char **argv)
  13. {
  14.         DPRINT(LOG_DEBUG, "进入pam_sm_chauthtok()   flags:%d  argc :%d ",flags,argc);
  15.         return PAM_SUCCESS;
  16. }
  17. MY_PAM_EXTERN int pam_sm_acct_mgmt(pam_handle_t *pamh, int flags, int argc, const char **argv)
  18. {
  19.         DPRINT(LOG_DEBUG, "进入pam_sm_acct_mgmt()   flags:%d  argc :%d ",flags,argc);
  20.     return PAM_SUCCESS;
  21. }

  22. MY_PAM_EXTERN int pam_sm_open_session(pam_handle_t *pamh,int flags,int argc,const char **argv)
  23. {
  24.         DPRINT(LOG_DEBUG, "进入pam_sm_open_session()   flags:%d  argc :%d ",flags,argc);
  25.         return PAM_SUCCESS;
  26. }

  27. MY_PAM_EXTERN int pam_sm_close_session(pam_handle_t *pamh,int flags,int argc,const char **argv)
  28. {
  29.         DPRINT(LOG_DEBUG, "进入pam_sm_open_session()   flags:%d  argc :%d ",flags,argc);
  30.         return PAM_SUCCESS;
  31. }
  32. /* expected hook, this is where custom stuff happens */
  33. MY_PAM_EXTERN int pam_sm_authenticate( pam_handle_t *pamh, int flags,int argc, const char **argv )
  34. {
  35.         DPRINT(LOG_DEBUG, "进入pam_sm_authenticate()   flags:%d  argc :%d ",flags,argc);
  36.     int retval;

  37.     const char* pUsername = NULL;
  38.     const char *pPassword = NULL;
  39.     const char *prompt = NULL;


  40.     retval = pam_get_user(pamh, &pUsername, "sec管控帐号: ");
  41.     DPRINT(LOG_DEBUG, "获取管控帐号:%s",pUsername);
  42.     /// simplog.writeLog(SIMPLOG_DEBUG, "Welcome: %s", pUsername);
  43.     if (retval != PAM_SUCCESS)
  44.     {
  45.         pam_error(pamh, "获取sec管控帐号失败");
  46.         return retval;
  47.     }
  48.     retval = pam_get_authtok(pamh, PAM_AUTHTOK, &pPassword, prompt);
  49.     //    retval = pam_get_authtok(pamh, PAM_OLDAUTHTOK, &pPassword, prompt);        ///////   ok !
  50.     //    retval = pam_get_authtok_noverify(pamh, &pPassword, prompt);
  51.     if(retval != PAM_SUCCESS)
  52.     {
  53.         pam_info(pamh, "获取sec认证密码失败");
  54.         return retval;
  55.     }


  56.     char cmd[1024];
  57.     char errMsg[512];
  58.     sprintf(cmd, "export DISPLAY=:0.0;%s %s %s %s", "LoginAgent", H_ToKen, pUsername, pPassword);
  59.     memset(errMsg, 0, 512);

  60.     //pam_info(pamh, "cmd: %s", cmd);
  61.     if(0 != runLoginAgent(pamh, cmd, errMsg, 512))
  62.     {
  63.         pam_error(pamh, "sec 认证失败:%s", errMsg);
  64.         return PAM_AUTH_ERR;      }
  65.     else
  66.     {
  67.         pam_info(pamh, "sec 认证: 成功!");
  68.     }
  69.     int *pret = (int *)malloc(sizeof(int));
  70.     *pret = PAM_SUCCESS;
  71.     pam_set_data(pamh, "sample_setcred_return", (void *)pret, sample_pam_free);

  72. #endif
  73.     return PAM_SUCCESS;   /// 允许登录
  74. }
复制代码

论坛徽章:
0
3 [报告]
发表于 2015-10-22 15:47 |只看该作者
修改了 lightdm


auth    sufficient       mypam.so
account    sufficient      mypam.so
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP