"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

php: mkdir zickt rum...

semteX 23.03.2005 - 23:21 1244 17
Posts

semteX

begehrt die rostschaufel
Avatar
Registered: Oct 2002
Location: Pre
Posts: 14594
PHP wirft folgende Meldung:

Warning: mkdir(): SAFE MODE Restriction in effect. The script whose uid is 66995 is not allowed to access dienstplaene/2007 owned by uid 60001 in /www/salzburg/zivi/upload.php on line 14

der Befehl:
Code: PHP
....
if(!is_dir("dienstplaene/".$_POST["jahr"])) {
  $chck=mkdir("dienstplaene/".$_POST["jahr"]);
}
            $chck=mkdir("dienstplaene/".$_POST["jahr"]."/".$_POST["monat"]); <= line 14
if($chck) {
  echo "<div class='text'>Ordner erfolgreich erstellt</div>";
}

der 1. ordner wird aber erstellt.

OS: (laut phpinfo) System SunOS www 5.9 Generic_112233-08 sun4u
Build Date Feb 28 2005 09:15:06

webspace ist übrigends bei salzburg online.

vielen donk.
semtex
Bearbeitet von semteX am 24.03.2005, 09:56

COLOSSUS

Administrator
GNUltra
Avatar
Registered: Dec 2000
Location: ~
Posts: 12071
Steht doch schon da - Safe Mode Restriction, daran ist das OS nicht (alleine) schuld.

SunOS ist btw nicht Linux. :)

semteX

begehrt die rostschaufel
Avatar
Registered: Oct 2002
Location: Pre
Posts: 14594
Zitat von COLOSSUS
Steht doch schon da - Safe Mode Restriction, daran ist das OS nicht (alleine) schuld.

Danke wusste ich vorher auch schon ;), löst aber mein problem ned :(

SunOS ist btw nicht Linux. :)
Mein fehler, zuerst geschrieben und dann erst in der phpinfo nachgeschaut.

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25423
mach mal ein chmod mit param 0777 beim 1. erstellten verz.

semteX

begehrt die rostschaufel
Avatar
Registered: Oct 2002
Location: Pre
Posts: 14594
danke fürn tipp, mach ich morgen mein zivikollege ist scho am schlafn und ich will ned den lapi herumzahn.

code also so:
Code: PHP
$chck=mkdir("dienstplaene/".$_POST["jahr"], "0777");

