Estou tentando executar um script .sh do PHP, no entanto, ele não está sendo executado.
Verifiquei os logs de erro e estou recebendo o erro 'sh: Permissão negada'. Eu verifiquei sob qual usuário php está sendo executado, e é feito sob o usuário apache.
Tentei alterar a propriedade do .sh para o usuário apache, mas não há resultado.
No começo, pensei que isso acontecia porque o script estava fora do www / dir, no entanto, mesmo quando eu coloquei o script no mesmo diretório, o erro ainda está sendo dado.
Existe alguma solução para isso além de adicionar o usuário apache à lista de SUDOers?
O script sh funciona bem se eu iniciá-lo a partir da massa usando o comando 'php filename.php'.
bash
permissions
script
php
Robin Presto
fonte
fonte
x
) no arquivo? Você especificou o interpretador de script em uma linha shebang?chmod 775 yourscript.sh
. Isso concederár-x
(ler e executar) permissões para "Outros" usuários nesse arquivo.Respostas:
Tente as seguintes sugestões:
php -r "echo exec('whoami');"
r-x
permissões de sinalizador:chmod 755 dir; chmod 755 file
+s
sinalizador (sudo) ao arquivo (não recomendado):chmod u+s file
,safe_mode
.include_path
, por exemplo:php.ini
Arquivo:include_path ".:/usr/local/lib/php:/your/dir"
.htaccess
arquivo:php_value include_path ".:/usr/local/lib/php:/your/dir"
/bin/sh
) para o usuário do Apache (por exemplo, verifique comfinger
:).php.ini
não usa:disable_functions
forexec
functionselinux-utils
instalado (um sistema Linux com segurança aprimorada), verifiquegetenforce
/setenforce
configure conforme descrito na resposta do @Tonin .Solução de problemas:
php.ini
ouhttpd.conf
, não se esqueça de reiniciar o servidor web,php.ini
todos os tipos de erros (display_error
,error_reporting
, etc.).fonte
Esse problema pode depender do sistema operacional usado e de como está configurado. Algumas distribuições linux (principalmente aquelas baseadas em RHEL como CentOS ou Fedora) vêm com o SELinux ativado por padrão. Isso pode ser verificado e alterado temporariamente, com os seguintes comandos:
Você também pode ter uma visão mais completa da configuração atual com:
Essa alteração pode ser permanente, editando o
/etc/selinux/config
arquivo e defina aSELINUX
variável comopermissive
oudisabled
.Mas, a maneira correta de resolver esse tipo de problema , se você realmente estiver nessa situação, é verificar o
/var/log/audit/audit.log
arquivo de log. Ele conterá todos os eventos relacionados às regras do SELinux. Você provavelmente deverá fornecer ao seu script o contexto correto, ou seja, estar autorizado a ser executado pelo usuário apache / php. A verificação do contexto de segurança do SELinux é feita comls -Z
:Esta lista o usuário, a função e o tipo de cada arquivo / diretório. Aqui, o
httpd_sys_script_exec_t
tipo dá aos arquivos no diretório cgi a permissão para serem executados pelo httpd. Seu script de shell provavelmente deve ter o mesmo tipo.Você também pode alimentar as
audit.log
linhas para oaudit2allow
comando. Ele fornecerá as alterações necessárias para tornar o SELinux feliz. Mas geralmente as alterações sugeridas precisam ser feitas na própria política do SELinux, que não é o que você deve fazer no seu caso (ainda assim, essa saída pode dar uma pista do que está acontecendo).A página a seguir descreve um problema semelhante e diferentes maneiras de resolvê-lo: http://sheltren.com/stop-disabling-selinux
fonte
Então cheguei aqui depois de procurar um problema semelhante no Google. Pensei em deixar claro que o comentário sobre o SELinux me apontava na direção certa.
No meu próprio caso, eu estava usando um script de implementação personalizado do Git que usa um comando shell. O comando funciona bem no BASH, mas depois tem "permissão negada" e "não é um repositório" no Git. Isso foi realmente estranho e eu passei por várias correções até encontrar essa resposta.
root@ls:~# /usr/sbin/setenforce Permissive
resolveu o problema para mim.fonte
Minha situação é um pouco diferente, mas o Google me trouxe aqui, então pensei em compartilhar ...
Meu servidor está executando o debian stable e tentando executar um script de shell funcionou uma vez; as permissões foram alteradas automaticamente para 644 e a próxima tentativa de executar o script foi obtida
Permission denied
. Acabou sendo um problema no servidor samba para mim e eu não percebi o padrão até agora.A permissão QA Strange muda ao salvar o arquivo em uma partição Samba de um editor do Windows, foi a correção. Eu não sabia da
map archive = no
opção mesmo depois de usar os compartilhamentos de samba por uma década.Algo sobre o uso do Notepad ++ em uma área de trabalho do Windows alteraria as permissões dos arquivos de destino para 675 em vez de 775, conforme o umask estiver configurado.
fonte
Executando comandos raiz no PHP via Apache
Eu tenho um aplicativo da web que precisa executar comandos de shell como raiz dentro de uma função PHP, e você pensaria que isso seria bastante simples… mas foram necessários alguns estudos para obter todos os detalhes, então aqui estão minhas anotações úteis sobre isto. Este é um sistema Linux executando o Apache, e usaremos “sudo” dentro de “shell_exec” para executar os comandos.
O principal é editar o arquivo / etc / sudoers e, normalmente, você pode (como root) usar o comando "visudo" para fazer isso.
Certifique-se de que o apache possa executar comandos, E não exija uma senha:
Então você precisa comentar esta linha:
Caso contrário, você verá estes erros em / var / log / secure: "desculpe, você deve ter um tty para executar o sudo". Agora você está pronto para começar, e o código PHP é simples:
$ resultados = shell_exec ('sudo date');
fonte