LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1089|回复: 6

请教!如何用perl写一个可实现让操作系统用户可更改自已密码的CGI程序?

[复制链接]
发表于 2005-5-9 09:04:07 | 显示全部楼层 |阅读模式
请教!如何用perl写一个可实现让操作系统用户可更改自已密码的CGI程序?
 楼主| 发表于 2005-5-16 16:46:52 | 显示全部楼层

怎么没人解答呀!

怎么没人解答呀!
回复 支持 反对

使用道具 举报

发表于 2005-5-17 00:17:14 | 显示全部楼层
让 CGI 使用 rootkit ?
回复 支持 反对

使用道具 举报

发表于 2005-5-17 13:41:32 | 显示全部楼层
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-18 17:13:17 | 显示全部楼层

呵呵,多谢!看过PERL—PAM了。应该OK

呵呵,多谢!看过PERL—PAM了。应该OK
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-20 21:16:50 | 显示全部楼层

继续求教!

我用下面的代码进行测试,以用户zyhua进行运行,总是出现“Authentication token manipulation error  ”的错误,有谁知道为什么吗?多谢!
我试过,用些脚本在root用户下是可以改一般用户密码的。
有那位高手看过请指定!多谢!


***********************************
use Authen:AM;

  $service = "passwd";
  $username = "zyhua";
  $oldpassword = "old_pass";
  $newpassword = "new_pass";

  sub my_conv_func {
    my @res;
    while ( @_ ) {
        my $code = shift;
        my $msg = shift;
        my $ans = "";

        $ans = $username if ($code == PAM_PROMPT_ECHO_ON() );
        if ($code == PAM_PROMPT_ECHO_OFF() ) {
          $ans = $oldpassword if ($state == 0);
          $ans = $newpassword if ($state == 1);
          $ans = $newpassword if ($state == 2);

          $state++;
        }

        push @res, (PAM_SUCCESS(),$ans);
    }
    push @res, PAM_SUCCESS();
    return @res;
  }

  ref($pamh = new Authen:AM($service, $username, \&my_conv_func)) ||
         die "Error code $pamh during PAM init!";

  $state = 0;
  $res = $pamh->pam_chauthtok;
  print $pamh->pam_strerror($res),"\n" unless $res == PAM_SUCCESS();
***********************************
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-8-29 15:26:55 | 显示全部楼层
唉,这个问题终于想到一点解决的方法了。就是使用setuid来实现好了。

不过还是有一定的风险
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表