Impressum Startseite Grund Installation Grundlagen Hilfreiches Projekte Querschläger Meckerecke

17.04.2017: Bash / Shell Scripte mit "root" rechten von PHP aus ausführen.

Ich habe VIELES ausprobiert um ein Bash Script mit vollen rechten von einer Weboberfläche aus starten zu können.

Die erste Idee war es dem Script einfach nur mittels "sudo chmod 0777 Pfad+Script" volle Rechte zu geben, was sich als "Ente" entpuppte, besonders wenn in dem Script Befehle verwendet werden für die man Root braucht.

Die nächste Idee war es einen System Cronjob mittels "sudo crontab -e" anzulegen, dort ein bash script zu starten, was jede Minute einen Ordner überwacht. Sollte in dem Ordner ein Script" liegen, würde das direkt auszuführt werden. Das Script würe ich per PHP erzeugen und dort in dem Ordner erzeugen. Da der Cronjob mit Root Rechten ausgeführt wird, würde auch das Script mit vollen Rechten ausgeführt werden. Das ganze hat sogar funktioniert, war aber auf die Ausführung 1x pro Minute beschränkt und doch arg kompliziert - so wurde das ganze wieder verworfen.

Dann kam die Idee : Der User Pi hat ja genug rechte, warum der User "www-data" nicht ? Ich gebe dem User "www-data" einfach die vollen Rechte, in dem ich mittels


sudo visudo

Und dieser Zeile dem User www-data gebe:

www-data ALL=(ALL) NOPASSWD: ALL

Wenn der Raspberry Pi nicht im Internet hängt, sollte das auch kein Problem sein, aber dieses mal sollte genau dieser RPi vom Netz aus erreichbar sein. Also musste es etwas abgesichert werden, denn so könnte der User www-data (also Apache/die Weboberfläche) alles aufrufen und ausführen - nicht so schön.

Also die Rechte lieber etwas dosiert vergeben:

sudo visudo

und unten dem User www-data nur die Rechte für das Shellscript oder Programm zu geben welches ausgeführt werden soll. In meinem fall das Programm "sshpass" welches mit vollem Pfad bei "/usr/bin/sshpass" liegt. Wer den Pfad nicht kennt, kann ihn mittels "which sshpass" anzeigen lassen.

www-data ALL=(ALL) NOPASSWD: /usr/bin/sshpass

Das war schon alles. Nach einem Neustart kann man per php Scripte mit höheren Rechten ausführen lassen.

Wer ein Shellscript stattdessen aufrufen lassen möchte, kann in dem Shellscript auch andere Befehle verwenden die auch höhere Rechte brauchen - die Rechte werden "vererbt".

Mal ein Beispiel:

Ein Apple Macbook unter 10.7 per php Script "Ausschalten":

Ausschalten.php

<?php
//IP des Rechners
$ip="192.168.0.15";

//Prüfen ob Rechner an ist
$online=shell_exec("ping -c 1 ".$ip." -w 1");
if (strpos($online,"100% packet loss")) {echo "Rechner ist bereits ausgeschaltet<br>";} else { echo "Rechner wird ausgeschaltet<br>";

//Abschaltbefehl per SSH Senden
$user="root"; //Root muss beim Rechner aktiviert sein, das muss man vorher am Macbook machen
$pass="passwort";//Passwort des Root Accounts - ist meist das gleiche wie des normalen Users
exec("sudo /usr/bin/sshpass -p ".$pass." ssh -o StrictHostKeyChecking=no ".$user."@".$ip." /sbin/shutdown -h now"); 
}

?>

Das sudo muss sein, da wir ja das Programm sshpass mit Superuserrechten starten wollen.Hätten wir mittels Visudo nicht diese Zeile eingefügt: www-data ALL=(ALL) NOPASSWD: /usr/bin/sshpass , hätten wir nicht genug Rechte für diese Aktion.

Bevor man das Script laufen lassen kann, muss man sich mit dem Raspberry Pi vorher einmal per SSH mit dem Macbook verbinden und der Root Account am Macbook sollte aktiviert sein, dann schaltet sich der Rechner innerhalb weniger Sekunden ab.

Impressum Startseite Grund Installation Grundlagen Hilfreiches Projekte Querschläger Meckerecke