Ich betreibe den Webserver lighttpd auf Raspbian (Debian-basiert) auf einem Raspberry Pi. Der Server läuft als Benutzer www-data (überprüft mit ps aux
). Ich habe die folgende Zeile zu hinzugefügt /etc/sudoers
:
www-data ALL=NOPASSWD:/opt/vc/bin/vcgencmd
um das Tool vom Raspberry Pi aus ausführen zu können, vcgencmd
das Statusinformationen aus einer PHP-Datei mit
<? echo shell_exec('vcgencmd version'); ?>
Es wird lediglich „VCHI-Initialisierung fehlgeschlagen“ ausgegeben (anstelle der angeblichen Versionsinformationen, die angezeigt werden, wenn ich es für meinen Benutzer ausführe, auch ohne sudo
), was erscheint, wenn vcgencmd mit falschen Berechtigungen ausgeführt wird.
Laufen zum Beispiel
<? echo shell_exec('cat /sys/class/thermal/thermal_zone*/temp'); ?>
funktioniert ohne /etc/sudoers
Änderungen einwandfrei, es gibt also kein Problem mit PHP (wie verboten shell_exec
oder so).
Was muss noch eingestellt werden, um einen Befehl auszuführen?
Antwort1
Wenn Sie etwas verwenden möchten, das Sie hinzugefügt haben /etc/sudoers
, müssen Sie aufrufen sudo
.
sudo
ist einfach ein Programm mit gesetztem Setuid-Bit. Es hat absolut nichts Besonderes an sich, d. h. es mischt sich nicht bei jedem Programmstart ein.
Sie können den Aufruf ausführen, cat /sys/class/thermal/thermal_zone*/temp
weil Sie Lesezugriff auf diese Dateien haben. Je nachdem, wie Ihre Dateisystemberechtigungen eingestellt sind, haben Sie möglicherweise Lesezugriff, aber nicht unbedingt Schreibzugriff.
Der Grund vcgencmd version
könnte darin bestehen, dass es beim Start als Ihr eigener Benutzer zwei mögliche Erklärungen gibt:
- Du hast
alias vcgencmd='sudo vcgencmd
in deinem Profil, somit läufst du automatisch aussudo
. - Sie verfügen über ausreichende Berechtigungen für die Dateien, die
vcgencmd
für den Betrieb erforderlich sind. Wenn Sie Schreibzugriff benötigen und die Dateien einer Gruppe gehören, deren Mitglied Sie sind, und Sie Schreibzugriff für diese Gruppe haben, benötigen Sie sudo nicht.
Zusammenfassend ändern Sie entweder Ihren Befehl in sudo vcgencmd version
. Oder finden Sie heraus, welche Dateiberechtigungen Sie ändern müssen, und ändern Sie sie.