Login

顯示管理器如何登錄使用者?

  • May 8, 2014

我即將開始使用我自己的顯示/登錄管理器。我想我可以處理所有 X11 的東西,但我意識到當使用者輸入他們的使用者名和密碼時我不知道該怎麼做。

一旦顯示管理器有了使用者名和密碼,它會做什麼?它如何讓您登錄?登錄管理器是否有任何其他特定要求,例如獲取任何配置文件,還是全部留給桌面環境?

我想我在理解這個問題方面取得了一些進展,所以我會在這裡發布我所知道的。此答案目前適用於那些使用PAM的系統。當我遇到它們時,我會添加更多關於其他登錄方法的資訊。

在顯示管理器的欄位中輸入您的使用者名和密碼後,顯示管理器會使用這兩個欄位並啟動 PAM 身份驗證過程。

首先它呼叫pam_start(). 這告訴 PAM 您正在使用哪個對話函式(我們將了解它是什麼)以及pam_handle_t要初始化的結構。您將此結構傳遞pam_handle_t給以下所有呼叫。

然後你可以設置任何屬性,比如使用pam_set_item(). 您不必在此處設置使用者名。當你打電話時pam_authenticate(),它會詢問它還沒有的任何資訊。

接下來你打電話pam_authenticate()來看看使用者名和密碼是否有效。此時,使用對話功能pam_authenticate()獲取它沒有的任何資訊。您可以查看該連結了解詳細資訊,但簡而言之,PAM 將呼叫您在傳遞給的結構中提供的對話函式。然後它將一組消息傳遞給這個對話函式。如果是,它要求輸入使用者名,如果是,它要求輸入密碼。其他兩個選項在規範中進行了描述,用於錯誤和資訊性消息。根據消息類型,使用響應填充數組並返回正確的錯誤程式碼。pam_start()``pam_authenticate()``msg_style``PAM_PROMPT_ECHO_ON``msg_style``PAM_PROMPT_ECHO_OFF``resp

現在如果pam_authenticate()返回PAM_SUCCESS,則表示使用者存在。然後我們必須呼叫pam_acct_mgmt()以確保使用者此時具有登錄權限(我不知道該權限在哪里或如何設置)。

此時我們使用 獲取令牌pam_setcred(),然後使用pam_open_session(). 我不知道這樣做的目的是什麼或實際使用令牌的方式,但這是必需的。如果您知道更多資訊,請告訴我。

現在我們可以設置我們想要使用的所有 bash 變數pam_putenv()。當我們的環境擁有我們需要的一切時,我們可以 fork 一個新程序,然後execstartx命令。

當此過程完成時,使用者正在註銷。此時我們呼叫pam_close_session(), pam_setcred(帶有刪除憑據的選項),並按此pam_end()順序。

如果其中任何一個不正確或您有更多資訊要添加,請告訴我。您可以查看我的顯示管理器(仍在開發中)以獲取此範例。

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