zoukankan      html  css  js  c++  java
  • linux密码登陆时加入自己登陆验证模块(pam)

    摘自:http://blog.chinaunix.net/uid-31542012-id-5790273.html

    操作系统环境:RHEL7.1

    1、编译动态库pam_mylogin.so

    2、将该动态库拷贝至/lib64/security/

    3、如需修改本机的登陆方式,请按如下红框方式修改/etc/pma.d/login 文件:

     4、如需修改ssh的登陆方式,请按如下红框方式修改/etc/pma.d/sshd 文件:

      

    4.修改/etc/pma.d/lightdm文件增加如下红色内容:

    #%PAM-1.0
    auth    requisite       pam_mylogin.so
    auth    requisite       pam_nologin.so
    auth    sufficient      pam_succeed_if.so user ingroup nopasswdlogin

    5、编写文件:pam_mylogin.c

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <time.h>
    #include <security/pam_appl.h>
    #include <security/pam_modules.h>
    #include <security/pam_ext.h>
    int myloginVerify(pam_handle_t *pamh)
    {
        int retval;
        char* pPw;
        char * p = "Password===========:";
        retval = pam_prompt(pamh,PAM_PROMPT_ECHO_OFF,&pPw,"%s",p);
        printf(">>>>>>>>>pPw=%s
    ",pPw);
        if (retval != PAM_SUCCESS) {
            printf("pam_prompt failed!
    ");
            return 0;
        }
        char pw[7]="asdfgh";
        printf(">>>>>>>>>pw=%s
    ",pw);
        int i = 0;
        for(i=0;i<6;i++)
        {
            printf("%d>>>pw[%d]=%c pPw[%d]=%c
    ",i,i,pw[i],i,pPw[i]);
            if(pw[i]!=pPw[i])
            {
                return 0;
            }
            return 1;
        }
    }
    int Verify(pam_handle_t *pamh)
    {
        if(!myloginVerify(pamh))
            return PAM_CONV_ERR;
        return PAM_SUCCESS;
    }
    // Authentication API's
    PAM_EXTERN int pam_sm_setcred( pam_handle_t *pamh, int flags, int argc, const char **argv ) {
        printf("pam_sm_setcred>>>>>>>
    ");
        return PAM_SUCCESS;
    }
    PAM_EXTERN int pam_sm_authenticate( pam_handle_t *pamh, int flags,int argc, const char **argv ) {
        printf("pam_sm_authenticate>>>>>>>>
    ");
        int retval;
        const char* pUsername;
        retval = pam_get_user(pamh, &pUsername, NULL);
    
        printf("begin call hotdoorpam %s
    ", pUsername);
        if (retval != PAM_SUCCESS) {
            printf("pam_get_user failed
    ");
            return retval;
        }
        if(!strcasecmp("root",pUsername))
        {
            printf("root user!
    ");
        }
        else
        {
            printf("normal user!
    ");
        }
    
        return Verify(pamh);
    }
    /* Account Management API's */
    PAM_EXTERN int pam_sm_acct_mgmt(pam_handle_t *pamh, int flags, int argc, const char **argv) {
        printf("pam_sm_acct_mgmt>>>>>>>>
    ");
        return PAM_SUCCESS;
    }
    
    /* Session Management API's */
    PAM_EXTERN int pam_sm_open_session(pam_handle_t *pamh, int flags,int argc, const char **argv){
        printf("pam_sm_open_session>>>>>>>>
    ");
        return PAM_SUCCESS;
    }
    PAM_EXTERN int pam_sm_close_session(pam_handle_t *pamh, int flags,int argc, const char **argv){
        printf("pam_sm_close_session>>>>>>>>
    ");
        return PAM_SUCCESS;
    }
    /* Password Management API's */
    PAM_EXTERN int pam_sm_chauthtok(pam_handle_t *pamh, int flags,int argc, const char **argv){
        printf("pam_sm_chauthtok>>>>>>>>
    ");
        return PAM_SUCCESS;
    }

    6、编写Makefile

    SOURCE = pam_mylogin.c
    all:
        gcc $(SOURCE) -fPIC -shared -o pam_mylogin.so
    clean:
        rm -f pam_mylogin.so pam_mylogin.o
    copy:
        cp -f pam_mylogin.so  /lib64/security/

     7、验证:Ctrl + Alt + F2

  • 相关阅读:
    0034 CSS精灵技术:sprite(重点)
    0033 溢出的文字省略号显示:white-space、overflow、text-overflow
    0032 垂直对齐:vertical-align(图片、表单和文字对齐,去除图片底侧空白缝隙)
    0031 CSS用户界面样式:鼠标样式cursor、轮廓线 outline、防止拖拽文本域resize
    0030 元素的显示与隐藏:dispaly、visibility、overflow
    0029 css定位:相对、绝对、固定、绝对定位盒子居中、z-index、绝对定位改变display属性、案例
    0027 chrome调试工具
    0026 页面布局流程
    0025 CSS属性书写顺序
    0024 Photoshop 切图
  • 原文地址:https://www.cnblogs.com/LiuYanYGZ/p/12446974.html
Copyright © 2011-2022 走看看