exec mit PHP zulassen

Irgendwelche Probleme mit XAMPP für Linux? Dann ist hier genau der richtige Ort um nachzufragen.

exec mit PHP zulassen

Postby err.println » 06. November 2015 11:40

Hallo Leute,

habe mal wieder ein neues Problem.

Ich habe mir eine Schleife gebaut, die verschiedene Ordner (benannt nach Benutzer) löschen soll. Funktioniert soweit.
Allerdings, wenn der Ordner mit Inhalt befüllt ist, wird dieser nicht gelöscht.
Schleife sieht ungefähr so aus:
for($i=1;$i<=$anzahl;$i++){
DROP SQL USER...;
DELETE $user.$anzahl from ftpuser;
DROP Database $user.$anzahl;
das ist aus dem Kopf geschrieben, kann ignoriert werden, funktioniert nämlich.
chmod(/Pfad/zum/Ordner/$user.$anzahl, 0777); funktioniert auch

Alternative 1:
shell_exec("rm -rf /Pfad/zum/Ordner/$user.$anzahl");
Alternative 2:
shell_exec("rm -ff /Pfad/zum/Ordner/$user.$anzahl");
Alternative 3:
exec("rm -rf /Pfad/zum/Ordner/$user.$anzahl");
Alternative 4:
exec("rm -ff /Pfad/zum/Ordner/$user.$anzahl");

Alle funktionieren nicht.

Habe in der php.ini den safe_mode auf off und auch /bin/rm mit einbezogen, geht alles nicht.
Wichtig ist aber, dass die Ordner mit x-beliebiger Unterstruktur gelöscht werden.
Könnte mir auch eine PHP-Funktion basteln, aber mit einem kleinen Shell-Befehl ist es ja wesentlich kürzer und der safe_mode ist auch nicht wichtig, über die Risiken bin ich mir im Klaren.


Habt ihr da eine Idee?

Viele Grüße
err.println()
err.println
 
Posts: 14
Joined: 13. October 2015 08:30
Operating System: Debian

Re: exec mit PHP zulassen

Postby Nobbie » 06. November 2015 12:01

Das scheitert mit einiger Sicherheit an fehlenden Zugriffsrechten. Die PHP Funktionen laufen ja als Prozess unter Apache und damit mit der gleichen UserID, mit der Apache läuft. Das ist meistens ein harmloser Systemuser ("Daemon", oder "www" oder wie auch immer, kannst Du selbst festlegen in httpd.conf durch die Anweisungen "User" und "Group").

Und diesem User fehlt höchstwahrscheinlich die Berechtigung, die gewünschten Ordner löschen zu dürfen (wahrscheinlich dürfen die Dateien nicht gelöscht werden, die darin liegen).
Nobbie
 
Posts: 13170
Joined: 09. March 2008 13:04

Re: exec mit PHP zulassen

Postby err.println » 06. November 2015 12:09

Aber egal wie, www-data legt an und ist zu jeder Zeit Eigentümer, außerdem mit dem rm - ff-Befehl wird ja vorher noch ein chmod ausgeführt. Somit müsste er ausreichende Berechtigung haben. Ich denke es liegt an der php.ini, dass dieses eben sagt "Nein, ein Skript darf nicht jene Ordnerstruktur löschen".
Bin mir aber nicht sicher
err.println
 
Posts: 14
Joined: 13. October 2015 08:30
Operating System: Debian

Re: exec mit PHP zulassen

Postby Nobbie » 06. November 2015 12:22

err.println wrote:Aber egal wie, www-data legt an und ist zu jeder Zeit Eigentümer, außerdem mit dem rm - ff-Befehl wird ja vorher noch ein chmod ausgeführt.


a) rm -ff ist Quatsch (sowieso mit dem Blank vor dem ff), d.h. richtig rm -rf. Das sind sog. Optionen, "-r" steht für "rekursiv" und -f für "Fresse halten" (so merke ich mir das immer), richtig steht es für "force", also erzwingen.

