[PHP]mkdir() en safemode

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • doeternietoe
  • Registratie: November 2004
  • Laatst online: 21:26
Het probleem is als volgt:

Ik heb een website op een server staan waar safemode draait. De hoster is ook niet van plan daar iets aan te veranderen. Met safemode krijg je alleen toegang tot bestanden en mappen die hetzelfde uid hebben als het script. Als je echter met mkdir() een map aanmaakt heeft deze het uid van apache. Je krijgt de vreemde situatie dat je in een zojuist aangemaakte map geen schrijfrechten hebt. Ik heb al geprobeerd om de rechten gelijk op 0777 te zetten of de eigenaar te veranderen met chown(), maar steeds dezelfde error.


code:
1
Warning: mkdir() [function.mkdir]: SAFE MODE Restriction in effect. The script whose uid is 400 is not allowed to access /home/user/public_html/folder owned by uid 101 in /home/user/public_html/script.php on line 49


Op php.net wordt het probleem als volgt samengevat, er is alleen geen oplossing.
Beware that when in safe mode, mkdir creates folders with apache's UID, though the files you create in them are of your script's UID (usually the same as your FTP uid).

What this means is that if you create a folder, you won't be able to remove it, nor to remove any of the files you've created in it (because those operations require the UID to be the same).

Ideally mkdir should create the folder with the script's UID, but this has already been discussed and will not be fixed in the near future.

In the meantime, I would advice NOT to user mkdir in safe mode, as you may end up with folders you can't remove/use.
Het is voor mij onwerkbaar om geen mappen meer te kunnen aanmaken. Globaal zie ik een paar oplossingen:

1. Safemode uitzetten (zo mogelijk alleen voor mijn gebruiker). Lijkt me een redelijk probleem om dit bij mijn hoster voor elkaar te krijgen.
2. PHP in CGI-modus draaien. Dit zal waarschijnlijk ook mijn hoster moeten regelen. Ik heb al ontdekt dat bij sommige hosters php bestanden hernoemd kunnen worden naar bestand.phpcgi, maar dit werkt in mijn situatie zoals verwacht niet.
3. Spoedige overstap op PHP6. Het hele probleem van safemode zal in PHP6 van de baan zijn. Probleem is dat PHP6 nog niet final is en mijn host nog PHP4 draait. Ik zie op korte termijn nog geen overstap naar PHP5, laat staan versie 6.
4. De benodigde mappen aanmaken via een ftp-verbinding naar localhost. Lijkt me een zeer ranzige oplossing, maar het probleem lijkt me dan wel opgelost. Het kan zijn dat mijn host de benodigde functies uitgezet heeft, maar dan schrijven we er wel een netwerksocket voor.
5. Het script waar we het over hebben via een ander script naar een bestand schrijven. De eigenaar is dan apache en de aangemaakte mappen zijn dat ook. Ik heb het nog niet getest, maar het is een mogelijk oplossing.
6. Overstappen op een andere host. Heb kort geleden weer het contract verlengd, dus op korte termijn gaat dit geld kosten. Bovendien is de site een tijdje uit de lucht. Niet ideaal dus.


Wat raden jullie me aan?

Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Een website met een script dat continu zelf directories aanmaakt, komt vreemd op mij over. Ik zou eerst kijken of het wel echt nodig om directories aan te maken.
Verder hangt de beslissing af van de frequentie waarmee nieuwe directories aangemaakt worden. Eens per dag kan dat best via FTP, gebeurt het erg vaak dan zou ik naar een andere hoster kijken.

Acties:
  • 0 Henk 'm!

  • Comgenie
  • Registratie: Oktober 2005
  • Laatst online: 12-09 13:09

Comgenie

Soms heb je dat

Overstappen natuurlijk :')..

Anyway, aangezien je dat niet echt als oplossing wilt horen, zou ik kijken of't idd niet via een andere manier kan, of evt. zelfs een hele andere aanpak (Alles opslaan in mysql?). Een file createn word volgens die manual tekst die je copy paste niet als Apache user gemaakt maar als je eigen user. Ik denk als je dit echt wilt omzeilen, dat je dan meer langs de safe-mode security gaat werken, wat natuurlijk niet zo 1-2-3 gaat lukken. En system/exec is natuurlijk ook uitgeschakeld in safe-mode. Ik weet niet of dit gedoe een groot deel van je Website gaat worden waar je het nodig hebt, Maar je kan evt. dit gedoe via een andere host laten gaan waarbij er geen safe-mode is.

