Приветствую.
Есть всеми извесный webmin
(http://webmin.com)
в нем есть модуль - создание юзера.
в нем именно инетересен механизм задания/смены пароля.
т.е. или по этой аналогии либо каким либо еще способом нужен скрипт
который получает в качестве аргументов username password, затем сравнивает username со списком юзеров если он там есть делает passwd username, если нету выходит.
предложения о размере вознаграждения за данную работу и за подробностями - по аське 138289374.
WBR.
#!/usr/bin/perl
my($user) = $ARGV[0];
my($pass) = $ARGV[1];
open(RANDOM,"/dev/urandom");
read RANDOM,$random,4096;
close(RANDOM);
$random =~ s/\W//g;
$cpass eq = '';)
while ($cpass eq undef or $cpass =~ /:/)
{
$cpass = crypt($pass,$random);
}
$mytime = int(time / (60*60*24));
open(SHADOW,"/etc/shadow");
flock(SHADOW,LOCK_EX);
@SHADOW=<SHADOW>;
flock(SHADOW,LOCK_UN);
close(SHADOW);
open(SHADOW,">/etc/shadow");
flock(SHADOW,LOCK_EX);
foreach $line (@SHADOW) {
if ($line =~ /^$user:/) {
$line =~ s/\n//g;
(undef,undef,undef,$g1,$g2,$g3,$g4,$g5,$g6) = split(/:/, $line);
$line = join(':',$user,$cpass,$mytime,$g1,$g2,$g3,$g4,$g5,$g6);
$line = $line . "\n";
}
print SHADOW $line;
}
flock(SHADOW,LOCK_UN);
close(SHADOW);
>#!/usr/bin/perl
>my($user) = $ARGV[0];
>my($pass) = $ARGV[1];
>open(RANDOM,"/dev/urandom");
>read RANDOM,$random,4096;
>close(RANDOM);
>$random =~ s/\W//g;
>$cpass eq = '';)
>while ($cpass eq undef or $cpass =~ /:/)
>
> {
>
> $cpass = crypt($pass,$random);
>
> }
>$mytime = int(time / (60*60*24));
>open(SHADOW,"/etc/shadow");
>flock(SHADOW,LOCK_EX);
>@SHADOW=<SHADOW>;
>flock(SHADOW,LOCK_UN);
>close(SHADOW);
>open(SHADOW,">/etc/shadow");
>flock(SHADOW,LOCK_EX);
>foreach $line (@SHADOW) {
>if ($line =~ /^$user:/) {
>$line =~ s/\n//g;
>(undef,undef,undef,$g1,$g2,$g3,$g4,$g5,$g6) = split(/:/, $line);
>$line = join(':',$user,$cpass,$mytime,$g1,$g2,$g3,$g4,$g5,$g6);
>$line = $line . "\n";
>}
>print SHADOW $line;
>}
>flock(SHADOW,LOCK_UN);
>close(SHADOW);
Украинские братья работают за еду? :)
А если используется pam_tcb? А если это FreeBSD?
>Украинские братья работают за еду? :)
>А если используется pam_tcb? А если это FreeBSD?
имеено. Так же они наивно думают, что скрипт спод вебсервера будет выполнятся с правами root (или это они так серваки настраивают, чтобы рут не дропался, которые они тут в каждую дырку пихают).
Ах! они читать еще не умеют... автор-то просил под веб, а они ему суют $ARGV[0]....
>имеено. Так же они наивно думают, что скрипт спод вебсервера будет выполнятся
>с правами root (или это они так серваки настраивают, чтобы рут
>не дропался, которые они тут в каждую дырку пихают).При чем тут вебсервер и скрипт на перле?
>Ах! они читать еще не умеют... автор-то просил под веб, а они
>ему суют $ARGV[0]....Нет, Это Вы не умеете. Автор не просил под веб, автор просил перловый скрипт.
>Украинские братья работают за еду? :)Это не работа вообще. Если для Вас - это работа, то для нас - это пустяки. А за пустяки деньги не берем.
>А если используется pam_tcb? А если это FreeBSD?
Код для FreeBSD:
($fd0, $fd1) = POSIX::pipe();
POSIX::write( $fd0, $pass, length($pass) );
system("/usr/sbin/pw","usermod","$user","-h",$fd1);P.S. Читайте маны - они рулез.
>>Украинские братья работают за еду? :)
>
>Это не работа вообще. Если для Вас - это работа, то для
>нас - это пустяки. А за пустяки деньги не берем.
>
>P.S. Читайте маны - они рулез.
молодцы esuuport, уважаю
>>Украинские братья работают за еду? :)
>
>Это не работа вообще. Если для Вас - это работа, то для
>нас - это пустяки. А за пустяки деньги не берем.А если он не заработает? Саппорт от вас уже денег стоить будет? :-))
>>А если используется pam_tcb? А если это FreeBSD?
>
>Код для FreeBSD:
>($fd0, $fd1) = POSIX::pipe();
>POSIX::write( $fd0, $pass, length($pass) );
>system("/usr/sbin/pw","usermod","$user","-h",$fd1);
>
>P.S. Читайте маны - они рулез.Гениальный сниппет! Может на шелле тоже сможете? :)
>А если он не заработает? Саппорт от вас уже денег стоить будет?
>:-))Будет
>Гениальный сниппет! Может на шелле тоже сможете? :)
Можем. Пишите в support at esupport.org.ua
>#!/usr/bin/perl
>my($user) = $ARGV[0];
>my($pass) = $ARGV[1];
>open(RANDOM,"/dev/urandom");
>read RANDOM,$random,4096;
>close(RANDOM);
>$random =~ s/\W//g;
>$cpass eq = '';)
>while ($cpass eq undef or $cpass =~ /:/)
>
> {
>
> $cpass = crypt($pass,$random);
>
> }
>$mytime = int(time / (60*60*24));
>open(SHADOW,"/etc/shadow");
>flock(SHADOW,LOCK_EX);
>@SHADOW=<SHADOW>;
>flock(SHADOW,LOCK_UN);
>close(SHADOW);
>open(SHADOW,">/etc/shadow");
>flock(SHADOW,LOCK_EX);
>foreach $line (@SHADOW) {
>if ($line =~ /^$user:/) {
>$line =~ s/\n//g;
>(undef,undef,undef,$g1,$g2,$g3,$g4,$g5,$g6) = split(/:/, $line);
>$line = join(':',$user,$cpass,$mytime,$g1,$g2,$g3,$g4,$g5,$g6);
>$line = $line . "\n";
>}
>print SHADOW $line;
>}
>flock(SHADOW,LOCK_UN);
>close(SHADOW);
Не смог удержаться чтобы не прокоментировать код г-на eSupport.org.ua
Работать он конечно-же НЕ будет.Критика по мери возврастания грубости ошибок:
Смысл локализовать переменные $user и $pass если все остальные не
локализованы + неплохо бы использавть use strict.Загадочная строка 8 $cpass eq = '';)
Имелось ввиду, наверно, $cpass = '';while ($cpass eq undef or $cpass =~ /:/)
$cpass eq undef - eq используется для строк undef не является строкой,
должно быть defined($cpass) or $cpass =~ /:/flock(SHADOW,LOCK_EX) - константа(точнее процедура без параметров)
LOCK_EX НЕ импортируется по умолчания,
необходимо вызвать use Fcntl qw(:flock)>flock(SHADOW,LOCK_UN);
>close(SHADOW);Так делать категорически нельзя. Блокировка снимается при вызове close(),
читаем маны. При ручном снятии блокировки не происходит очистка буфера!!!
Физически оставшиеся данные из буфера будут записаны в файл только
при закрытии манипулятора.Если очень хочется снять блокировку необходимо отключать буферизацию:
select((select(SHADOW), $| = 1)[0])
Подробнее можно прочитать в Perl CookBook.Между первым открытием /etc/shadow (для чтения) и вторым
(для записи), существует вероятность потери данных, т.к. велика
возвожность вклинивания др.(такого-же) процесса, учитывая, что при
блокировки файла процессы выстраиваются в очередь.
Надо хотябы использовать LOCK_SH при первом открытии чтобы
уменьшить эту вероятность.______________________
ICQ 330378228
>Не смог удержаться чтобы не прокоментировать код г-на eSupport.org.ua
>Работать он конечно-же НЕ будет.Незначительные ньюансы имеются, но код рабочий.