Codigo funciona no shell mas nao no php

1. Codigo funciona no shell mas nao no php

Jorge Santos
jorgessn

(usa Ubuntu)

Enviado em 10/02/2019 - 18:03h

Boa tarde a todos.
Mais uma vez recorrendo a ajuda de vocês.
Pessoal, estou c/ esse problema. Esse script abaixo funciona no shell mas nao no php. E quando tento usar a mesma logica pro comando passwd só que sem o -s e -a nao funciona em canto nenhum nem no php e nem no shell. Eu precisava trocar a senha do usuario usuario e do smb recebendo a senha de um form php.
Agradeço a ajuda!

<?php
//Troca senha SMB funciona no shell mas nao no php
if(isset($_POST['enviar']))
{
$senha = $_POST['senha'];
$smbpasswd="sudo -U root ( echo $senha ; echo $senha ) | smbpasswd -s -a usuario ";
shell_exec($smbpasswd);
echo "<br><br><br><br>";
echo "Cadastro efetuado com Sucesso !!!";
echo "<br><br><br><br>";
}
?>



  


2. Re: Codigo funciona no shell mas nao no php

Fábio Berbert de Paula
fabio

(usa Debian)

Enviado em 10/02/2019 - 18:12h

Via browser o código é executado pelo usuário www-data. Você precisa dar permissão à este usuário para executar este comando via sudo.

EDIT: só toma cuidado porque colocar o www-data com permissão de sudo sem senha é uma baita falha de segurança. Se for para uso pessoal OK.


3. Codigo funciona no shell mas nao no php

Jorge Santos
jorgessn

(usa Ubuntu)

Enviado em 10/02/2019 - 19:32h

Obrigado pela ajuda Fabio, mas o usuario www-data ja esta com pemissao de sudo , no sudoers esta assim:
www-data ALL=(ALL:ALL) ALL


Estranho que no shell se eu trocar a variavel ${senha} por caracteres qualquers funciona.
<?php
if(isset($_POST['enviar']))
{
$senha = $_POST['senha'];
$smbpasswd="sudo -U root ( echo ${senha} ; echo ${senha} ) | smbpasswd -s -a nuvembox ";
shell_exec($smbpasswd);
echo "Cadastro efetuado com Sucesso !!!";
}
?>



4. Re: Codigo funciona no shell mas nao no php

Rodrigo Leutz
denver

(usa Arch Linux)

Enviado em 10/02/2019 - 20:26h

tem o $_POST['enviar'] e $_POST['senha']
não é isso?


manda o erro do /var/log/httpd/error.log

------------------------------------------------------------------------
https://www.uware.com.br
Arch


5. Codigo funciona no shell mas nao no php

Jorge Santos
jorgessn

(usa Ubuntu)

Enviado em 10/02/2019 - 22:45h

Oi Denver, obrigado pela sua ajuda, segue o log do apache:

sh: 1: Syntax error: "(" unexpected
passwd: You may not view or modify password information for nuvembox.
Adding password for user nuvembox
sh: 1: Syntax error: "(" unexpected
passwd: You may not view or modify password information for nuvembox.
Adding password for user nuvembox



6. Re: Codigo funciona no shell mas nao no php

Rodrigo Leutz
denver

(usa Arch Linux)

Enviado em 10/02/2019 - 22:53h


pelo que entendi o www-data fica no prompt de passwd
tem q colocar o passwd dele no comando

------------------------------------------------------------------------
https://www.uware.com.br
Arch


7. Re: Codigo funciona no shell mas nao no php

Marco Aurélio
macarena

(usa Linux Mint)

Enviado em 11/02/2019 - 12:37h

sh: 1: Syntax error: "(" unexpected


Esse parenteses é o problema relatado pelo log.
No caso, não é problema no php, mas no shell script.
Use $ na frente do parenteses, vc não quer um subshell, apenas a substituição dos comandos....


8. Codigo funciona no shell mas nao no php

Jorge Santos
jorgessn

(usa Ubuntu)

Enviado em 13/02/2019 - 20:22h

Obrigado pela ajuda Macarena, não foi nem com $ na frente do parentese e nem sem os parenteses. Estranho que se o erro fosse no shell o comando nao funcionaria direto nele, mas funciona! Acho que alguma syntax ta errada no php

<?php
if(isset($_POST['enviar']))
{
$senha = $_POST['senha'];
$smbpasswd="( echo ${senha} ; echo ${senha} ) | smbpasswd -s -a nuvembox ";
shell_exec($smbpasswd);
echo "Cadastro efetuado com Sucesso !!!";
}
?>


9. Re: Codigo funciona no shell mas nao no php

Rodrigo Leutz
denver

(usa Arch Linux)

Enviado em 13/02/2019 - 21:51h

tenta assim



<?php
if(isset($_POST['enviar']))
{
$senha = $_POST['senha'];
$smbpasswd="( echo {$senha} ; echo {$senha} ) | smbpasswd -s -a nuvembox ";
shell_exec($smbpasswd);
echo "Cadastro efetuado com Sucesso !!!";
}
?>

ou

<?php
if(isset($_POST['enviar']))
{
$senha = $_POST['senha'];
$smbpasswd="( echo ".$senha." ; echo ".$senha." ) | smbpasswd -s -a nuvembox ";
shell_exec($smbpasswd);
echo "Cadastro efetuado com Sucesso !!!";
}
?>

------------------------------------------------------------------------
https://www.uware.com.br
Arch


10. Codigo funciona no shell mas nao no php

Jorge Santos
jorgessn

(usa Ubuntu)

Enviado em 15/02/2019 - 00:08h

Obrigado Denver, mas ainda nada. Agora o log nao acusou nenhum erro, mas nao funcionou mesmo. Semha do usuario do smb nao altera ainda


11. Re: Codigo funciona no shell mas nao no php

Fábio Berbert de Paula
fabio

(usa Debian)

Enviado em 15/02/2019 - 00:18h

Obrigado pela ajuda Fabio, mas o usuario www-data ja esta com pemissao de sudo , no sudoers esta assim:
www-data ALL=(ALL:ALL) ALL


www-data ALL=(ALL:ALL) NOPASSWD:ALL

Se você não colocar o NOPASSWD, o sudo não irá executar.