Linux

如何添加額外的登錄步驟?

  • August 4, 2015

我想要實現的是一個互動式程序,它在向使用者詢問密碼之前或之後執行,但除非成功退出,否則不會處理對電腦的訪問。為了讓它更容易理解,這裡有一個例子:

我想訪問我的電腦,首先寫下我的使用者名,然後是密碼,然後正確回答一個簡單的隨機生成的數學問題。

為此,我使用以下系統身份驗證文件:

auth      required  pam_unix.so try_first_pass nullok nodelay
auth      optional  pam_faildelay.so delay=600000
auth      optional  pam_exec.so stdout /home/math
auth      optional  pam_permit.so
auth      required  pam_env.so

問題是,名為 math 的程序無法處理來自使用者的輸入,因為它會自動從 PAM 讀取 EOF,這實際上使其無用。我還嘗試了以下可疑行的變體,在這種情況下它會讀取密碼,這也不是我想要的:

auth      optional  pam_exec.so stdout expose_authtok /home/math

在 PAM 階段沒有標準輸出/標準輸入。您需要呼叫pam_conv(3)viapam_get_item(3)來執行 i/o。

ben.akrin.com上的好例子,包括相關的 C 原始碼範例。

引用自:https://unix.stackexchange.com/questions/220198