Rechteproblem: cronjob ruft PHP auf, welche per exec und sudo einen Shell-Command ausführen soll
Hallo zusammen,
ich sitze seit geraumer Zeit mit einem RaspberryPI der neuen Generation an einem Hausautomation-Projekt. In der aktuellen Stufe dreht sich alles um die Ansteuerung von Funksteckdosen mittels 433MHz-Sender. Klappt auch alles wunderbar.
Als Mensch-Maschine-Schnittstelle viel die Wahl auf ein Webinterface. Außerdem soll ein Teil der Logik per PHP abgehandelt werden. Ich kann etwas PHP programmieren, daran sollte es also nicht scheitern. Im Laufe des Prozesses bin ich jedoch auf folgendes Problem gestoßen, für das ich keine Lösung finde:
Rufe ich das PHP-Script mit dem Browser auf, so funktioniert diese tadellos. Auch der exec-Befehl mit eingebautem sudo:
Jetzt soll jedoch genau diese Datei per Cronjob jede Minute aufgerufen werden. Also habe ich im Crontab des roots folgende Zeile eingefügt:
Soweit so gut. Das Script wird ausgeführt, die Datenbank ändert sich, alles so wie's sein soll. Außer, dass genau die oben gezeigte Zeile keine Wirkung mehr zeigt, die Steckdose bleibt aus. Ich habe auch den Benutzer www-data bereits in die sudoers eingetragen, ohne Erfolg.
Nach einigen Spielereien und Tests viel mir auf, dass der Cronjob (auch wenn's der von root ist!!) nicht einmal eine einfache fopen-Anweisung in PHP ausführt.
So, nach dem vielen Blabla jetzt die verzweifelte Frage an euch:
Gibt es eine Möglichkeit, dem Cronjob explizit den User root zuzuweisen oder zumindest einen mit gleichen Rechten? Mache ich denn grundsätzlich etwas falsch der habe etwas vergessen?
Anmerkung:
Ich weiß, dass der gezeigte Code sicherlich kein Schönheitspreis gewinnt oder die ganze Anwendung als besonders sicher gilt. Ich würde mir wünschen, diese Diskussionen außen vor zu lassen. Über die Sicherheit der (nur im lokalen Netz genutzten) Anwendung habe ich mir bereits Gedanken gemacht. Diese sind jedoch nicht bestandteil dieses Posts. Danke!
Viele Grüße!
ich sitze seit geraumer Zeit mit einem RaspberryPI der neuen Generation an einem Hausautomation-Projekt. In der aktuellen Stufe dreht sich alles um die Ansteuerung von Funksteckdosen mittels 433MHz-Sender. Klappt auch alles wunderbar.
Als Mensch-Maschine-Schnittstelle viel die Wahl auf ein Webinterface. Außerdem soll ein Teil der Logik per PHP abgehandelt werden. Ich kann etwas PHP programmieren, daran sollte es also nicht scheitern. Im Laufe des Prozesses bin ich jedoch auf folgendes Problem gestoßen, für das ich keine Lösung finde:
Rufe ich das PHP-Script mit dem Browser auf, so funktioniert diese tadellos. Auch der exec-Befehl mit eingebautem sudo:
<?php
exec("sudo ./send ".$SD->s_gcode." ".$SD->s_nr." 1",$out,$return);
?>
Jetzt soll jedoch genau diese Datei per Cronjob jede Minute aufgerufen werden. Also habe ich im Crontab des roots folgende Zeile eingefügt:
* * * * * sudo php /var/www/cron.php
Soweit so gut. Das Script wird ausgeführt, die Datenbank ändert sich, alles so wie's sein soll. Außer, dass genau die oben gezeigte Zeile keine Wirkung mehr zeigt, die Steckdose bleibt aus. Ich habe auch den Benutzer www-data bereits in die sudoers eingetragen, ohne Erfolg.
Nach einigen Spielereien und Tests viel mir auf, dass der Cronjob (auch wenn's der von root ist!!) nicht einmal eine einfache fopen-Anweisung in PHP ausführt.
So, nach dem vielen Blabla jetzt die verzweifelte Frage an euch:
Gibt es eine Möglichkeit, dem Cronjob explizit den User root zuzuweisen oder zumindest einen mit gleichen Rechten? Mache ich denn grundsätzlich etwas falsch der habe etwas vergessen?
Anmerkung:
Ich weiß, dass der gezeigte Code sicherlich kein Schönheitspreis gewinnt oder die ganze Anwendung als besonders sicher gilt. Ich würde mir wünschen, diese Diskussionen außen vor zu lassen. Über die Sicherheit der (nur im lokalen Netz genutzten) Anwendung habe ich mir bereits Gedanken gemacht. Diese sind jedoch nicht bestandteil dieses Posts. Danke!
Viele Grüße!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 265686
Url: https://administrator.de/contentid/265686
Ausgedruckt am: 14.11.2024 um 07:11 Uhr
4 Kommentare
Neuester Kommentar
Moin,
ruf die Seite mal mit curl oder lynx in der crontab ab...
Und du solltest in der Cron am besten auch immer absolute Pfade zu den executables verwenden: /usr/local/bin/php
http://www.thegeekstuff.com/2011/07/php-cron-job/
Gruß jodel32
ruf die Seite mal mit curl oder lynx in der crontab ab...
Und du solltest in der Cron am besten auch immer absolute Pfade zu den executables verwenden: /usr/local/bin/php
http://www.thegeekstuff.com/2011/07/php-cron-job/
Gruß jodel32
Moin,
also grundsätzlich solltest du mit absoluten Pfaden arbeiten, anstatt mit "./"
Dann kannst du dir auch die "sudo"s in dem Crontab eintrag und dem PHP Skript sparen.
Schonmal ins syslog geguckt, ob der job irgendwelche Fehler schmeisst?
lg,
Slainte
also grundsätzlich solltest du mit absoluten Pfaden arbeiten, anstatt mit "./"
Gibt es eine Möglichkeit, dem Cronjob explizit den User root zuzuweisen
in der Datei "/etc/contab" kannst du den User explizit mitgeben.Dann kannst du dir auch die "sudo"s in dem Crontab eintrag und dem PHP Skript sparen.
Schonmal ins syslog geguckt, ob der job irgendwelche Fehler schmeisst?
lg,
Slainte