b) das chmod ändert nur die Ordnerrechte, nicht die Dateirechte.

err.println wrote:Ich denke es liegt an der php.ini, dass dieses eben sagt "Nein, ein Skript darf nicht jene Ordnerstruktur löschen".
Bin mir aber nicht sicher


Ne, das ist auch Quatsch, das gibt es nicht. Leite mal die Fehlerausgabe um, vielleicht kannst Du daran etwas erkennen:

Code: Select all
shell_exec("rm -rf /Pfad/zum/Ordner/$user.$anzahl 2>>/tmp/error.log");


Danach steht in /tmp/error.log alles, was ggf. schiefgegangen ist. Vorher kannst Du mal ein "ls -al" in den Ordnern starten und hier dann mal zeigen, was für Dateien dort stehen und welche Rechte sie haben.
Nobbie
 
Posts: 13170
Joined: 09. March 2008 13:04

Re: exec mit PHP zulassen

Postby err.println » 06. November 2015 14:19

[Fri Nov 06 13:47:50.037878 2015] [core:notice] [pid 2626] AH00094: Command line:
'/opt/lampp/bin/httpd -E /opt/lampp/logs/error_log -D SSL -D PHP'
rm: das Entfernen von "/opt/lampp/htdocs/W15DBBE_3/sds/sdsds" ist nicht möglich:
Keine Berechtigung
err.println
 
Posts: 14
Joined: 13. October 2015 08:30
Operating System: Debian

Re: exec mit PHP zulassen

Postby err.println » 06. November 2015 14:20

Mein Code zurzeit:
shell_exec("rm -rff $dir 2>>/opt/lampp/logs/error_log");
err.println
 
Posts: 14
Joined: 13. October 2015 08:30
Operating System: Debian

Re: exec mit PHP zulassen

Postby Nobbie » 06. November 2015 15:39

err.println wrote:rm: das Entfernen von "/opt/lampp/htdocs/W15DBBE_3/sds/sdsds" ist nicht möglich:
Keine Berechtigung


Na also. Genau meine Vermutung. Jetzt müssen wir nur die ganzen Berechtigungen kennen, von allen Dateien und allen Ordnern, die da beteiligt sind (von unten bis ganz oben).
Nobbie
 
Posts: 13170
Joined: 09. March 2008 13:04

Re: exec mit PHP zulassen

Postby err.println » 06. November 2015 16:25

unten www-data
oben daemon

Ich machs mit ner rekursiven Schleife
err.println
 
Posts: 14
Joined: 13. October 2015 08:30
Operating System: Debian

Re: exec mit PHP zulassen

Postby Nobbie » 06. November 2015 16:49

err.println wrote:unten www-data


Wenn Du nicht willst, dass man Dir hilft, dann sag das ruhig. Was hat Deine Antwort mit BERECHTIGUNGEN(!) zu tun? Das ist der INHABER der Datei, selbst der könnte ggf. nicht genügen Dateirechte besitzen, um diese Datei zu löschen. Nur weiß ich das jetzt immer noch nicht und Du gibst Dir auch keine sonderliche Mühe, hier vernünftig mitzuarbeiten.

Ein letzter Versuch, auch die Rekursion brauchst Du nicht zu programmieren, es muss einfach von oben bis unten alles stimmen, so funktioniert nun einmal Linux.
Nobbie
 
Posts: 13170
Joined: 09. March 2008 13:04

Re: exec mit PHP zulassen

Postby err.println » 07. November 2015 01:12

Bei angelegten Dateien hat der User alle Rechte, Gruppe hat nur Leserechte und Welt meine ich Schreib- und Leserechte,

Ich kopiere Dir den Quelltext am Montag hier rein, wenn ich wieder auf der Arbeit bin.
err.println
 
Posts: 14
Joined: 13. October 2015 08:30
Operating System: Debian

Re: exec mit PHP zulassen

