2010-06-22 81 views
1

我目前正在編寫一個C語言中的CGI博客引擎(有趣的項目 - 不要討厭!:),我想爲每個有登錄的用戶啓用發佈Web服務器運行的機器。測試本地用戶登錄數據

查看提供的登錄名和密碼是否與系統登錄數據匹配的正確方法是什麼?

爲了說明一下,如果我在主機上有一個帶密碼「pass」的shell用戶名「user」,我希望能夠在CGI上使用相同的「user」和「pass」來授權我自己頁。

免責聲明:我知道,送你的shell的登錄數據加密過可能有多個路由器的CGI網站是試圖使一個充滿氣體的儲罐內火的安全,但這是(並保持)一本地化的有趣項目:)

回答

1

您需要libshadow才能進行身份驗證。這裏有一個方便的概述。

http://www.linux.org/docs/ldp/howto/Shadow-Password-HOWTO-8.html

+1

那麼,頁面上說libshadow需要root權限才能操作......我不認爲我的CGI腳本會是root ...:/ – LukeN 2010-06-22 18:37:43

+0

那麼,你是在問你的CGI腳本去做一些非常愚蠢和不安全的事情。 ..令人驚訝的是,您需要提升特權才能訪問和解密/ etc/passwd和/ etc/shadow?唯一的其他選擇是做其他系統做的事情,並且這是一個使用libshadow的進程守護進程,讓CGI以普通用戶的身份通過守護進程運行憑據。 – sleepynate 2010-06-23 21:48:47

+0

除此之外,也許看看CGIpaf是怎麼做的: http://www.wagemakers.be/english/programs/cgipaf – sleepynate 2010-06-23 21:55:56

0

你可以使用PAM,這是一個C庫。還有其他語言的綁定。

+0

顯然,PAM是編寫與認證相關的應用程序的最佳方式,但我想知道如何在CGI場景中使用它。我的意思是,PAM應用程序不能簡單地調用'pam_set_item(pamh,PAM_AUTHTOK,password)',這些東西必須通過應用程序定義的回調來提供。但CGI過程將在接收用戶答案之前死亡,並且無法在表單提交時恢復完整的PAM上下文。我只能考慮在某處存儲{PAM問題 - >用戶答案}映射,但這看起來像是一個很大的醜陋黑客。糾正我,如果我錯了。 – rkhayrov 2010-06-22 13:52:44

+0

反正我會做一個單獨的守護進程來處理認證。等等,爲什麼不使用SASL呢? – unbeli 2010-06-22 14:17:36