2016-04-27 11 views
0

Ich versuche, einen Befehl aus einer Javascript-Datei über XMLHttpRequest auszuführen.apache2 & PHP: führe einen Befehl von shell_exec aus

Sobald ich die Taste (etwas, das ich ohne Probleme tun kann) erstellt, die Funktion aus dem Javascript-Code ist:

function RestartService(service) 
{ 
    var target = document.getElementById('page'); 
    var spinner = new Spinner(opts).spin(target); 

    var data = new FormData(); 
    data.append('service', service); 

    var xhReq = new XMLHttpRequest(); 
    xhReq.open("POST", "/rservice.php", false); 
    xhReq.send(data); 
    var serverResponse = xhReq.responseText; 

    timeout = setTimeout(
     function() 
     { 
      spinner.stop(); 
     }, 1500); 

    return serverResponse; 
} 

während die PHP-Datei-I-Tests sind gerade:

<?php 
//error_reporting(E_ALL); 
$fname = "/usr/local/bin/AD33x-" 
if(isset($_POST)) 
{ 
    $service = $_POST["service"]; 
    $daemon = "$fname"."$service".".sh"; 

    //if(file_exists($daemon)) 
    { 
     shell_exec("$daemon restart > /dev/null 2> /dev/null &"); 
    } 
} 

return "ok" 
?> 

Die Funktion RestartService wird ausgeführt, weil ich die Drehung für 1,5 s sehen kann. Das Problem besteht darin, den Befehl aus der PHP-Datei auszuführen. Ich denke, das ist eine Frage der apache2 Konfiguration oder Dateiberechtigungen, denn wenn ich ausführen, von Linux-Shell, der Befehl:

php -r "echo exec('/usr/local/bin/AD33x-file.sh restart');"

Die Datei korrekt ausgeführt wird ..

Die Dateiberechtigungen in /usr/local/bin Pfad wird auf festgelegt. ich auch geprüft für 'disable_functions' -Tag in der php.ini-Dateien aus /etc/php

apache2/php.ini:315:disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, 
cli/php.ini:315:disable_functions = 

aber ich sehe keine 'shell_exec' dort ...

Eigentlich dies ist meine /etc/apache2/apache2.conf-Datei (mit Kommentaren und weißen Linien entfernt):

Mutex file:${APACHE_LOCK_DIR} default 
PidFile ${APACHE_PID_FILE} 
Timeout 300 
KeepAlive On 
MaxKeepAliveRequests 100 
KeepAliveTimeout 5 
User ${APACHE_RUN_USER} 
Group ${APACHE_RUN_GROUP} 
HostnameLookups Off 
ErrorLog ${APACHE_LOG_DIR}/error.log 
LogLevel warn 
IncludeOptional mods-enabled/*.load 
IncludeOptional mods-enabled/*.conf 
Include ports.conf 
<Directory /> 
    Options FollowSymLinks 
    AllowOverride None 
    Require all denied 
</Directory> 
<Directory /usr/share> 
    AllowOverride None 
    Require all granted 
</Directory> 
<Directory /var/www/html> 
     Options Indexes FollowSymLinks MultiViews 
     AuthType Basic 
     AuthUserFile "/var/www/html/current/.htpasswd" 
     AuthName "Authorization Required" 
     Require valid-user 
     Order allow,deny 
     Allow from all 
</Directory> 

AccessFileName "/var/www/html/current/.htaccess" 

<FilesMatch "^\.ht"> 
    Require all denied 
</FilesMatch> 

LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined 
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined 
LogFormat "%h %l %u %t \"%r\" %>s %O" common 
LogFormat "%{Referer}i -> %U" referer 
LogFormat "%{User-agent}i" agent 

IncludeOptional conf-enabled/*.conf 
IncludeOptional sites-enabled/*.conf 

Vielleicht gibt einige Details, die ich bin fehlt? Was ist der richtige Weg, um Befehle aus PHP und Apache2 auszuführen?

+0

ich Sie Berechtigungen nicht denken, haben einen Dienst mit dem laufenden Apache-Benutzer zu aktivieren/deaktivieren. –

+0

Wenn Sie den Apache-Benutzer ändern, können Sicherheitsprobleme auftreten. Überprüfen Sie meine Antwort, es kann Ihnen helfen. –

Antwort

0

Ich glaube nicht, dass Sie Berechtigungen zum Aktivieren/Deaktivieren eines Dienstes mit dem laufenden Apache-Benutzer haben.

Möglicherweise möchten Sie ssh2_exec verwenden, um dies zu tun, d.h .:

$connection = ssh2_connect('your.server.com', 22); 
ssh2_auth_password($connection, 'root', 'password'); 
$stream = ssh2_exec($connection, 'command here'); 
+0

Nichts ändert sich .. Es funktioniert immer noch nicht. –

Verwandte Themen