spackenbremse
Goto Top

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:

<?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!

Content-Key: 265686

Url: https://administrator.de/contentid/265686

Printed on: April 19, 2024 at 12:04 o'clock

Mitglied: 114757
Solution 114757 Mar 09, 2015, updated at Mar 10, 2015 at 12:59:45 (UTC)
Goto Top
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
Member: SlainteMhath
SlainteMhath Mar 09, 2015 at 10:15:08 (UTC)
Goto Top
Moin,

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
Member: SlainteMhath
SlainteMhath Mar 09, 2015 at 10:16:28 (UTC)
Goto Top
@114757
ruf die Seite mal mit curl oder lynx in der crontab ab
dann läuft das skript aber mit dem www-user und nicht als root, deswegen ja der cron-job face-smile
Member: Spackenbremse
Spackenbremse Mar 10, 2015 at 13:01:33 (UTC)
Goto Top
Hallo,

nach langem hin und her habe ich mich dann doch für den (meiner Meinung nach) Workaround mittels lynx entschieden. Die Kombination aus crontab des roots und dem sudo innerhalb der PHP-Datei funktioniert einwandfrei.

Herzlichen Dank für die Hilfe!