PHP X SHELL SCRIPT (LINUX)

1. PHP X SHELL SCRIPT (LINUX)

Cristiano Vieira Santos
cristianovieira

(usa Fedora)

Enviado em 20/09/2007 - 18:05h

Olá, estou com um pequeno grande problema por aqui, utilizo o fedora core 7, adicionei ja teste varias configurações dentro do arquivo sudoers, ja tentei de tudo e não consegui fazer o php adicionar o usuario, bom segue abaixo as linhas que testei no sudoers:
apache ALL=NOPASSWD: useradd smbpasswd userdel
apache ALL=NOPASSWD: ALL

nobody ALL=NOPASSWD: useradd smbpasswd userdel
nobody ALL=NOPASSWD: ALL

www ALL=NOPASSWD: useradd smbpasswd userdel
www ALL=NOPASSWD: ALL

e as linhas php que estou utilizando para adição de usuario no linux via PHP segue abaixo:

$adduser = "sudo useradd -g users -d /home/ $login -m -s /bin/bash $login |echo $login:$password |chpasswd";
$comando = shell_exec($adduser);

Obs: Ja foi testado se a variavel login e password possui algum valor. Obrigado e aguardo respostas



  


2. /etc/sudoers

Phelipe de Oliveira Melanias
phelipe

(usa Arch Linux)

Enviado em 20/09/2007 - 18:19h

Eu tenho um sistema, já em produção que desenvolvi, que controla o domínio da empresa em que trabalho e para o script que adiciona ou remove usuários e máquinas funcionar coloquei a seguinte linha logo abaixo do usuário root em /etc/sudoers:

apache* ALL=NOPASSWD: /usr/bin/passwd, /usr/bin/smbpasswd, /usr/sbin/useradd, /usr/sbin/groupadd, /usr/sbin/userdel, /usr/bin/gpasswd, /usr/bin/cat, /usr/bin/cut, /usr/bin/echo

e no script PHP:

$useradd = "/usr/bin/sudo /usr/sbin/useradd -g ${grupo} -c '${nome}' -d /dev/null -s /bin/false ${login}";

$smbpasswd = "( /usr/bin/echo ${senha}; /usr/bin/echo ${senha} ) | /usr/bin/sudo /usr/bin/smbpasswd -a -s ${login}";

$cmd1 = shell_exec($smbpasswd);
$cmd2 = shell_exec($smbpasswd);

acho que de acordo com estas informações você consiga colocar pra funcionar em seu servidor. :-)

* Troque pelo usuário correto


3. E ae?

Phelipe de Oliveira Melanias
phelipe

(usa Arch Linux)

Enviado em 22/09/2007 - 08:34h

Conseguiu resolver o teu problema? Posta aqui alguma coisa. :-)


4. Re: PHP X SHELL SCRIPT (LINUX)

Cristiano Vieira Santos
cristianovieira

(usa Fedora)

Enviado em 24/09/2007 - 17:57h

É amigo não consegui não, vou colocar aqui o conteudo do arquivo sudoers:

apache ALL=NOPASSWD: /usr/bin/passwd, /usr/bin/smbpasswd, /usr/sbin/useradd, /usr/sbin/groupadd, /usr/sbin/userdel, /usr/bin/gpasswd, /usr/bin/cat, /usr/bin/cut, /usr/bin/echo

ta igual ao seu, não sei se tem que reinciar algum processo, ou alterar permissão de algum outro arquivo, o script php eu reduzi a apenas a execução do comando useradd e a variavel login mais mesmo assim ele não adiciona nem a reza braba, segue abaixo o script:

echo "login ".$login."<br>";
echo "nome ".$nome."<br>";

$useradd = "/usr/bin/sudo /usr/sbin/useradd ${login}";

$smbpasswd = "( /usr/bin/echo ${senha}; /usr/bin/echo ${senha} ) | /usr/bin/sudo /usr/bin/smbpasswd -a -s ${login}";

$cmd1 = shell_exec($useradd);
$cmd2 = shell_exec($smbpasswd);


5. Re: PHP X SHELL SCRIPT (LINUX)

Elgio Schlemer
elgio

(usa OpenSuSE)

Enviado em 24/09/2007 - 18:40h

É EXATAMENTE ISTO e eu uso assim e funciona.
Olha só PARTE do meu sudoers:

www-data ALL = NOPASSWD: /bin/grep


Autorizo a usar o grep.
No caso meu daemon, por opção MINHA, não roda como usuário apache, mas sim como usuário www-data.

Verifique:

1)Você editou o arquivo sudoers com visudo ou editou com vi? NÃO PODE, tem que ser com visudo

2) Teu apache executa mesmo como usuário apache? O que um ps auxc|grep apache te revela?

3) Não tem nenhuma outra restrição do PAM?


6. SEGURANÇA

Elgio Schlemer
elgio

(usa OpenSuSE)

