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?
ich Sie Berechtigungen nicht denken, haben einen Dienst mit dem laufenden Apache-Benutzer zu aktivieren/deaktivieren. –
Wenn Sie den Apache-Benutzer ändern, können Sicherheitsprobleme auftreten. Überprüfen Sie meine Antwort, es kann Ihnen helfen. –