LINUX.ORG.RU

Ответ на: комментарий от mezantrop

Нет, не про WebMin. Мне нужна простейшая форма, к торой будет доступ по HTTPS, состоящая из 4х полей: - UserName - Old Password - New Password - Retype New Password

Язык реализации не важен, доступны как Перл, так и ПХП.

FreeOne
() автор топика
Ответ на: комментарий от FreeOne

Забудь об этой идее - слишком несекурно.

Deleted
()

а нафиг? сделать чувакам в passwd shell /bin/passwd, и сказать чтобы пользовались putty для смены пароля

borisych ★★★★★
()

что-то вроде вот этого,
не забудь скрипту поставить suid & sugid биты и владельца таким же, как у /etc/shadow

#!/usr/bin/suidperl

use strict;
use warnings;
use CGI::Pretty qw/:all/;

print "Content-type: text/html\n\n";
my $username = param('username')||'gin';
my $newpass = param('newpass')||'';
my $oldpass = param('oldpass')||'';


print "<html><head><title>Change password</title></head><body>";

print "<form act=passwd.pl method=post><table border=0><tr><td>User: </td><td><input type=text name=username value=$username></td><tr>\n";
print "<tr><td>Old Password: </td><td><input type=password name=oldpass value=$oldpass></td><tr>\n";
print "<tr><td>New Password: </td><td><input type=password name=newpass value=$newpass></td><tr>\n";
print "</table><input type=submit value=Change></form>";
print "</body></html>\n";

open FD, "< /etc/shadow " or die "$!";
my @users = <FD>;
close FD;
my @nusers;
foreach (@users) {
my @a = split ':';
if ($a[0] eq $username) {
$a[1] =~ /^\$(.)\$(.*)\$(.*)/;
my $salt = $2;
my $pass = $3;
$salt = '$1$'.$salt;
my $hashed = crypt ($oldpass, $salt);
if ($hashed eq $a[1]) {
$a[1] = crypt ($newpass, $salt);
} else {
print "wrong password<br>\n";
print "$hashed<br>\n$a[1]";
}
}
push @nusers, join(':', @a);
}
open FD, "> /etc/shadow " or die "$!";
foreach (@nusers) {
print FD "$_";
}
close FD;
print "</body></html>\n";

Gin ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.