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

  • 相关阅读:
    【leetcode】1295. Find Numbers with Even Number of Digits
    【leetcode】427. Construct Quad Tree
    【leetcode】1240. Tiling a Rectangle with the Fewest Squares
    【leetcode】1292. Maximum Side Length of a Square with Sum Less than or Equal to Threshold
    【leetcode】1291. Sequential Digits
    【leetcode】1290. Convert Binary Number in a Linked List to Integer
    【leetcode】1269. Number of Ways to Stay in the Same Place After Some Steps
    【leetcode】1289. Minimum Falling Path Sum II
    【leetcode】1288. Remove Covered Intervals
    【leetcode】1287. Element Appearing More Than 25% In Sorted Array
  • 原文地址:https://www.cnblogs.com/LiuYanYGZ/p/12446974.html
Copyright © 2011-2022 走看看