2014-02-07 44 views
0

我想了2天,現在寫一個自定義的PAM腳本,在Linux下與sys用戶身份驗證並通過。如何獲得使用Apache和mod_authnz_external的PAM認證?

我在C,Python和Perl中做了一些例子,但是我對它們都有同樣的問題。

當我在我的shell中測試腳本時,一切正常。

我測試他們

# ./script;echo $? 

並得到0或1回。

但是,只要我嘗試使用它與mod_authz_external和Apache它停止工作。

即使有一個有效的用戶,我得到一個1名後面並不能登錄。

似乎有與PAM的問題,也許是Apache的環境。

我讀了一些地方,我必須設置環境變量使用PAM,但我不知道如何。

以下是C,Perl和Python的例子:

C:http://pastebin.com/v9Yn9xvK

的Perl:http://pastebin.com/cqzqztYg

的Python:http://pastebin.com/32cvvCjS

選擇任何你喜歡的,他們的工作都是一樣的。 ..返回退出碼0或1.

每個幫助或提示將不勝感激。

謝謝!

+0

我最終將pwauth的源代碼(https://code.google.com/p/pwauth/)更改爲我的需要。但我仍然很好奇爲什麼我的嘗試不起作用。我想我會嘗試將我的C解決方案與pwauth源代碼進行比較... – Nico

回答

0

如果您使用PAM驗證系統用戶,那麼它將通過libpam_unix.so。從pam_unix的聯機幫助頁:

提供助手二進制文件unix_chkpwd(8),用於在存儲在讀取保護數據庫中時檢查用戶的密碼。這個二進制文件非常簡單,只會檢查調用它的用戶的密碼。

所以如果你想從web服務器認證用戶,你很可能以用戶'apache'或類似的東西運行。所有的pam_unix可以爲你做的是驗證用戶'apache',這很可能不是你想要的。 pwauth必須以某種方式繞過這個限制。