O usuário do Apache www-data
precisa ter privilégios para executar certos aplicativos usando sudo
.
- Execute o comando
sudo visudo
. Na verdade, queremos editar o arquivo em etc/sudoers
.Para fazer isso, usando sudo visudo
no terminal, ele duplicará o sudoers
arquivo (temp) para editar.
- No final do arquivo, adicione o seguinte ex: -se quisermos usar o comando para
restart
fumar e o php
comando para outra ação na sua pergunta,
www-data ALL=NOPASSWD: /etc/init.d/smokeping/restart, usr/bin/php
(Isso pressupõe que você deseja executar restart
e php
comandos usando privilégios de superusuário (root). E você usa o php
comando no usr/bin/
caminho)
No entanto, se você deseja executar todos os aplicativos usando privilégios de superusuário, adicione o seguinte em vez do que está acima. Você pode não querer fazer isso, não para ALL
comandos, muito perigoso.
www-data ALL=NOPASSWD: ALL
3. Depois de editar o arquivo sudoers ( visudo
editamos o arquivo temporário sudoers
para salvar e sair do arquivo temporário (visudo) para gravar no sudoers
arquivo. ( wq!
)
4. É isso, agora use exec()
ou shell_exec
da seguinte maneira dentro do seu xxx.php
script. lembre-se de usar sudo
antes do comando usar no script php.
ex:-
exec ("sudo /etc/init.d/smokeping restart 2>&1");
ou
shell_exec("sudo php -v");
Portanto, no seu problema, adicione os comandos que você deseja usar ao step no (2.)
que eu adicionar e altere seu script php conforme o que você deseja.
aqui está o mesmo problema que o seu /programming//a/22953339/1862107
Thusitha Sumanadasa
fonte
Tente especificar todo o caminho para o binário php. Por exemplo,
/usr/bin/php
Se você não o conhece, localize-o usando:
which php
fonte
/var/log/httpd/error*
.Você geralmente quer especificar caminhos completos para aplicações tais como
whoami
,ls
, ephp
. Se você não tiver certeza da localização de um programa (caminho completo), poderá descobrir o seguinte:Em seguida, especifique-o assim no seu script.
fonte
echo shell_exec("/usr/bin/php somefile.php 2>&1")
:?hu
. Então, você precisa se certificar de que o scriptphp
está tentando executar é definido como este:chmod 755 somescript.php
. Isso permitirá que o usuário em que o Apache esteja executando seja capaz de executar e ler seu.php
arquivo.Seu php.ini restringe o conjunto de comandos disponíveis?
Isto é do meu
/etc/php5/php.ini
fonte
Como depurar problemas do shell_exec
OK, aqui temos um problema: alguma coisa funciona no terminal e não funciona no shell_exec do php (ou exec, spawn, qualquer que seja). Vamos pensar: qual é a diferença entre você e php? Aqui estão três:
PHP é executado a partir de regras do servidor HTTP
De fato, seu terminal está sendo executado pelo
yourname
usuário e o php é executado a partirwww-data
. Portanto, a primeira idéia é abrir o terminal dowww-data
usuário e tentar o mesmo comando. Então..../etc/passwd
arquivo, encontre a linha com owww-data
usuário e altere seu shell de login (o último) de/bin/false
(ou o que for) para/bin/bash
.www-data
Terminal da Open :su www-data
/etc/passwd
arquivo enquanto estiver prontoO PHP é executado a partir do PHP .
O PHP é paranóico e há muitas opções na configuração do apache / nginx e php.ini que podem interromper sua tentativa.
Isso é um pouco mais complicado para depurar. Existem duas opções aqui:
Ative os logs no navegador e veja o problema. Edite seu
php.ini
, ativedisplay_errors
e todos os outros sinalizadores para ver erros no navegador. Eles Você pode lê-los e depurá-los.Obtenha
www-data
o shell (veja a primeira seção) e execute algo comoecho '<?php shell_exec("php -v"); ?>' | php
que executará o mesmo código php no console e você poderá ver erros e depuração.
PHP é executado a partir do SELinux / apparmor
Selinux e apparmor são itens de segurança que proíbem aplicativos de executar ações específicas (por exemplo, gerando outros aplicativos ou alguns outros aplicativos específicos). Talvez esteja ativado no seu servidor.
Para verificar - desative o selinux / apparmor e verifique se existe algum problema.
Para corrigir - leia o manual apropriado e corrija as regras permissivas de gravação para o seu caso.
fonte
Para mim, a maneira mais simples era entrar no php.ini e comentar a linha que começa com
fonte