Hallo.
Ich entwickle mir gerade ein eigenes Interface, dass eigene Konfigurationen auf einem Asterisk durchführt.
Dazu muss der Asterisk über die selbst geschriebene Weboberfläche neu gestartet werden. Und dazu braucht man root-Rechte.
Auf folgendem Weg habe ich probiert, das Problem zu lösen:
1. Skript wird über Weboberfläche aufgerufen. Dieses startet dann das eigentliche Skript:
1 2 3 4 5 6 7 8 9 10 11 | <?php require_once 'config.php'; $cmd = "sudo php5 ".basedir."sipconfEinrichten.php"; $result = shell_exec("$cmd"); if($result == false){ echo "FEHLER BEI AUSFÜHRUNG!"; }else{ echo $result; } |
2. Das eigentliche Skript:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <?php require_once 'config.php'; $sip = "; hier etwas Inhalt für die sip.conf... "; $result = $mysqli->query("SELECT nummer FROM telefone"); while($row = $result->fetch_object()){ $sip = $sip . "[".$row->nummer."] permit=192.168.1.0/255.255.255.0 type=friend context=phones host=dynamic secret=PASSWORT "; } $result->close(); //sip.conf schreiben file_put_contents("/etc/asterisk/sip.conf", $sip); //asterisk: sip reload $cmd = "asterisk -rx \"sip reload\""; system("$cmd"); |
Damit der sudo-Aufruf möglich ist, habe ich die sudoers mit visudo bearbeitet und dabei folgende Zeile eingefügt:
www-data ALL=NOPASSWD: /var/www/html/telefonanlage/sipconfEinrichten.php
Wenn ich jetzt die 1. Datei über die Weboberfläche aufrufe, erhalte ich "FEHLER BEI DER AUSFÜHRUNG". Wenn ich ein anderes Skript ohne root-Rechte und ohne sudo aufrufe, funktioniert es.
Das Problem ist also der sudo-Aufruf.
Was muss ich noch machen, damit der Aufruf funktioniert?
Der Sicherheitsrisiken der root-Rechte bin ich mir bewusst. Der Zugriff auf die Weboberfläche und generell auf das Netzwerk über das die Oberfläche erreichbar ist, ist sehr abgeschottet.