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-Key: 268401

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

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

Mitglied: 114757
114757 Apr 04, 2015, updated at Apr 05, 2015 at 17:51:21 (UTC)
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
Member: Bachti
Bachti Apr 07, 2015 at 08:28:25 (UTC)
Goto Top
Darf ich ganz vorsichtig einwerfen, dass es nicht besonders sicher ist, ein unter /var/www liegendes Skript mit Administratorrechten auszuführen?
Mitglied: 114757
114757 Apr 07, 2015 updated at 09:24:47 (UTC)
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 !
Member: Jens4ever
Jens4ever Apr 12, 2015 at 11:06:49 (UTC)
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
Mitglied: 114757
Solution 114757 Apr 12, 2015 updated at 12:22:12 (UTC)
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 ??!
Member: Jens4ever
Jens4ever Apr 12, 2015 updated at 12:18:30 (UTC)
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