Postby Nobbie » 07. November 2015 11:19

err.println wrote:Ich kopiere Dir den Quelltext am Montag hier rein, wenn ich wieder auf der Arbeit bin.


Den brauche ich nicht. Du musst herausfinden, welche Dateiberechtigungen fehlen, da liegt die Ursache, nicht am Programm und auch nicht an irgendeiner PHP Option.
Nobbie
 
Posts: 13170
Joined: 09. March 2008 13:04

Re: exec mit PHP zulassen

Postby err.println » 10. November 2015 10:33

Angelegter Ordner (auch über PHP)
drwxrwxrwx 3 daemon daemon 4096 Nov 10 10:25 /opt/lampp/htdocs/W15DBBE_1

Unterliegende Objekte:
drwxr-xr-x 3 www-data www-data 4096 Nov 10 10:25 /opt/lampp/htdocs/W15DBBE_1/hallo
drwxr-xr-x 2 www-data www-data 4096 Nov 10 10:25 /opt/lampp/htdocs/W15DBBE_1/hallo/test
-rw-r--r-- 1 www-data www-data 0 Nov 10 10:25 /opt/lampp/htdocs/W15DBBE_1/hallo/test/test.txt
err.println
 
Posts: 14
Joined: 13. October 2015 08:30
Operating System: Debian

Re: exec mit PHP zulassen

Postby Nobbie » 10. November 2015 11:24

Oben hießen die Dateien noch "sdsds" ....

Das macht es nicht leichter, mit verfälschten Daten zu arbeiten. Versuche doch einfach direkt in der Shell als User www-data den Befehl "rm ...." auszuführen. Die Berechtigung von htdocs kann ich leider nicht erkennen (die darüber sowieso nicht), außerdem kann es sein, dass sich der Prozess selbst durch ein chdir() Kommando o.ä. in einem Verzeichnis befindet, was gelöscht werden soll, das geht auch nicht.

Last not least ist vielleicht eine der Dateien aktiv noch geöffnet, kann ich auch nicht erkennen. Mehr kann ich von hier aus nicht tun, das musst Du selbst debuggen. Ich kann nur sicher sagen, das hat "normale" Berechtigungsgründe und ist nicht ein Problem der php.ini
Nobbie
 
Posts: 13170
Joined: 09. March 2008 13:04

Re: exec mit PHP zulassen

Postby err.println » 10. November 2015 11:32

Wichtig ist nur, dass die Dateien letztendlich über FTP angelegt werden (www-data). Heißt es ist der gleiche Fall wie mit /sdsds...
Aber anscheinend werden von PHP die Ordner via Daemon-User angelegt und versucht zu löschen.
Dürfte doch generell funktionieren, wenn ich Daemon die entsprechenden Rechte vergebe, oder?

Leider sind das so meine ersten Schritte mit Debian, weshalb ich davon relativ wenig Ahnung habe. Tut mir leid für nicht ausreichende Beschreibungen und Unwissenheit meinerseits und Danke auf jeden Fall für deine Hilfe!

Wie kann ich Daemon entsprechende Rechte (notfalls su) vergeben, weißt Du das so aus dem Kopf?
err.println
 
Posts: 14
Joined: 13. October 2015 08:30
Operating System: Debian

Re: exec mit PHP zulassen

Postby Nobbie » 10. November 2015 17:33

Ändere doch die UserID/GroupID, unter der Apache läuft. Ist mit Abstand einfacher: in httpd.conf "User..." und "Group...." anpassen und Apache neu starten.

ACHTUNG: ggf. müssen dann Dateirechte und Zugehörigkeit von htdocs etc. angepasst werden.

Dateirechte ändert man mit "chmod" und Dateizugehörigkeit mit "chown".
Nobbie
 
Posts: 13170
Joined: 09. March 2008 13:04

Next

Return to XAMPP für Linux

Who is online

Users browsing this forum: No registered users and 15 guests