norrodar
Goto Top

Windows Server 2008, PHP, IIS und die Rechte

ein php-script soll den Ordnerinhalt auslesen, hat aber anscheinend keine Berechtigung dafür

Hallöle,
ich bekomm es irgendwie nicht mit den Rechten gebacken - tut mir leid.

Also, als erstes habe ich ein simples PHP-Skript, welches im Ordner "D:\InetPub\vhosts\blabla.de\httpdocs" liegt.
Das Skript soll einfach nur einen Ordner auf erster Ebene auslesen und den inhalt auflisten:
 <?php

$pfad = "D:\\Temp\\BAK";  

$ausgabe = @opendir($pfad) or die("$pfad do not exist");  

while ($datei = readdir($ausgabe))
{
	if(($datei != ".") and ($datei != "..")){  
		echo "<a href=\"$datei\">$datei</a><br>";  
	}
}

closedir($ausgabe);

?> 

In dem Ordner "D:\InetPub\vhosts\blabla.de\httpdocs", wo das Skript drin liegt, klappt alles wunderbar, auch die website selbst. Also ich geb als $Pfad "D:\\InetPub\\vhosts\\blabla.de\\httpdocs" an und er listet alles auf.
Wenn ich allerdings ein "externes" Verzeichnis durchforsten will, z.B. "D:\Temp\BAK", streikt das skript und spuckt mir die Fehlermeldung "D:\Temp\BAK do not exist" aus.

Ich habe auf das Verzeichnis "D:\Temp\BAK" auch schon für "Jeder" Vollzugriff gegeben, klappt nicht. =/
Lokal mit meiner Anmeldung als admin klappt es aber.

Ich weiß nicht weiter, hoffentlich jemand von Euch - Dankeschön schonmal! =))
LG, Nira

Content-Key: 134464

Url: https://administrator.de/contentid/134464

Printed on: April 20, 2024 at 00:04 o'clock

Mitglied: 48507
48507 Jan 27, 2010 at 11:41:12 (UTC)
Goto Top
"Jeder" Vollzugriff auch für D:\Temp (Vererbung)? Der IIS läuft normalerweise als IUSR_COMPUTERNAME. Diesem User musst du die entsprechenden Rechte geben.
Member: Norrodar
Norrodar Jan 27, 2010 at 11:51:36 (UTC)
Goto Top
ha! wunderbar, es klappt! =)

Aber hat jetzt nicht "Jeder" auch zugriff auf "D:\Temp"? das soll nicht und darf nicht, darf nur "D:\temp\BAK\" einsehbar sein.
Mitglied: 48507
48507 Jan 27, 2010 at 11:55:07 (UTC)
Goto Top
Zitat von @Norrodar:
ha! wunderbar, es klappt! =)

Aber hat jetzt nicht "Jeder" auch zugriff auf "D:\Temp"? das soll nicht und darf nicht, darf nur
"D:\temp\BAK\" einsehbar sein.

Deswegen immer den IUSR verwenden!
Member: Norrodar
Norrodar Jan 27, 2010 at 11:59:17 (UTC)
Goto Top
ja das ist klar, dann nehme ich halt den selben Text und ersetze "Jeder" durch "IUSER". face-smile
Werds gleich testen, glaub wir reden etwas aneinander vorbei ;)
Mitglied: 48507
48507 Jan 27, 2010 at 12:06:39 (UTC)
Goto Top
Kann sein. Du kannst natürlich den Zugriff einschränken, indem du nur den lokalen oder Domänen-Benutzern das Leserecht auf dieses Verzeichnis gewährst. Allerdings musst dann auch die Windows-Authentifizierung im IIS für dieses Verzeichnis einschalten. Siehe hier: http://support.microsoft.com/kb/324276/de
Member: Norrodar
Norrodar Jan 27, 2010 at 13:07:17 (UTC)
Goto Top
Also Zusammenfassung:
Wenn ich mit dem Script auf "D:\temp\BAK" zugreifen will, muss ich dem Ordner temp (D:\temp) die entsprechenden Rechte geben (IUSER muss Lesen+Ordnerinhalt anzeigen haben).
Das Script selbst kann dann aber nicht den Ordner temp auslesen, sprich nicht die Dateien anzeigen, die dort enthalten sind. Gibt man aber einen anderen Unterordner von temp an, so kann das script auch diese anderen unterordner auslesen. (der Vererbung sei dank).

Ich jedoch möchte das ganze nur auf den Unterordner BAK beschränken.
Muss ich dazu wirklich jedem anderen Ordner die rechte entziehen? das wäre ein heiden Aufwand =/

Danke bis hierhin spytnik face-smile
Nira
Mitglied: 48507
48507 Jan 27, 2010 at 13:35:45 (UTC)
Goto Top
Du kannst bei den anderen Unterordnern die Vererbung von "oben", also d:\temp, deaktivieren. Bei einem Temp-Verzeichnis macht es aber keinen Sinn, da dort ständig irgendwelcher Müll abgelegt wird. Wie wäre es mit d:\BAK?
Member: Norrodar
Norrodar Jan 27, 2010 at 13:50:38 (UTC)
Goto Top
Jap, hast du richtig erkannt und nein, die Verzeichnisstruktur muss so bleiben wie sie ist - leider.

Also als Notlösung gehts, aber eine richtige fällt mir jetzt nicht ein.
Man könnte höchstens ein Virtuelles Verzeichnis auf d:\temp\bak legen.
Hab das grad getestet, aber das geht auch wieder nicht - denke der brauch wieder etwas von oben.

Aber irgendwie entzieht sich das meiner Logik.
Der Ordner hat die Berechtigungen, sich preiszu geben. Wieso wird dann noch eine ebene höher verlangt?
Mitglied: 48507
48507 Jan 27, 2010 at 15:05:35 (UTC)
Goto Top
Versuche es über eine Freigabe. Also alle Berechtigungen rückgängig machen, d:\temp\bak als bak freigeben und die entsprechenden Berechtigungen einstellen: Auf der NTFS-Ebene dem IUSR für d:\temp\bak das Leserecht geben (ohne die Vererbung von oben abzuschalten) und auf der Freigabe-Ebene dasselbe (Jeder entfernen).

$pfad = "D:\\Temp\\BAK"; müssten dann halt $pfad = "\\\servername\\bak"; heißen.
Member: Norrodar
Norrodar Jan 27, 2010 at 15:56:27 (UTC)
Goto Top
nö, geht leider auch nicht face-sad