Das Hinzufügen von www-Daten zu /etc/sudoers funktioniert nicht, damit PHP shell_exec() einen Befehl ausführen kann

Das Hinzufügen von www-Daten zu /etc/sudoers funktioniert nicht, damit PHP shell_exec() einen Befehl ausführen kann

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, vcgencmddas 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_execoder 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.

sudoist 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*/tempweil 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 versionkönnte darin bestehen, dass es beim Start als Ihr eigener Benutzer zwei mögliche Erklärungen gibt:

  1. Du hast alias vcgencmd='sudo vcgencmdin deinem Profil, somit läufst du automatisch aus sudo.
  2. Sie verfügen über ausreichende Berechtigungen für die Dateien, die vcgencmdfü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.

verwandte Informationen