Permissões ausentes para ecoar algo via shell_exec ()

0

Eu quero usar a função PHP shell_exec() para enviar algo para um socket local.

Minha abordagem atual é assim:

sudo -s echo "foobar" > /dev/tcp/192.168.178.41/8080

Quando executo este comando na linha de comando, tudo funciona perfeitamente . No entanto, quando tento executar isso em um script PHP, nada acontece .

Não há nem mesmo um erro em /var/log/httpd/apache24-error_log . (Sim, esse é o caminho certo.)

Estou usando um Synology Diskstation com seu sistema operacional Linux.

Minha investigação:

  • eu corri echo exec("whoami"); . Ele retornou http . Aparentemente, o usuário do apache é chamado http .
  • Eu modifiquei o arquivo /etc/sudoers , para conceder ao usuário todas as permissões necessárias. Minha distro linux não tem visudo , então eu tive que editá-lo manualmente. Agora parece com isso:

    # Enable logging of a command's output.
    # Use sudoreplay to play back logged sessions.
    Defaults syslog=authpriv
    
    # Allow root to execute any command
    root ALL=(ALL) ALL
    
    # Allow members of group administrators to execute any command
    %administrators ALL=(ALL) ALL
    
    # Configure privilege of wheel group
    Cmnd_Alias SHELL = /bin/ash, /bin/sh, /bin/bash
    Cmnd_Alias SU = /usr/bin/su
    %wheel ALL=(ALL) NOPASSWD: ALL, !SHELL, !SU
    
    http ALL=NOPASSWD: /bin/sudo, /bin/echo, /usr/bin/sudo, /usr/bin/echo
    

Como posso executar este comando com sucesso usando PHP? Obrigado antecipadamente!

    
por dv02 18.10.2017 / 21:09

1 resposta

0

Eu fiz uma experiência e shell_exec() está usando sh , como @thrig suspeitou em seu comentário acima. Na sua Synology Diskstation, /bin/sh pode não ser realizado usando bash (ou algo que suporte /dev/tcp/... ).

Uma variação disso parece funcionar para mim:

shell_exec("bash -c 'echo foobar > /dev/tcp/192.168.178.41/8080'")
    
por 18.10.2017 / 22:37