Debian: Mate uma sessão de tela através da web

1

Eu tenho o código php que é o seguinte (kill.php):

<?php echo exec("/home/duke/aa/scripts/test.sh");  ?>

test.sh é assim:

screen -S server -X quit

Se eu executar o código php no terminal php screen -S server -X quit , o script mata a sessão de tela.

No entanto, se eu apontar meu navegador para o link , ele exibe "Nenhuma sessão de tela encontrada" e ele não mata o sessão de tela. O que posso fazer para funcionar através do navegador da Web?

    
por dukevin 05.06.2011 / 00:14

2 respostas

1

A configuração padrão é executar todas as páginas PHP (e seus comandos gerados) como www-data usuário, o que significa que eles só têm acesso às sessões de propriedade de www-data .

Você precisa executar o script em sua própria conta de usuário, o que pode ser feito por:

  • usando sudo ; por exemplo, a seguinte entrada sudoers :

    www-data: ALL=(duke) NOPASSWD: /home/duke/aa/scripts/test.sh
    

    permitirá que você execute exec("sudo -u duke /home/duke/aa/scripts/test.sh");

  • ou instalando suPHP : o script PHP será executado sob a conta de seu proprietário.

Seu exemplo atual executa o script duas vezes , que pode ter vários efeitos colaterais. Livre-se da segunda chamada exec() - ou melhor ainda, use system() ou passthru() - se quiser exibir a saída do script.

    
por 05.06.2011 / 00:21
1

Acho que a causa é que você inicia a sessão de tela como outro usuário que não o usuário do servidor web (possivelmente www-data ), mas como o script será executado como usuário do servidor da web quando iniciado pelo navegador, não tem o direito de enviar comandos para a sessão de tela de outro usuário.

Como corrigir isso depende de como você originalmente iniciou a sessão de tela. Se for possível iniciá-lo como o usuário do servidor web, esta será a solução mais simples, mas outras opções podem incluir sudo ou medidas mais complicadas (*). Conte-nos mais sobre o que você está fazendo, para que possamos fazer sugestões úteis.

(*) Eu vi uma "solução" para este tipo de problema onde o script PHP escreveria um arquivo especial, que foi detectado por um cronjob que iniciou seu trabalho somente quando o arquivo estava presente ...

    
por 05.06.2011 / 00:34