No animals were harmed in the making of this comment.


Acties:
  • 0 Henk 'm!

  • doeternietoe
  • Registratie: November 2004
  • Laatst online: 21:26
GlowMouse schreef op dinsdag 10 juli 2007 @ 20:27:
Een website met een script dat continu zelf directories aanmaakt, komt vreemd op mij over. Ik zou eerst kijken of het wel echt nodig om directories aan te maken.
Verder hangt de beslissing af van de frequentie waarmee nieuwe directories aangemaakt worden. Eens per dag kan dat best via FTP, gebeurt het erg vaak dan zou ik naar een andere hoster kijken.
Continue is wel een heel groot woord. Heb gebeurt hooguit eens per week, maar dan wel zo'n 100 folders tegelijk.

Ik heb al geprobeerd om het op te slaan in mysql, maar dat gaf bij het uitlezen geen prestaties om over naar huis te schrijven :( Na een maand testen was ik het in ieder geval spuigzat.

Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
doeternietoe schreef op dinsdag 10 juli 2007 @ 20:36:
[...]

Continue is wel een heel groot woord. Heb gebeurt hooguit eens per week, maar dan wel zo'n 100 folders tegelijk.
Die 100 folders kun je natuurlijk in dezelfde FTP-sessie aanmaken, dus dan duurt het niet langer dan enkele seconden.
Waar worden de folders voor gebruikt?

Acties:
  • 0 Henk 'm!

  • doeternietoe
  • Registratie: November 2004
  • Laatst online: 21:26
Er komen foto's in die later door de gebruikers worden geupload. Dat uploaden kan wel op een normale manier, omdat die mapjes er dus al staan.

Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
doeternietoe schreef op dinsdag 10 juli 2007 @ 20:42:
Er komen foto's in die later door de gebruikers worden geupload. Dat uploaden kan wel op een normale manier, omdat die mapjes er dus al staan.
Die foto's kun je ook allemaal in dezelfde map zetten (of wanneer het om erg veel foto's gaat in een boom van subdirectories, zoals Squid met zijn cachefiles doet), en met een database bijhouden welk bestand in welk album hoort. Toon je een album, hoef je alleen maar uit de database een lijst met bestandsnamen op te vragen en heb je bij het opvragen van het plaatje zelf geen extra overhead zoals je eerder wel had toen je alles in een database opsloeg.

Acties:
  • 0 Henk 'm!

  • doeternietoe
  • Registratie: November 2004
  • Laatst online: 21:26
GlowMouse schreef op dinsdag 10 juli 2007 @ 20:49:
[...]

Die foto's kun je ook allemaal in dezelfde map zetten (of wanneer het om erg veel foto's gaat in een boom van subdirectories, zoals Squid met zijn cachefiles doet), en met een database bijhouden welk bestand in welk album hoort.
Het moet compatible blijven met een bestaande structuur die vroeger met de hand is bijgehouden. De bestanden worden bijgehouden in een xml-bestand. Dit was ook de reden waarom ik de aangaf dat ik het al gedeeltelijk via een database heb geprobeerd. Dat gedeelte heeft inderdaad nu alle bestanden in één directory staan. Bij het andere gedeelte is dat geen optie.

Ik ben trouwens al een aardig eindje op weg met de ftp-oplossing. Ik was er niet zo blij van dat er dan in een script het ftp-wachtwoord staat, maar dit heb ik op kunnen lossen met een nieuwe ftp-account met beperkte rechten. (en een waanzinnig lang random gegenereerd wachtwoord, hoef het toch alleen maar te pasten)

edit: Ik heb het probleem nu opgelost met de ftp-methode. Iedereen bedankt voor het meedenken. Ik ben zelf eigenlijk maar half blij met deze oplossing, maar een andere is er helaas niet.

Iemand die nog een bruikbare tip denkt te kunnen geven is natuurlijk van harte welkom!

[ Voor 11% gewijzigd door doeternietoe op 10-07-2007 22:32 ]

Pagina: 1