2014-10-31 13 views
15

Mam sesję TMUX z serwerem Minecraft i tworzę interfejs WWW dla serwera.Nie można wysyłać poleceń do sesji TMUX z PHP

Obecnie mam następujące dokumenty:

command.sh

#!/bin/bash 
tmux send-keys -t minecraft C-z "[email protected]" Enter 

index.php

<?PHP 
    if($_POST) { 
     $commandString = $_POST['inputCommand']; 
     $output = shell_exec('./command.sh $commandString'); 
     echo "<pre>$output</pre>"; 
     } 
?> 
    <form method="post"> 
     <input type="text" name="inputCommand" placeholder="Type Command"/> 
     <input type="submit" value="Execute" /> 
    </form> 

command.sh działa w terminalu, że mogę używaj wszystkich standardowych poleceń w taki sposób, jak

./command.sh "/help" 

Jednak nie mogę wykonać skryptu ze strony php przy użyciu powyższej metodologii. Dodałem zarówno dane i www-www-użytkownikowi sudoers i próbował

shell_exec('sudo ./command.sh $commandString')

Ale to nie działa albo.

Po kliknięciu przycisku wysyłania dane wyjściowe są wyświetlane, ale są puste.

Czy ktoś może pomóc w wskazaniu, gdzie moja metodologia wykonywania skryptu poszła nie tak?


EDIT Zrobiłem dwa zrzuty ekranu, jeden przed i jeden po, aby dokładniej wyjaśnić.

enter image description here

+2

Co się dzieje? Czy pojawia się błąd? Co otrzymujesz jako wynik? Jakie polecenia próbujesz, które zawiodły? Czy zdajesz sobie sprawę, że jest to * luka * luka bezpieczeństwa? –

+0

Brak błędu, dane wyjściowe są puste, polecenia są powyżej. To dosłownie nic nie zwraca i polecenie nie jest wykonywane. To dlatego jestem tak zaintrygowany i opublikowany tutaj Tak Rozumiem implikacje bezpieczeństwa, to jest za 2 oddzielnymi ekranami logowania. –

+0

@EtanReisner, patrz powyżej, opublikowałem zrzut ekranu, aby wyjaśnić –

Odpowiedz

9

command.sh ma problem i wyprowadzania coś do stderr. shell_exec powraca tylko do ciebie, więc nie widzisz błędu. Spróbuj dołączanie „2> & 1” na końcu polecenia, jak

$output = shell_exec('./command.sh $commandString 2>&1'); 

Ten wyśle ​​stderr do stdout i pozwala zobaczyć co się dzieje. Usuń "2> & 1" po debugowaniu problemu. Jak wskazano w komentarzach, wyobrażam sobie, że problem polega na tym, że używasz pojedynczych cudzysłowów, co oznacza, że ​​$ commandString interpretowane jest dosłownie. Spróbuj zamiast tego podwójnych cytatów!

Ostrzeżenie !!! To jest naprawdę niebezpieczne. Podajesz niesanitarny parametr uzyskany z POST do polecenia działającego jako użytkownik będący w sudoers. Niezależnie od dwóch ekranów logowania, należy odkażać dane wejściowe.

+8

W rzeczywistości, * tak jak zapisano *, jest to całkowicie bezpieczne - nie ma żadnej zmiennej substytucji. Wykonywane polecenie jest ciągłym ciągiem. I może dlatego zachowanie nie jest zgodne z oczekiwaniami. "Naprawienie" go oczywiście wprowadzi ostrzeganą lukę. –

+4

Użyłem powyższej sugestii przekierowania standardowego błędu do standardowego wyjścia, dowiedziałem się, że TMUX nie może znaleźć napisu, zmieniłem go na komendę su -c i zadziałało. Znalazłem również lepszy sposób około 10 minut po tym, jak zadziałało, że Minecraft ma wbudowaną funkcję Rcon i użyłem tego do komunikacji za pomocą formularzy php. W ten sposób żaden shell_exec i wszystko dużo bezpieczniejsze. –

+0

@MichaelBetterton Awesome Cieszę się, że mogłem pomóc i mam nadzieję, że twoje przyszłe doświadczenia na SO nie będą obejmować wielu wątków meta debatujących o tym, co jest w porządku :) – ErlVolton

Powiązane problemy