Und WÜRDE SICH BITTE ENDLICH JEMAND IM BEREICH ZELL AM SEE / SCHÜTTDORF WER WEHTUN? ICH FADISIER MICH JETZT SCHON SEIT 3 TAGEN :(

semteX

begehrt die rostschaufel
Avatar
Registered: Oct 2002
Location: Pre
Posts: 14594
mat das half leider nix :/ same error.

kleinerChemiker

Here to stay
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4282
ich bin mir nicht wirklich sicher, da ich safemode eigentlich nicht verwende. aber es gibt für safe mopde doch in der ini eine einstellung, wo man nen pfad angeben kann, in dem man normal arbeiten kann, oder irr ich da?safe_mode_exec_dir oder open_basedir?
Bearbeitet von kleinerChemiker am 24.03.2005, 10:49

semteX

begehrt die rostschaufel
Avatar
Registered: Oct 2002
Location: Pre
Posts: 14594
wobei -> no access to ini for me :/

wobei das was mich da so irritiert ist der fakt, dass der erste ordner problemlos erstellt werden kann, beim 2. ordner aber nix mehr geht. obwohl der ordner mit 777 ge CHmodet sein müsste.

-----------------------

SOLVED

Nach intensivstem gugln stellte sich heraus, dass beim SAFE Mode kein "unterordner" von php erzeugt werden kann. der "oberordner" muss vom FTP client kommen sonst geht nix.

work around => ftp Connection.

Code: PHP
function FtpMkdir($path, $newDir, $chmod=" 777 ") { 

$server='www.myserver.at'; // ftp server 
$connection = ftp_connect($server); // connection 


// login to ftp server 
$user = "ftpusername"; 
$pass = "password"; 
$result = ftp_login($connection, $user, $pass);  // check if connection was made 
if ((!$connection) || (!$result)) { 
return false; 
exit(); 
} else { 
ftp_chdir($connection, $path); // go to destination dir 
if(ftp_mkdir($connection,$newDir)) { // create directory 
ftp_site($connection, "CHMOD".$chmod.$newDir);
return $newDir; 
} else { 
return false;

} 
ftp_close($connection); // close connection 
} 
Bearbeitet von semteX am 30.03.2005, 09:53

atrox

in fairy dust... I trust!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
Zitat von semteX
Zitat von Deejay2k1
Außerdem ist es eher egal das FF mehr Sicherheitslücken hat, da es wenig Gegener hat wie der IE von MS...
if (!preg_match("/^[0-9]+$/",$_POST["jahr"])) die("someone is playing nasty tricks on me");

semteX

begehrt die rostschaufel
Avatar
Registered: Oct 2002
Location: Pre
Posts: 14594
Zitat von atrox
if (!preg_match("/^[0-9]+$/",$_POST["jahr"])) die("someone is playing nasty tricks on me");
thx, das ganze ist zwar eh htaccess geschützt aber schaden tuts nie.

Jehul

Big d00d
Avatar
Registered: Nov 2000
Location: lnz
Posts: 295
lies mal die php documentation für safemode.
unter safemode darfst du nur auf verzeichnisse zugreiffen, welche auch die userid (respektive gruppenid) des ausgeführten scripts haben.

d.h. userid des auszuführenden scripts = 66995 (wahrscheinlich dein ftp-user)
von dir erstellte verzeichnisse werden aber vom apache aus erstellt (wahrscheinlich user id 60001).
somit darfst du keine files/ordner in dein selbst erstelltes verzeichnis schreiben.
ist ein gängiges problem bei safemode.

um das zu umgehen müsstest den owner des verzeichnisses ändern:

etwas wie
Code: PHP
if(!is_dir("dienstplaene/".$_POST["jahr"])) { 
  $chck=mkdir("dienstplaene/".$_POST["jahr"]); 
  system("chown user.gruppe dienstplaene/".$_POST["jahr"]);
}

das geht natürlich nur, wenn der system befehl nicht gesperrt ist.


EDIT: @semtex: hab deinen edit nicht gelesen ;)
aber der ftp workaround ist natürlich genial.
aber kein vernünftiger programmier stiel :>
Bearbeitet von Jehul am 28.03.2005, 23:12

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Zitat von Jehul
lies mal die php documentation für safemode.
unter safemode darfst du nur auf verzeichnisse zugreiffen, welche auch die userid (respektive gruppenid) des ausgeführten scripts haben.

d.h. userid des auszuführenden scripts = 66995 (wahrscheinlich dein ftp-user)
von dir erstellte verzeichnisse werden aber vom apache aus erstellt (wahrscheinlich user id 60001).
somit darfst du keine files/ordner in dein selbst erstelltes verzeichnis schreiben.
ist ein gängiges problem bei safemode.

um das zu umgehen müsstest den owner des verzeichnisses ändern:

etwas wie
Code: PHP
if(!is_dir("dienstplaene/".$_POST["jahr"])) { 
  $chck=mkdir("dienstplaene/".$_POST["jahr"]); 
  system("chown user.gruppe dienstplaene/".$_POST["jahr"]);
}

das geht natürlich nur, wenn der system befehl nicht gesperrt ist.


EDIT: @semtex: hab deinen edit nicht gelesen ;)
aber der ftp workaround ist natürlich genial.
aber kein vernünftiger programmier stiel :>
führst du all deine Scripts als root aus? :D

Jehul

Big d00d
Avatar
Registered: Nov 2000
Location: lnz
Posts: 295
@watchout: du meinst wegen chown?
ich habs zwar nicht getestet. aber des wär mein lösungsansatz gewesen :)

im google hab ich auch noch leute gefunden, die mittels cronjob alle 5 mins über die ordner mit chown drüberfahren ;>

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Zitat von Jehul
@watchout: du meinst wegen chown?
ich habs zwar nicht getestet. aber des wär mein lösungsansatz gewesen :)

im google hab ich auch noch leute gefunden, die mittels cronjob alle 5 mins über die ordner mit chown drüberfahren ;>
Also, php würd ich aber trotzdem auf keinen Fall als root ausführen... :D

Da find ich den ftp-Ansatz noch am besten... Ausser natürlich php unter diesem User auszuführen, wie ja auch der safemode gedacht ist. Das ist daher ein eindeutiger Pfusch vom Provider, und dem hätt' ich schon mal paar "nette" E-Mails geschickt deswegen...

semteX

begehrt die rostschaufel
Avatar
Registered: Oct 2002
Location: Pre
Posts: 14594
Zitat von watchout
Also, php würd ich aber trotzdem auf keinen Fall als root ausführen... :D

Da find ich den ftp-Ansatz noch am besten... Ausser natürlich php unter diesem User auszuführen, wie ja auch der safemode gedacht ist. Das ist daher ein eindeutiger Pfusch vom Provider, und dem hätt' ich schon mal paar "nette" E-Mails geschickt deswegen...

hm. jo das könnt ich natürlich auch noch tun.

das mitm ftp ist zwar so ne lösung die ganz fein funkt aber wenn wer mal das passwort ändert ist schicht im schacht.
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz