[Perl] ou [PHP] shell_exec ("sudo passwd ... + Config Webmin

Armadillo

Folding Member
Boas.

Bem o meu problema é o seguinte: pretendo, através de um script PHP, mudar a password de um utilizador.

para isso, o script que fiz até agora é o seguinte:
Código:
<?php
$ output = shell_exec ("sudo passwd testUser testUserPassword");
echo "<pre>$output</pre>";
?>
...mas não obtenho qualquer output nem a password é modificada.
Agora, o que eu acho que me falta é a introdução da password do root.
Algumas ideias?

O SO é um Mac OS X (aka Unix).

Cumps

Estou em ambiente controlado, por isso dizer que o que eu quero fazer é uma quebra na segurança do meu server, será considerado spam.
 
Última edição:
Boas.

Bem o meu problema é o seguinte: pretendo, através de um script PHP, mudar a password de um utilizador.

para isso, o script que fiz até agora é o seguinte:
Código:
<?php
$ output = shell_exec ("sudo passwd testUser testUserPassword");
echo "<pre>$output</pre>";
?>
...mas não obtenho qualquer output nem a password é modificada.
Agora, o que eu acho que me falta é a introdução da password do root.
Algumas ideias?

O SO é um Mac OS X (aka Unix).

Cumps

Estou em ambiente controlado, por isso dizer que o que eu quero fazer é uma quebra na segurança do meu server, será considerado spam.

Penso que vais ter de configurar um ficheiro sudoers para poderes usar sudo sem autenticaçao.
Se o retorno é vazio, é porque o comando nao foi executado ou é gerou algum erro, tenta exec ou system.
 
Última edição:
Agradeço a sugestão ;)
Mas não quero dar permissões ao user "_www" de forma a ele poder mudar password. O ambiente é controlado mas isso já é arriscado demais.

Outras sugestões?

thnks ;)
 
Agradeço a sugestão ;)
Mas não quero dar permissões ao user "_www" de forma a ele poder mudar password. O ambiente é controlado mas isso já é arriscado demais.

Outras sugestões?

thnks ;)

ou crias um binário para tratar disso, ou então verifica se tens um binário chamado "expect".

É muito util em bash script para esse tipo de situações.


olha aqui um exemplo : http://ubuntuforums.org/showthread.php?t=192929
 
surgiu-me, entretanto, outra opção
Código:
$pp = popen("passwd " . $user, "w");
fwrite($pp, $oldPassword . '\n');
fwrite($pp, $newPassword . '\n');
fwrite($pp, $newPassword . '\n');
pclose($pp);
mas resulta em nada...
uma ajudinha, pf

cumps
 
Uma pista: faz o download do Webmin, descompactas o ficheiro, vais à pasta '/webmin/useradmin' e investigas os ficheiros (Perl) que lidam com a alteração das passwords dos utilizadores na plataforma em que estás a trabalhar.

EDIT: nessa pasta, vê o ficheiro user-lib.pl
 
Última edição:
para nao ter que voltar a criar um novo topico:

já alguem configurou o módulo Usermin do Webmin?
é que o usermin não me faz login...

cumps
 
ora bem, ainda nao resolvi esta questão.
Ao que pude apurar, com a utilização de Expect, poderei fazer o que pretendo.

Entretanto, encontrei um script em Perl
Código:
<code> 
#!/usr/bin/perl 

use Expect; 
use CGI; 

my $cgi = new CGI; 
my $p = $cgi->Vars; 

print $cgi->header; 
my $exp = Expect->spawn("sudo passwd $p->{user}") or die "Can't run 'sudo passwd  
$p->{user}'\n"; 
print "Running 'sudo passwd $p->{user}' with password '$p->{password}'<br>"; 
$exp->expect(1000, 
              [qr'New UNIX password: $', 
               sub { 
                 my $fh = shift; 
                 $fh->send("$p->{password}\n"); 
                 print "Sent '$p->{password}'<br>"; 
                 exp_continue; 
               } 
              ], 
              [qr'Retype new UNIX password: $', 
               sub { 
                 my $fh = shift; 
                 $fh->send("$p->{password}\n"); 
                 print "Sent '$p->{password}'<br>"; 
#                exp_continue; 
               } 
              ]); 
</code>
será que esta coisa funcionará?


o correspondente a este CGI para a linha de comando é este:
Código:
<code> 
#!/usr/bin/perl 

use Expect; 

my $user = shift; 
my $password = shift; 
print "Running 'sudo passwd ${user}'\n"; 
my $exp = Expect->spawn("sudo passwd ${user}") or die "Can't run 'sudo passwd ${user}'\n"; 
$exp->expect(1000, 
              [qr'New UNIX password: $', 
               sub { 
                 my $fh = shift; 
                 $fh->send("${password}\n"); 
                 print "sent '${password}'\n"; 
                 exp_continue; 
               } 
              ], 
              [qr'Retype new UNIX password: $', 
               sub { 
                 my $fh = shift; 
                 $fh->send("${password}\n"); 
                 print "sent '${password}'\n"; 
#                exp_continue; 
               } 
              ]); 
</code>


cumps
 
Back
Topo