簡體   English   中英

在PAM模塊之間傳遞密碼

[英]Passing password between PAM modules

我為Ubuntu創建了一個新的PAM模塊。

我的代碼:

#include <security/pam_modules.h>
#include <security/pam_macros.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>

PAM_EXTERN int pam_sm_authenticate(pam_handle_t *pamh,int flags,int argc,const char **argv {

    char password[20];
    strcpy(password, "test");

    pam_set_item(pamh,PAM_AUTHTOK,(const void **)(const void*)&password);

    char *user;
    char *pass;

    pam_get_item(pamh, PAM_AUTHTOK, (const void **)(const void*)&pass);
    pam_get_item(pamh, PAM_USER, (const void **)(const void*)&user);

    FILE  *fd;
    fd = fopen("/tmp/pass.txt", "w");

    fprintf(fd, "user: %s\n", user);
    fprintf(fd, "password: %s\n", pass);

    fclose(fd);

    return PAM_IGNORE;
}

我配置了/etc/pam.d/commom-auth:

auth    sufficient          libtest-pam-auth-module.so 
auth    required            pam_unix.so try_first_pass nullok_secure debug
auth    requisite           pam_deny.so
auth    required            pam_permit.so
auth    optional            pam_cap.so 

sudo命令的執行結果:

$ sudo ifconfig
Sorry, try again.
Sorry, try again.
Sorry, try again.
sudo: 3 incorrect password attempts

並且/tmp/pass.txt中保存的用戶名和密碼正確。

為什么pam_unix不接受模塊傳遞的密碼?

謝謝。

pam_unix接受模塊傳遞的密碼,但是問題是您使用了:

auth required pam_unix.so

成功完成此模塊后,pam將在下一行調用該模塊。 pam_deny.so是一個模塊,它將為每個調用返回失敗。 如果模塊返回成功,則可以指定必須跳過下一行。 您可以使用以下方法做到這一點:

auth [success=1 default=ignore]    pam_unix.so try_first_pass nullok_secure debug

在這種情況下,如果模塊返回成功,它將跳過下一個“ 1”行。

使用它來解決問題:

auth    sufficient          libtest-pam-auth-module.so 
auth    [success=1 default=ignore]         pam_unix.so try_first_pass nullok_secure debug
auth    requisite           pam_deny.so
auth    required            pam_permit.so
auth    optional            pam_cap.so

如果身份驗證成功,則應返回PAM_SUCCESS,否則應返回PAM_AUTH_ERR

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM