J'ai un script bash qui vous demande votre mot de passe, puis vous devez le valider avec pam. J'ai installé libpam0g-dev
comme je comprends, j'en ai besoin pour cela, mais comment puis-je valider le mot de passe avec pam? Et comment pam me permet-il de savoir si le mot de passe est valide ou non?
Pas bash, mais vous pouvez utiliser un script Perl dans votre script bash : P
Première installation libauthen-pam-Perl
Sudo apt-get install libauthen-pam-Perl
Après cela, créez un nouveau script Perl, par exemple. avec le nom 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");
}
basé sur cette réponse avec quelques modifications
De man foo
;)
NAME
foo - password test
SYNOPSIS
foo username password
DESCRIPTION
coming soon
OPTIONS
no options
Exemple:
$ Sudo ./foo foo wWeErRt # wrong password
Failure
$ Sudo ./foo foo wWeErRtT # correct password
Success
Dans votre script:
some code
ret=$(foo "$username" "$password")
some code