2014-02-07 95 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必须以某种方式绕过这个限制。