jens4ever
Goto Top

Bash-Skript von User www-data als root laufen lassen

Hallo zusammen,

kann mir jemand dabei helfen, den User www-data zu berechtigen ein Bashskript auszuführen, das im /var/www/ liegt?
Das Skript benötigt sudo.

Ich möchte eher nicht www-data berechtigen überall sudo zu sein, sondern eher, dass www-data nur das EINE Skript also /var/www/skript ausführen darf.

Kann jemand so nett sein und mir dabei helfen??

Danke für eure Unterstützung und schöne *Tage.

Jensen

Content-ID: 268401

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

Ausgedruckt am: 22.11.2024 um 16:11 Uhr

114757
114757 04.04.2015, aktualisiert am 05.04.2015 um 19:51:21 Uhr
Goto Top
Erst gestern:
Linux-Shell via PHP-Datei ausführen

Doku lesen, dann wäre die Frage obsolet gewesen:
http://www.cyberciti.biz/tips/allow-a-normal-user-to-run-commands-as-ro ...


Also nochmal zum nachlesen, Schritt für Schritt:

Den Befehl sudo visudo eingeben. Dann ganz unten eine weitere Zeile einfügen die so aussieht und das File dann speichern:
www-data ALL=NOPASSWD: /var/www/script
(Hier können in Pfad auch Wildcards genutzt werden um mehrere Scripte zu umfassen, z.B. /var/www/*.sh, um alle *.sh scripte zu erlauben)

Nun noch das Script /var/www/script für alle ausführbar machen, falls noch nicht geschehen:
chmod +x /var/www/script
Jetzt kannst du in deinem PHP-Script dein Script mit sudo aufrufen:
<?php
    shell_exec('sudo /var/www/script');  
?>
Feddich und läuft.

Eventuelle Fehler im Script werden hier vom Apache geloggt:
/var/log/apache2/error.log

Gruß jodel32
Bachti
Bachti 07.04.2015 um 10:28:25 Uhr
Goto Top
Darf ich ganz vorsichtig einwerfen, dass es nicht besonders sicher ist, ein unter /var/www liegendes Skript mit Administratorrechten auszuführen?
114757
114757 07.04.2015 aktualisiert um 11:24:47 Uhr
Goto Top
Zitat von @Bachti:

Darf ich ganz vorsichtig einwerfen, dass es nicht besonders sicher ist, ein unter /var/www liegendes Skript mit
Administratorrechten auszuführen?
Sicher, das ist natürlich klar ... meiner einer würde das Verzeichnis für die Scripte sowieso nicht in den öffentlichen html-Ordner legen sondern außerhalb des öffentlichen, oder zumindest den Zugriff via *.htaccess verbieten !
Jens4ever
Jens4ever 12.04.2015 um 13:06:49 Uhr
Goto Top
Moin jodel32,

danke für deine Hilfe und die genauen Anweisungen(, die ich leider brauche).
Ich habe den PI einmal zurückgeimaget, damit alles wieder sauber ist.

Folgende Situation:

1. sudo visudo
Zeile hinzugefügt und rebootet
www-data ALL=NOPASSWD: /home/pi/test

2. unter /var/www/ liegt test.php, (http://raspberry/test.php) die beinhaltet
<?php
shell_exec('sudo /home/pi/test');  
header("Location:index.html");  
?>

3. Das Bash-Skript test beinhaltet:
cd /home/pi/
cp live.jpg live2.jpg

Es sollte also nun das Bild live.jpg kopiert werden auf live2.jpg im pi Home Folder. Das passiert aber nicht.

Ich habe zum Testen über Webmin einen cronjob erstellt und manuell ausgeführt (als www-data, der ja nun die Berechtigungen haben sollte)

Output from command /home/pi/test ..
cp: cannot create regular file `live2.jpg': Permission denied

Immerhin taucht ja live2.jpg schon mal auf ;)
Wo kann es nun noch haken??

Danke und einen schönen Sonntag.
Jensen
114757
Lösung 114757 12.04.2015 aktualisiert um 14:22:12 Uhr
Goto Top
Wo kann es nun noch haken??
User www-data hat keine Schreibrechte im Ziel-Ordner /home/pi ?!!
Wie gesagt das obige wurde hier einwandfrei getestet. Deine Berechtigungen im Dateisystem stimmen einfach zu 99% nicht.... sagen ja schon die Fehlermeldungen.
Also entweder in dem Verzeichnis jedem Schreib- und Ausführrechte geben oder www-data zu einer Gruppe hinzufügen und diese dem Verzeichnis des Scripts zuweisen.

Auch wenn www-data das Script mit erhöhten Rechten ausführt, braucht er immer noch passende Rechte in den jeweiligen Verzeichnissen in denen hantiert wird.

Sollen wir dir hier jetzt die Rechte-Grundlagen unter Linux verklickern ??!
Jens4ever
Jens4ever 12.04.2015 aktualisiert um 14:18:30 Uhr
Goto Top
Hast recht. Ich habe gerade gegooglet und nachdem ich folgendes ausgeführt habe, funktioniert es endlich!!!

Danke!
sudo usermod -a -G www-data pi
sudo chgrp www-data /home/pi/www-data
sudo chmod g+rwxs /home/pi/www-data

Danke nochmal auch an alle anderen. Wieder was gelernt.

vg
Jensen