1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

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

Discussão em 'Web Development' iniciada por Armadillo, 24 de Setembro de 2008. (Respostas: 8; Visualizações: 1733)

  1. Armadillo

    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: 2 de Outubro de 2008
  2. mcog_blaster

    mcog_blaster Power Member

    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: 24 de Setembro de 2008
  3. Armadillo

    Armadillo Folding Member

    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 ;)
     
  4. spastikman

    spastikman Banido

    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
     
  5. Armadillo

    Armadillo Folding Member

    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
     
  6. slack_guy

    slack_guy Power Member

    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: 25 de Setembro de 2008
  7. Armadillo

    Armadillo Folding Member

    vou ver isso ;)

    abraço
     
  8. Armadillo

    Armadillo Folding Member

    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
     
  9. Armadillo

    Armadillo Folding Member

    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
     

Partilhar esta Página