Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: (Ubuntu server 8.04), PHP5, chmod($path,0777)  (gelezen 759 keer)

Offline kevinx

  • Lid
(Ubuntu server 8.04), PHP5, chmod($path,0777)
« Gepost op: 2011/08/12, 12:20:53 »

Ik hoop dat iemand mij helpen kan:

Voor een website (geschreven in/voor php5) moet een map tijdelijk schrijfrechten krijgen, chmod($path,0777) zodat het script er een bestand kan plaatsen en daarna weer terug te zetten naar de oorspronkelijke staat chmod($path,0755). Ter info: $path="files/";

Maar op de een of andere manier lukt dat niet en krijg ik de volgende melding:

Warning: chmod() [function.chmod]: Operation not permitted in /webhosting/uploadfile.php on line 16

Ik kan wel gewoon via mijn FTP-client de desbetreffende map verschillende rechten geven via de CHOM-commando.

Weet iemand waar het fout gaat? En nog beter weet iemand hoe ik dit probleem kan oplossen.

KevinX

PS: ik gebruik Ubuntu Server 8.04



Re: (Ubuntu server 8.04), PHP5, chmod($path,0777)
« Reactie #1 Gepost op: 2011/08/12, 20:37:59 »
De owner van de map files is waarschijnlijk jouw user. Als PHP als Apachemodule draait, kan het als user apache (kan ook 'nobody' of 'daemon' zijn) geen chmod uitvoeren op die map. Oplossing: map-owner wijzigen in de user van Apache. Mogelijk nadeel is wel dat je dan niet meer zo makkelijk met een FTP-client in die map kunt schrijven.

In theorie zou je het ook om kunnen draaien, dat wil zeggen Apache onder jouw user laten lopen. Je kunt user en group van Apache wijzigen in het configuratiebestand. Ik heb alleen geen idee wat voor ellende je je daarmee op de hals zou kunnen halen, dus dit lijkt me niet verstandig.

Het zou ook nog kunnen zijn dat chmod in de lijst met niet-toegestane functies staat, maar aangezien het om jouw eigen server gaat (toch?) zou je dat moeten weten. ;)

Re: (Ubuntu server 8.04), PHP5, chmod($path,0777)
« Reactie #2 Gepost op: 2011/08/14, 20:16:28 »
Eigenlijk is het een beetje onzin dat het script dit doet, er zijn immers 2 scenario's:
1:
De user waaronder het script draait is eigenaar van de map. Dan kan hij het bestandje gewoon plaatsen, want de 7 van 0755 staat voor de eigenaar, en betekent volle lees-, schrijf- en uitvoerrrechten.
2:
De user waaronder het script draait is niet de eigenaar. Dan mag hij de rechten ook niet veranderen, want dat mag alleen de eigenaar van een bestand of map.

Is "tijdelijk" 1 keer? Dan zou je handmatig de eigenaar (of de rechten) goed kunnen zetten, en daarna weer terug zetten. Als het vaker moet gebeuren is het misschien te overwegen om met sudo chown de eigenaar van de map definitief hetzelfde te maken als php/apache.

Je kunt trouwens eenvoudig een php-bestandje aanmaken met als inhoud:
Code: (PHP) [Selecteer]
<?php
echo exec("whoami");
?>
Als je die vanuit de browser oproept krijg je de user waaronder het script draait.