Avatar billede loevstroem Nybegynder
19. januar 2009 - 22:42 Der er 8 kommentarer og
1 løsning

begrænsning på opendir og mkdir

Kære Eksperter!

Jeg har de sidste 24 timer været igang med at flytte min 'portal' fra produktions serveren til en server der er en smule kraftigere og stabil! Herved kommer overgangen fra Windows til en Linux med PHP4 installeret. Og dette har ikke været smertefrit!!

Jeg oplever umiddelbart mest problemer med en funktioner hvor der bliver oprettet mapper på serveren.

Ved nedenstående fejl er der forsøgt at oprette 2 mapper- mappe 1 opretter uden problemer, imens mappe 2, som der skal oprettes inden i den første oprettede mappe fejler!

$oldumask = umask(0);
$result = mkdir($path.$dirname, $newdirpermissions, true);
umask($oldumask);
               
if($result) {
  $oldumask = umask(0);
  $sub_result = mkdir($path.$dirname."/thumb/", $newdirpermissions, true);
  umask($oldumask);            
}

Warning: mkdir(): SAFE MODE Restriction in effect. The script whose uid/gid is 186248/186248 is not allowed to access /hsphere/local/home/domain.dk/files/groups/1/photos/test owned by uid/gid 398/398 in /hsphere/local/home/domain.dk/grupper/gruppe/album.php on line 140

Jeg har af en kammerat fået at vide fejlen kommer af rettighederne på filerne, selve scriptet som "opret-mappe-funktionen" bliver eksekveret fra, skal have samme ejer som mappen selve den ny oprettede mappe. Men dette kan jeg ikke se hvordan det er muligt at tildele?

Er linux virkelig så groft mht. ejerskab af mapper, filer?

puha.. håber der er nogle der har konstruktive inputs - håber i forstår mine problemer..

På forhånd tak
Avatar billede dkfire Nybegynder
19. januar 2009 - 23:36 #1
Du kunne også slå safe mode off. ;-)

Hvad indeholder $newdirpermissions ??
Avatar billede welcor Nybegynder
19. januar 2009 - 23:49 #2
Kort sagt: Ja, Linux er virkelig så groft mht. ejerskab af mapper og filer.

Men, der er naturligvis løsninger, også på dette problem.

Som det fremgår af fejlmeddelelsen kører scriptet som bruger nummer 186248 (hvad det præcise brugernavn der passer til dette uid er, finder du ud af ved at skrive

grep 186248 /etc/passwd

i en shell. Navnet er det som står foran første kolon.

Tilsvarende finder du ud af hvilken bruger der ejer destinationsmappen med
ls -l /hsphere/local/home/domain.dk/files/groups/1/photos/
(her ser du efter linjen med "test")

Linjen har dette format:

drwxr-xr-x 9 welcor welcor      4096 2008-04-15 03:04 navnetPåFilen
rettigheder  uid    gid          size  (sidst ændret)  navn

Reglerne på en linuxmaskine siger at en bruger kun kan skrive til mapper som enten
- er skrivbare for alle.
- er skrivbare for hans gruppe.
- er ejet af ham, og skrivbare for ejeren.

Den enkle (og usikre) løsning er at gøre destinationsmappen skrivbar for alle. For at gøre dette, skriver du:
chmod -R 777 /hsphere/local/home/domain.dk/files/
Jeg anbefaler ikke dette, men det kan være ok som en test af om scriptet virker.

Den ikke helt så enkle (men væsentlig sikrere) løsning er at tilføje din "web-bruger" (ham med uid 186248) til gruppen som ejer filmappen (gruppen med id 398), og give gruppen skriverettigheder i filmappen. Dette gøres med disse kommandoer:
sudo usermod -a -G 398 <brugernavnet på din webbruger med uid 186248>
chmod -R 775 /hsphere/local/home/domain.dk/files/

Nu har scriptet mulighed for at skrive til files, men ikke alle mulige andre.
Avatar billede welcor Nybegynder
19. januar 2009 - 23:51 #3
Obs - for at slette adgang for alle, kan du køre

chmod -R 775 /hsphere/local/home/domain.dk/files/
(giver adgang til filerne for ejeren og hans gruppe)
eller
chmod -R 755 /hsphere/local/home/domain.dk/files/
(giver adgang til filerne kun for ejeren)
Avatar billede erikjacobsen Ekspert
19. januar 2009 - 23:54 #4
Desværre ser man tit en opsætning, der sætteren ejeren af mapper og filer oprettet via webserveren til den unix-bruger, der kører som webserver. Det er slet ikke nødvendigt - men nemt for dem, der adminstrerer serveren.
Avatar billede loevstroem Nybegynder
20. januar 2009 - 00:05 #5
Hej alle.

Tak for jeres respons.

Safe mode off er desværre ikke en mulighed, eftersom mit site er hostet i cowboy-byen, Surftown. For at være ærlig, overvejer jeg så småt at finde mig en ny platform.

En direkte chmod af samtlige filer på bekostning af en safemode funktion er jeg i tvivl om jeg vil begi mig ud i, den må jeg sove på :~)

$newdirpermissions indeholder værdien 777.
Avatar billede showsource Seniormester
21. januar 2009 - 13:25 #6
For at oprette flere dirs med mkdir() skal du bruge php5
Og du skal bruge 0777, ikke blot 777
Avatar billede loevstroem Nybegynder
22. januar 2009 - 19:48 #7
Jeg har ikke kunnet få succes med nogen af funktionerne, jeg har valgt at flytte til et andet webhotel hvor safe_mode off er en mulighed.

Welcor, smid et svar :~)
Avatar billede welcor Nybegynder
22. januar 2009 - 20:14 #8
jeg skal ikke have point, hvis mit svar ikke løste problemet ;(

Bare svar selv og luk spørgsmålet.
Avatar billede loevstroem Nybegynder
22. januar 2009 - 21:29 #9
Tak skal du have.

Og tak til alle der har bidraget med konstruktive besvarelser :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester