2014-10-31 12 views
15

Tôi có phiên TMUX đang chạy máy chủ Minecraft và tôi đang tạo giao diện web cho máy chủ.Không gửi lệnh đến phiên TMUX từ PHP

Hiện nay tôi có các tài liệu sau:

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 làm việc tại một nhà ga ở chỗ tôi có thể sử dụng tất cả các lệnh tiêu chuẩn theo cách

./command.sh "/help" 

Tuy nhiên, tôi không thể thực thi tập lệnh này từ php bằng phương pháp trên. Tôi đã thêm cả www-data và www dùng để sudoers và cố gắng

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

Nhưng điều đó đã không làm việc một trong hai.

Khi nhấn nút gửi, đầu ra được lặp lại nhưng nó được để trống.

Ai đó có thể vui lòng trợ giúp trong việc chỉ ra nơi phương pháp của tôi để thực thi tập lệnh đã đi sai?


CHỈNH SỬA Tôi đã chụp hai ảnh chụp màn hình, một ảnh chụp màn hình trước và một ảnh sau để làm rõ thêm.

enter image description here

+2

Điều gì đang xảy ra? bạn đang nhận được một lỗi? Bạn đang nhận được sản phẩm như thế nào? Bạn đang thử những lệnh nào thất bại? Bạn có nhận ra đây là lỗ hổng bảo mật * gaping * không? –

+0

Không có lỗi, đầu ra trống, các lệnh ở trên. Điều này nghĩa đen không trả về gì và lệnh không được thực hiện. Đó là lý do tại sao im rất bối rối và được đăng ở đây Có, tôi hiểu ý nghĩa bảo mật, đây là đằng sau 2 màn hình đăng nhập riêng biệt. –

+0

@EtanReisner vui lòng xem ở trên, tôi đã đăng ảnh chụp màn hình để làm rõ –

Trả lời

9

command.sh đang gặp một vấn đề và xuất cái gì đó để thiết bị lỗi chuẩn. shell_exec chỉ trả về giá trị của bạn, vì vậy bạn không thấy lỗi. Hãy thử phụ thêm "2> & 1" đến hết lệnh của bạn, giống như

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

này sẽ gửi stderr để stdout và cho phép bạn xem những gì đang xảy ra. Xóa "2> & 1" khi bạn đã gỡ rối vấn đề. Như đã chỉ ra trong các ý kiến, tôi tưởng tượng vấn đề thực tế là bạn đang sử dụng dấu nháy đơn, có nghĩa là $ commandString đang được hiểu theo nghĩa đen. Hãy thử dấu ngoặc kép thay thế!

Cảnh báo !!! Điều này thực sự không an toàn. Bạn đang chuyển một tham số không được thu thập được từ POST tới một lệnh đang chạy với tư cách người dùng đang ở trong sudoers. Bất kể hai màn hình đăng nhập, bạn nên khử trùng đầu vào của mình.

+8

Thực ra, * như được viết *, điều này là hoàn toàn an toàn - không có thay thế biến nào xảy ra. Lệnh được thực hiện là một chuỗi không đổi. Và đó có thể là lý do tại sao hành vi không như mong đợi. "Sửa chữa" nó, tất nhiên, sẽ giới thiệu các lỗ hổng thận trọng. –

+4

Tôi đã sử dụng đề xuất trên của bạn về chuyển hướng lỗi tiêu chuẩn thành tiêu chuẩn, tôi phát hiện ra rằng TMUX không thể tìm thấy chuỗi, tôi đã thay đổi nó thành lệnh su -c và nó hoạt động. Tôi cũng tìm thấy một cách tốt hơn khoảng 10 phút sau khi làm việc trong minecraft đó đã được xây dựng trong Rcon chức năng và tôi sử dụng để giao tiếp thông qua các hình thức bài viết php. Vì vậy, không có shell_exec và tất cả an toàn hơn rất nhiều. –

+0

@MichaelBetterton Tuyệt vời Tôi rất vui vì tôi có thể giúp và hy vọng những trải nghiệm tương lai của bạn trên SO không liên quan đến nhiều chủ đề meta tranh luận về những gì OK :) – ErlVolton

Các vấn đề liên quan