Enviado em 24/09/2007 - 18:41h

Bom, só para deixar registrado, pois tu deve certamente ter considerado os riscos: não convém dar muito poder ao daemon apache.


7. ACHEI

Elgio Schlemer
elgio

(usa OpenSuSE)

Enviado em 24/09/2007 - 18:43h

Pocha, 3 posts em sequencia, mas vamos lá!

Cara, se tu põe /bin/adduser no sudo, tem que chamar omo /bin/adduser!

Se tu chamar no PHP apenas como adduser não vai funcionar.

Tenta mudar a chamada do PHP para exatamente o do binário.

Ainda: tu PHP permite execução de comandos externos? (em SAFE MOD não permite!!!)

Podes testar com um simples ls -la e ver se o ls aparece no teu browser.


8. Vamos la.

Cristiano Vieira Santos
cristianovieira

(usa Fedora)

Enviado em 24/09/2007 - 20:21h

Bom eu realmente editei o arquivo sudoers com o vi e não com o visudo, ja editei com o visudo salvei ta tudo ok, o conteudo dele não mudou, continua com o usuario apache, a minha grande duvida é, será que o apache realmente é o usuario que web que está sendo utilizado, segue abaixo o resultado o ps aux:

ps auxc|grep apache
apache 2012 0.0 0.5 27928 5292 ? S 17:03 0:00 httpd
apache 2013 0.0 0.6 27928 6716 ? S 17:03 0:00 httpd
apache 2014 0.0 0.5 27928 5292 ? S 17:03 0:00 httpd
apache 2015 0.0 0.5 27928 5292 ? S 17:03 0:00 httpd
apache 2016 0.0 0.5 27928 5292 ? S 17:03 0:00 httpd
apache 2017 0.0 0.5 27928 5292 ? S 17:03 0:00 httpd
apache 2019 0.0 0.5 27928 5292 ? S 17:03 0:00 httpd
apache 2020 0.0 0.5 27928 5292 ? S 17:03 0:00 httpd

Sobre o SAFE MODE do php editei o arquivo /etc/php.ini encontrei:
safe_mode = Off

Sobre o caminho dos binarios no script do php revisei e realmente o useradd está correto em /usr/sbin/useradd confira ali em cima aonde eu colei os scripts ele está setando corretamente para o caminho do useradd.

Bom resolvi fazer o teste do ls que vc me falou, realmente não apareceu nada, ou seja o php não está executando comandos externos, comentei todas as linhas de adição de usuario e coloquei apenas:

$listagem = "la -la";
$cmd3 = shell_exec($listagem);

Bom como devo proceder para o php resolver me ajudar ? rssss.. Abração pessoal e muito obrigado pelas respostas.


9. Re: PHP X SHELL SCRIPT (LINUX)

Elgio Schlemer
elgio

(usa OpenSuSE)

Enviado em 24/09/2007 - 23:07h

Ah pois é!
Então ele não tá executando comandos mesmo!

Tente o seguinte:
1) Edite o php.ini e faça com a exista esta linha:
display_errors = On

Ela existe, só deve estar comentada. Isto vai fazer com que o PHP notifique erros na tela do teu browser. TESTE APENAS, não esqueça de comentar quando for colocar em produção.

Tente a várias variantes:

# shell_exec("ls -la");
# shell_exec("/bin/ls -la");
# `/bin/ls -la`;
# passthru("/bin/ls -la");

Descomente um por vez.

Agora ou tu ve qual funciona ou tu vai ver a mensagem de erro do PORQUE não funcionou.





10. Re: PHP X SHELL SCRIPT (LINUX)

Phylipe Venancio Soares
tuxSoares

(usa Ubuntu)

Enviado em 25/09/2007 - 02:07h

CAra para eu poder usar o php com shell script aqui tive que instalar a extensao php-cli que nao estava isntalada.

Uso o Ubuntu 7.04


11. Quase lá...

Cristiano Vieira Santos
cristianovieira

(usa Fedora)

Enviado em 25/09/2007 - 09:39h

Estamos chegando a uma conclusão do problema pessoal, bom Display_error eu sempre coloco Off para não aparecer os Warning, ativei o Display_error executei os comandos abaixo 1 de cada vez:

shell_exec("ls -la");
shell_exec("/bin/ls -la");
'/bin/ls -la`;
passthru("/bin/ls -la");

Os comandos não deram erro algum porém não listaram nada exceto o passthru que listou o conteudo normal sem dar erro algum, aproveitei e tentei adicionar o usuario com o passthru, não deu erro porém não adicionou, segue abaixo o que tentei fazer:

passthru("/usr/bin/sudo /usr/sbin/useradd teste");

sobre o pacote do php-cli instalei todos os pacotes do php quando tive a necessidade de fazer o shell. Quando listou com o passthru quase morri do coração aqui. Abração pessoal, falta pouco !







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts