[php] mkdir() rechten

Pagina: 1
Acties:
  • 185 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • hanneshoffie
  • Registratie: November 2005
  • Laatst online: 19-05-2022
Hallo,

ik heb een probleempje met mkdir op de server.
ik krijg deze foutmelding bij het uitvoeren van het onderstaande script

Warning: mkdir(): Unable to access blaat in /WebSpace/../.../.../../public_html/v1/testmkdir.php on line 2

code:
1
2
3
<?php
mkdir("blaat", 0777);
?>


wat ik heb geprobeerd is:
- bovenstaande code
- blaat vervangen door: /WebSpace/../.../.../../public_html/v1/blaat
- blaat vervangen door: $_SERVER['DOCUMENT_ROOT']."/blaat"
- blaat vervangen door $_SERVER['DOCUMENT_ROOT']." /WebSpace/../.../.../../public_html/v1/blaat"
- blaat vervangen door /public_html/v1/blaat

Lokaal werkt het script wel zoals jullie zullen verwachten.
php instellingen server:
safe mode = on (lokaal en master)

zit het hem daar misschien in?

de map v1 heeft trouwens chmod 777.

groeten

Acties:
  • 0 Henk 'm!

  • flexje
  • Registratie: September 2001
  • Laatst online: 16:57

flexje

got-father

probeer het eens met exec()

"Try not to become a man of success but rather to become a man of value..."


Acties:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
ikzelf doe het zo: dit als reden dat bij mij rechten in safe mode niet goed geset werden:
PHP:
1
2
3
4
$old_umask = umask(0);
umask($old_umask);
mkdir($base);
chmod($base, 0777);

This message was sent on 100% recyclable electrons.


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Wanneer heb je die v1 map ge chmod naar 777? Php heeft (zoals ik in een eerder topic van vandaag gezien heb) de neiging om na 1x controleren voor eeuwig dat resultaat te onthouden.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • hanneshoffie
  • Registratie: November 2005
  • Laatst online: 19-05-2022
code:
1
2
3
4
5
$base = "blaat";
$old_umask = umask(0);
umask($old_umask);
mkdir($base);
chmod($base, 0777);

dit resulteert in:
Warning: mkdir(): Unable to access blaat in /WebSpace/../.../v1/testmkdir.php on line 6

Warning: chmod(): Unable to access blaat in /WebSpace/../.../v1/testmkdir.php on line 7

Warning: chmod(): No such file or directory in /WebSpace/../.../v1/testmkdir.php on line 7

// ook geprobeerd met de in de eerste post genoemde wijzigingen voor blaat
// ook nieuwe map aangemaakt en meteen de chmod gewijzigt

code:
1
2
3
4
5
exec("blaat");

of

exec(mkdir("blaat",0777));


in de handleiding op php.net kan ik niet precies uithalen hoe ik de exec functie moet gebruiken.

Acties:
  • 0 Henk 'm!

  • Optix
  • Registratie: Maart 2005
  • Laatst online: 12-08 19:46
Vergeet niet dat als je onder linux zit en je path begint met een / dat je dan vanaf root begint. Zoals je in een van je voorbeelden doet.

Als je nou gewoon eens het volledige pad er neer zet.

[ Voor 11% gewijzigd door Optix op 05-12-2006 18:13 ]

.


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 20-09 22:44

MBV

Janoz schreef op dinsdag 05 december 2006 @ 17:52:
Wanneer heb je die v1 map ge chmod naar 777? Php heeft (zoals ik in een eerder topic van vandaag gezien heb) de neiging om na 1x controleren voor eeuwig dat resultaat te onthouden.
Je bedoelt deze? Apache/ rechtenprobleem ;)
helemaal onderaan staat de oplossing voor dat probleem.

Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 20-09 22:44

MBV

hanneshoffie schreef op dinsdag 05 december 2006 @ 18:08:

// ook geprobeerd met de in de eerste post genoemde wijzigingen voor blaat
// ook nieuwe map aangemaakt en meteen de chmod gewijzigt

code:
1
2
3
4
5
exec("blaat");

of

exec(mkdir("blaat",0777));


