Forum: PC-Programmierung PHP shell_exec


von KuRu (Gast)


Lesenswert?

Hallo Leute,

ich habe gerade ein kleines Phänomen (zumindest für mich als Noob in 
Sache PHP und Shell).
Momentan läuft eine Datenerfassung auf meinem Raspi. Über ein 
Webinterface möchte ich später den Speicherort der Messdaten auswählen 
können.
Dazu wollte ich zuerst mal über FDISK schauen was überhaupt für 
Speichermedien angeschlossen sind.

Also habe ich mal folgendes ausprobiert:
1
<?php
2
echo shell_exec( "/sbin/fdisk -h 2>&1");
3
?>

Was auch soweit funktioniert, die Hilfe von FDISK wird auf der PHP Seite 
ausgegeben.

Wenn ich nun aber den Schalter -l (für list Partition Tables) eintrage, 
kommt nur noch eine leere Seite und nicht das Listing der Partitionen 
(direkt auf der Shell funktioniert es aber).
Woran könnte das liegen?
Rechte von www-data?
Wieso wird dann die Hilfe ausgegeben?


Danke und Grüße
Rudi

P.S: Wenn ich ein kleines Shell-Skript mache, dass mir den return von 
FDISK in ein File schreibt, kann ich ohne Probleme über PHP/JS auf das 
File zugreifen. Allerdings gefällt mir das so nicht, im RAM wäre es mir 
lieber.

von *PopCorn* (Gast)


Lesenswert?

Hallo,

machde den Aufruf mit SUDO, Dann sollte es gehen.

von KuRu (Gast)


Lesenswert?

*PopCorn* schrieb:
> Hallo,
>
> machde den Aufruf mit SUDO, Dann sollte es gehen.


Nope

von Εrnst B. (ernst)


Lesenswert?

KuRu schrieb:
> Rechte von www-data?
Ja.

> Wieso wird dann die Hilfe ausgegeben?

Weil die Hilfe keine so geheime Info ist, dass man die nicht jedem 
zeigen könnte.

Das hier:

*PopCorn* schrieb:
> machde den Aufruf mit SUDO, Dann sollte es gehen.

ist die Lösung.

Aber nicht in der Standard-Config (der Benutzer "www-data" wird ja kaum 
sein Passwort eintippen können) sondern so, dass dieser ohne Passwort 
als root an fdisk ran darf.

dazu brauchts in /etc/sudoers.d eine Datei mit z.B
www-data ALL = (root) NOPASSWD: /sbin/fdisk

Sicher ist das alles natürlich nicht, dein Webserver darf dann auch 
deine Festplatte formatieren...

: Bearbeitet durch User
von KuRu (Gast)


Lesenswert?

Εrnst B✶ schrieb:
> Sicher ist das alles natürlich nicht, dein Webserver darf dann auch
> deine Festplatte formatieren...

Deshalb hatte ich vorher ein kleines Script geschrieben, dass nur fdisk 
-l zurück gibt (ohne Übergabeparameter). Dannach habe ich über visudo 
foldende Zeile ergänzt:
1
www-data ALL = (root) NOPASSWD: /path/to/my/script.sh

Leider ohne Änderung :-(
Muss ich noch irgendwie dafür sorgen dass das neu geladen wird?
Ich habe nach einem Neustart nochmal über visudo nachgeschaut und meine 
Änderungen sind noch vorhanden. Leider scheinbar immer noch nicht die 
nötigen Rechte.



Oder gibt es eine andere/schönere/bessere Möglichkeit, wie ich über 
meine PHP-Seite überprüfen kann was für Wechseldatenträger an das System 
angeschlossen sind und diese dann über eine Auswahl mounten kann?

Grüße und danke für die guten Tipps.
Rudi

von Daniel F. (df311)


Lesenswert?

hmm, habe das noch nie probiert, aber ich würde in einem verzeichnis in 
dem der user "www-data" schreiben darf einen symlink auf ein verzeichnis 
reinpacken, in dem die mountpoints der wechseldatenträger stehen.
danach einfach über die verzeichnisse drüberiterieren, mit "is_writable" 
prüfen ob dort geschrieben werden darf und falls ja in die auswahl mit 
aufnehmen.

alternativ zum "is_writable"-check evtl /proc/mounts durchgehen und auf 
wechseldatenträger prüfen.
ich würde aber den apache-user nicht einfach in ein (fast)beliebiges 
verzeichnis schreiben lassen.

dritte alternative (gefällt mir im nachhinein sogar am besten):
mit php in z.b. /tmp schreiben, in der webconfig das wunsch-ziel 
auswählen und irgendwo zwischenspeichern. ein cronjob kümmert sich dann 
darum, dass die daten von /tmp auf den gewünschten datenträger wandern.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.