У меня есть сценарий удара, который просит Ваш пароль и затем должен проверить пароль с помощью pam, я установил libpam0g-dev
поскольку я понимаю, что мне нужен он для этого, но как точно я иду о проверке пароля с помощью pam? И как pam сообщает мне, действителен ли пароль или нет?
Не колотят, но Вы могли использовать сценарий Perl в своем сценарии удара :P
Первая установка libauthen-pam-perl
sudo apt-get install libauthen-pam-perl
После этого создайте новый сценарий Perl, например, с именем foo
…
#!/usr/bin/env perl
use Authen::PAM;
use POSIX qw(ttyname);
$service = "login";
$username = $ARGV[0];
$password = $ARGV[1];
$tty_name = ttyname(fileno(STDIN));
sub my_conv_func {
my @res;
while ( @_ ) {
my $code = shift;
my $msg = shift;
my $ans = "";
$ans = $username if ($code == PAM_PROMPT_ECHO_ON() );
$ans = $password if ($code == PAM_PROMPT_ECHO_OFF() );
push @res, (PAM_SUCCESS(),$ans);
}
push @res, PAM_SUCCESS();
return @res;
}
ref($pamh = new Authen::PAM($service, $username, \&my_conv_func)) ||
die "Error code $pamh during PAM init!";
$res = $pamh->pam_set_item(PAM_TTY(), $tty_name);
$res = $pamh->pam_authenticate;
if ($res == PAM_SUCCESS()) {
printf ("%s\n","Success");
}
else {
printf ("%s\n","Failure");
}
на основе этого ответа с некоторыми модификациями
От man foo
;)
NAME
foo - password test
SYNOPSIS
foo username password
DESCRIPTION
coming soon
OPTIONS
no options
Пример:
$ sudo ./foo foo wWeErRt # wrong password
Failure
$ sudo ./foo foo wWeErRtT # correct password
Success
В Вашем сценарии:
some code
ret=$(foo "$username" "$password")
some code