in de handleiding op php.net kan ik niet precies uithalen hoe ik de exec functie moet gebruiken.
exec is alsof je zelf iets op de console intikt. net zoiets als de backtick operator (`). Oftewel
exec('mkdir /var/www/blaat');
of
exec ('mkdir blaat');

Acties:
  • 0 Henk 'm!

  • hanneshoffie
  • Registratie: November 2005
  • Laatst online: 19-05-2022
wat ik geprobeerd heb:
commentaar:
/Web/../www_docs => $_SERVER['DOCUMENT_ROOT']

code:
1
2
3
4
5
exec ('mkdir blaat');
exec ('mkdir /Web/../www_docs/blaat');
exec ('mkdir /Web/../www_docs/blaat');
exec ('mkdir /Web/../www_docs/WebSpace/../.../v1/blaat');
exec ('mkdir -p /Web/../www_docs/WebSpace/../.../v1/blaat');

deze doen allemaal niks, altans ze maken geen map aan.
zowel bij een nieuwe als oude directory niet(die ik net heb aangemaakt met chmod 777).

Acties:
  • 0 Henk 'm!

Verwijderd

Wat loop je toch te kloten met die driedubbele punt? Dat kom je echt nooit tegen als component in een pad, het is één punt, of twéé punten, maar nooit drie.

Acties:
  • 0 Henk 'm!

  • hanneshoffie
  • Registratie: November 2005
  • Laatst online: 19-05-2022
Verwijderd schreef op dinsdag 05 december 2006 @ 19:03:
Wat loop je toch te kloten met die driedubbele punt? Dat kom je echt nooit tegen als component in een pad, het is één punt, of twéé punten, maar nooit drie.
ja dat heb ik zelf gedaan, in de werkelijke code staan een stuk of 5 mappen daar tussen

Acties:
  • 0 Henk 'm!

  • hanneshoffie
  • Registratie: November 2005
  • Laatst online: 19-05-2022
dit vond ik nog op php.net

mkdir:
Checks whether the directory in which you are about to operate has the same UID (owner) as the script that is being executed.

kan ik daar misschien iets fout aan doen?

Acties:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
hanneshoffie schreef op dinsdag 05 december 2006 @ 19:53:
dit vond ik nog op php.net

mkdir:
Checks whether the directory in which you are about to operate has the same UID (owner) as the script that is being executed.

kan ik daar misschien iets fout aan doen?
ja tuurlijk
je moet wel rechten hebben op een directory daar iets aan te maken..
wat somige providers fout doen is zorgen dat apache (en dus php) andere rechten heeft dan bijv. je ftp account.. gelukkig kan je ook opvragen welke rechten er op een mapje zitten...
ik zou zeggen check het uit..
eventueel kan je dmv ftp alles 777 modden op de dir waar je die directory in wil maken.

This message was sent on 100% recyclable electrons.


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 20-09 22:44

MBV

nadat je dat hebt gedaan moet je dus even deze functie uitvoeren: http://nl3.php.net/manual/en/function.clearstatcache.php
anders merkt php niks van de veranderde rechten.

Acties:
  • 0 Henk 'm!

  • hanneshoffie
  • Registratie: November 2005
  • Laatst online: 19-05-2022
Hallo,

het aanmaken van een nieuwe map maakt niet uit met 777.
Hij blijft dezelfde foutmelding: Warning: mkdir(): Unable to access blaat in ....
geven.

Volgens mij ligt het aan het pad wat niet goed staat. Iemand een idee hoe je het pad precies goed krijgt?

Acties:
  • 0 Henk 'm!

  • hanneshoffie
  • Registratie: November 2005
  • Laatst online: 19-05-2022
kan iemand mij anders vertellen als ik de phpinfo bekijk. Welk pad ik precies moet invullen. Misschien dat het daar verder fout gaat.

Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 20-09 22:44

MBV

niet zolang jij je pad met ... blijft opvullen. PHPinfo gaat je ook niet verder helpen: de directory waar het bestand in staat is ook belangrijk.

Zet de volgende code eens in een nieuw php-bestand, en zet de output daarvan eens hier neer (tussen [code ] tags)
PHP:
1
2
3
4
5
6
7
8
<?php 
clearstatcache();
echo 'users ='.exec('users 2>&1')."<br />\n";
echo 'pwd   ='.exec('pwd  2>&1')."<br />\n";
echo 'mkdir ='.exec('mkdir blaat 2>&1')."<br />\n";
echo 'ls     ='.exec('ls -al |grep "\.\s*$" 2>&1')."<br />\n";
echo 'klaar';
?>

En daarbij graag de volledige output, want ergens gaan hier wat 'n00b alert'-bellen rinkelen ;)

users laat zien welke gebruikers er op dit moment actief zijn. pwd laat de huidige directory zien. mkdir laat de foutmelding zien van mkdir. ls laat de rechten van de huidige directory zien.

En vergeet ook niet je logfiles te bekijken, mits je dat mag. Daar staat vaak heel handige info in :)

[ Voor 12% gewijzigd door MBV op 06-12-2006 00:27 ]


Acties:
  • 0 Henk 'm!

  • hanneshoffie
  • Registratie: November 2005
  • Laatst online: 19-05-2022
code:
1
2
3
4
5
users =<br />
pwd   =<br />
mkdir =<br />
ls     =<br />
klaar


dat is de broncode die die geeft als je hem uitvoert.
Dat stukje exec code doet dus weinig...apart
// logfiles kan ik niet zien.

[ Voor 28% gewijzigd door hanneshoffie op 06-12-2006 00:46 ]


Acties:
  • 0 Henk 'm!

Verwijderd

De code is dus uitgevoerd... Is de nieuwe map nu niet aangemaakt dan?

EDIT: Sorry las niet goed, delete deze post maar O-)

[ Voor 29% gewijzigd door Verwijderd op 06-12-2006 08:55 ]


Acties:
  • 0 Henk 'm!

  • MadMurdock
  • Registratie: Oktober 2000
  • Niet online
hanneshoffie schreef op dinsdag 05 december 2006 @ 17:38:
safe mode = on (lokaal en master)
zit het hem daar misschien in?
Misschien?
Zie ook http://nl2.php.net/manual...s.safe-mode.functions.php
mkdir - Checks whether the directory in which you are about to operate has the same UID (owner) as the script that is being executed.
Kan je dat eens controleren? Ik vraag me overigens af of die niet juist checkt of de dir. waarin je werkt detzelfde owner heeft als degene die het script uitvoert, dus de apache-user..

Het verklaart iig wel waarom die exec() functies geen uitvoer geven.

[ Voor 81% gewijzigd door MadMurdock op 06-12-2006 09:27 ]


Acties:
  • 0 Henk 'm!

  • hanneshoffie
  • Registratie: November 2005
  • Laatst online: 19-05-2022
MadMurdock schreef op woensdag 06 december 2006 @ 09:04:
[...]

Misschien?
Zie ook http://nl2.php.net/manual...s.safe-mode.functions.php

[...]


Kan je dat eens controleren? Ik vraag me overigens af of die niet juist checkt of de dir. waarin je werkt detzelfde owner heeft als degene die het script uitvoert, dus de apache-user..

Het verklaart iig wel waarom die exec() functies geen uitvoer geven.
Hallo,

Ja dat vroeg ik een paar berichten geleden ook al. Ik voer het namelijk gewoon uit in de browser zonder ingelogd te zijn ofzoiets. Moet ik dan met ftp gegevens inloggen? of wat wordt daarmee bedoeld?

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Dat is een laatste redmiddel. Er wordt daar bedoeld dat de gebruiker waarmee je webserver is ingelogd in het besturingssysteem (Linux) rechten heeft over de map waarin je een nieuwe map wil maken. Als die gebruiker die rechten niet heeft, dan kun je domweg geen map maken.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • hanneshoffie
  • Registratie: November 2005
  • Laatst online: 19-05-2022
Ja ik kan ook gewoon handmatig mappen aanmaken, als je dat bedoelt?

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Nee. Je Apache-user moet mappen kunnen maken, niet je eigen account. Werk je eigenlijk met Linux of Windows?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • hanneshoffie
  • Registratie: November 2005
  • Laatst online: 19-05-2022
server draait onder linux. werk zelf onder windows.
heb je misschien een code waarmee ik dat kan zien of welke ik moet gebruiken?

[ Voor 43% gewijzigd door hanneshoffie op 06-12-2006 11:29 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Het is geen kwestie van code, het is een kwestie van de juiste rechten hebben. Je code haalt niets uit als je je rechten niet goed zet.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • MadMurdock
  • Registratie: Oktober 2000
  • Niet online
Nou, vooruit dan.. Voer dit scriptje eens uit om te kijken wie nu daadwerkelijk de owners zijn:

PHP:
1
2
3
4
5
6
7
8
9
10
11
<?
echo "huidige file: " . $_SERVER['SCRIPT_FILENAME'] . "<br>";
echo "eigenaar file: " . getOwner($_SERVER['SCRIPT_FILENAME']) . "<br>";
echo "eigenaar dir: " . getOwner("./") . "<br>";

function getOwner($startscript) {
  $fileowneruid=fileowner($startscript);
  $fileownerarray=posix_getpwuid($fileowneruid);
  return ($fileownerarray['name']);
}
?> 

Acties:
  • 0 Henk 'm!

  • hanneshoffie
  • Registratie: November 2005
  • Laatst online: 19-05-2022
mijn excuses voor late reactie:

huidige file: /home/project/214502/214502i/public_html/v2/test2.php
eigenaar file: 214502i
eigenaar dir: 214502i

PHP draait onder een andere user als FTP.
FTP maakt dan een map aan en PHP draait in safe mode.
Die wil dan een map aanmaken terwijl hij geen eigenaar van de map is.
Modbreak:Het "omhoog schoppen" van je topic is niet toegestaan binnen 24 uur. Gelieve dit niet meer te doen. :)

[ Voor 45% gewijzigd door NMe op 06-12-2006 19:26 ]


Acties:
  • 0 Henk 'm!

  • MadMurdock
  • Registratie: Oktober 2000
  • Niet online
Als de file en de dir van dezelfde eigenaar zijn (blijkbaar), dan moet php (onder welke user die dan ook draait) wel een dir aan kunnen maken in v2. Uiteraard moet de map voor de php-user (apache, www-data..) wel schrijfbaar zijn. Je zult dus moeten proberen die dir v2 op chmod 777 te zetten. (vrij onveilig overigens). Misschien kan je dat eens met je FTP-programma proberen? Een beetje ftp-client kan dat wel. Daarna nog eens proberen om de map 'blaat' aan te maken met mkdir('/home/project/214502/214502i/public_html/v2/', 0777);

Acties:
  • 0 Henk 'm!

  • hanneshoffie
  • Registratie: November 2005
  • Laatst online: 19-05-2022
Hallo,

als ik nieuwe directory v4 met 777 aanmaak en deze code daar uitvoer

PHP:
1
2
3
<?php
mkdir("/home/project/214502/214502i/public_html/v4/",0777);
?>

geeft ie:
Warning: mkdir(/home/project/214502/214502i/public_html/v4/): File exists in /WebSpace/export/home/project/214502/214502i/public_html/v4/test2.php on line 4
//logisch zou je denken
PHP:
1
2
3
<?php
mkdir("/home/project/214502/214502i/public_html/v4/blaat",0777);
?>

geeft ie:
Warning: mkdir(/home/project/214502/214502i/public_html/v4/blaat): Permission denied in /WebSpace/export/home/project/214502/214502i/public_html/v4/test2.php on line 4
PHP:
1
2
3
<?php
mkdir("/home/project/214502/214502i/public_html/v4/blaat/",0777);
?>

geeft ie:
Warning: mkdir(): Unable to access /home/project/214502/214502i/public_html/v4/blaat/ in /WebSpace/export/home/project/214502/214502i/public_html/v4/test2.php on line 4

welke dir moet nog meer andere rechten hebben dan? bedankt

Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 20-09 22:44

MBV

Je moet ook een directory met FTP aanmaken als 777, en dáarin met PHP een map aanmaken. Je PHP-script heeft geen rechten om die map aan te maken, omdat je map public_html/v4 (waarschijnlijk) nu de rechten van chmod 775 heeft, wat aangeeft dat een andere gebruiker daar niet in mag schrijven. Als je dus met een FTP-programma die map ín /v4 aanmaakt, dan kan je daarin met PHP een map genereren.

Acties:
  • 0 Henk 'm!

  • hanneshoffie
  • Registratie: November 2005
  • Laatst online: 19-05-2022
dus het idee is:
public_html/v4:
public_html = 777
en v4 = 777
en dan in v4 een script met mkdir("/home/project/214502/214502i/public_html/v4/blaat",0777);

dat heb ik gedaan maar ik krijg dezelfde foutmelding

BTW: als ik die mappen chmod 777 heb gemaakt springen ze weer terug naar 755(WS_FTP Prof)

[ Voor 17% gewijzigd door hanneshoffie op 07-12-2006 09:52 ]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Dit schiet niet op zo. Na 30 post ben je nog geen steek opgeschoten ondanks vele aanwijzingen. Pas na die 30 posts kom je pas met de melding dat die map helemaal geen scrijfrechten heeft. Het lijkt me daarom ook handiger wanneer je je probleem eens voorlegt aan de hoster. Het wordt erg lastig om je via een forum te helpen wanneer je kennis van het linux rechten systeem zo beperkt is.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • hanneshoffie
  • Registratie: November 2005
  • Laatst online: 19-05-2022
oke sluit hierbij de topic dan maar
bedankt in ieder geval voor de hulp
Pagina: 1