Schreibzugriff auf JEDEN funktioniert, IUSR, IIS_IUSRS, DefaultAppPool funktioniert nicht. Warum?

9

Okay. Hier versuchen wir, eine Classic ASP-Website unter IIS 7.5 in Windows Server 2008 R2 einzurichten. Unter dem Stammverzeichnis der Website befindet sich ein Ordner mit dem Namen dbc. In dieser Datei werden bestimmte Informationen gelesen und geschrieben, während jede Seite verarbeitet wird.

Das Problem ist, wenn ich IUSR-Schreibberechtigungen erteile und IIS_IUSRS-Schreibberechtigungen oder DefaultAppPool-Schreibberechtigungen erhalte, wird der Zugriff auf den Pfad 'E: .. \ websiteroot \ dbc \ filename.txt' verweigert.

Aber wenn ich JEDEM Schreibzugriff auf diesen dbc-Ordner erteile, erhalte ich keine Fehlermeldung, alles scheint perfekt zu sein.

Weitere Informationen: Die Website wird im klassischen Pipeline-Modus ausgeführt. Die anonyme Authentifizierung ist aktiviert (möglicherweise ist sie die einzige aktivierte Authentifizierung). Ich habe die anonyme Authentifizierung mithilfe des IUSR-Kontos sowie der Anwendungspoolidentität versucht. In meinem Fall ist ApplicationPoolIdentity die Identität für die Authentifizierung der Website. Wir verwenden ein COM + für Datei-E / A. Und Classic ASP Server.CreateObject, um ein Objekt daraus zu instanziieren. Der COM + wird als Netzwerkdienst ausgeführt.

Gedanken? Ich möchte JEDEM keine Schreibberechtigung erteilen. Vermisse ich etwas

Gelöst: Hier ist was ich getan habe.

Meine Website mit dem Namen CipherDemo wurde unter einer AppPoolIdentity in IIS 7.5 ausgeführt, die von Identity IIS AppPool \ CipherDemo gefunden werden konnte. Ich habe ICACLS verwendet, um RW-Berechtigungen für diesen Ordner zu erteilen.

und das COM +, das tatsächlich die Datei-E / A ausführte, wurde unter der Netzwerkdienstidentität ausgeführt. Als ich Process Monitor zum Verfolgen des Zugriffsverweigerungsfehlers verwendete, stellte sich heraus, dass der Netzwerkdienst nur über eine Leseberechtigung für diesen Ordner verfügt.

Ich habe ICACLS "Ordnername" / grant: r "NT AUTHORITY \ NETWORKSERVICE" :( OI) (CI) RXW / T verwendet, um Schreibzugriff auf diesen Ordner zu gewähren.

Und es gelöst.

Ich hatte die Absicht, dass, da die Website als CipherDemo Identity ausgeführt wird, dies das Konto ist, mit dem über COM + auf die Datei zugegriffen wird. Es ist jedoch peinlich herauszufinden, dass COM + immer noch an seinen eigenen Identitätsgrenzen funktioniert.

gmaran23
quelle

Antworten:

4

Unter IIS 7.5 (und optional in IIS 7) werden alle Worker mit der Anwendungspoolidentität ausgeführt: Benutzer "IIS AppPool * PoolName *".

Gewähren Sie diesem Benutzer Zugriff und nicht jedem (Sie müssen den Namen in die Dialoge zur Auswahl der Identität eingeben - er wird in der Suchfunktion nicht angezeigt).

Auf iis.net gibt es eine sehr nützliche Seite , die die Dinge viel detaillierter behandelt.

Beachten Sie auch: unter IIS7 (Server 2008):

  • In den erweiterten Einstellungen legen Sie die Identität des App-Pools für jeden App-Pool fest.
  • Es gibt keine GUI-Unterstützung, daher benötigen Sie die Befehlszeile, um Berechtigungen festzulegen ( icacls.exe).

Schließlich Auswahl SQL Server Identität weiß nicht , über AppPool Identität entweder: Nutzung CREATE LOGINund CREATE USERzunächst danach die GUI kann auf Erteilung Rollen verwendet werden , usw.

Richard
quelle
@ Richard - Ja. Danke für die schnelle Antwort. msdn-Foren sind heutzutage sehr nutzlos. Komm zurück ... Ich habe ein paar Tage lang die IIS.net-Website und den Serverfehler durchsucht. Ich verwende die Standardidentität des Anwendungspools in meinem IIS 7.5 / Win Server 2008 R2. Daher habe ich die Berechtigungen IIS APPPOOL \ DefaultAppPool Wite für meinen Ordner 'dbc' erteilt. Außerdem habe ich IUSR- und IIS_IUSRS-Schreibberechtigungen für diesen Ordner erteilt. Es würde immer noch nicht funktionieren, bis ich JEDEM Schreibberechtigungen gebe. Ich weiß, dass mir etwas fehlt. Können Sie mir helfen?
Gmaran23
@ gmaran23: Wenn die offensichtlichen Schritte nicht funktionieren, verwende ich Process Monitor , um genau zu sehen, was fehlschlägt (und oft fordert die geöffnete Datei zu viel Zugriff, ich habe die ACL nicht richtig eingestellt oder so sonst hat die Datei geöffnet).
Richard
@Richard - Ich führe Lese- / Schreibvorgänge mit einem Dateireader in c # mit FileMode.Open, FileAccess.ReadWrite aus. - Ich denke, dieser Teil ist gut. Bei etwas anderem ist die Datei geöffnet - ich denke, dies könnte ausgeschlossen werden, da keine Möglichkeiten dafür bestehen. Mit der ACL stimmt etwas nicht. Ich werde das überprüfen und hier posten. Versuchen Sie auch den Prozessmonitor. Danke für die Hilfe :)
gmaran23
@ gmaran23: Wenn es nicht funktioniert, nimm nicht an, dass du etwas weißt, teste es immer. Ich habe im Laufe der Jahre zu viel Zeit verschwendet, weil ich weiß, dass etwas wahr ist oder nicht - allzu oft habe ich mich geirrt.
Richard
1
@ gmaran23: Verwenden Sie Tools, um genau zu sehen, was los ist: Sie raten und arbeiten die Probleme nicht systematisch durch. (1) Verwenden Sie den Prozess-Explorer, um zu bestätigen, dass die Datei nicht geöffnet ist. (2) Verwenden Sie Process Monitor, um zu sehen, welcher Zugriff von welcher Identität angefordert wird (und Sie haben die richtige Datei). (3) Überprüfen Sie das Ergebnis von # 2 anhand der ACL in der Datei (und öffnen Sie die erweiterten Sicherheitseigenschaften, um alle Details zu erfahren). (4) Passen Sie eine Sache an und gehen Sie zu # 1, bis sie behoben ist. Wenn Sie nach einigen Iterationen immer noch nicht weiterkommen, erweitern Sie das Q mit allen Details (und seien Sie genau).
Richard
5

Sie können das Konto über die NTFS-GUI hinzufügen, indem Sie es direkt eingeben. Der Name hat das Format von IIS APPPOOL\<<app pool name>>z IIS APPPOOL\DefaultAppPool. (Siehe diesen Microsoft-Supportartikel. )

Eine alternative Lösung: Ich habe das Konto "Netzwerkdienst" als Benutzer des Anwendungspools verwendet und ihm die Schreibberechtigung erteilt.

splattne
quelle
Richtig, dieser Tipp ist gut, aber das habe ich schon gemacht. Ich verwende die Standardeinstellung "ApplicationPoolIdentity" für den Anwendungspool. Und für den Ordner 'dbc' habe ich bereits Schreibberechtigungen für IIS AppPool \ DefaultAppPool erteilt. Aber es würde immer noch nicht funktionieren, bis ich JEDEM die Erlaubnis zum Schreiben gebe.
Gmaran23
1

Wenn Sie dem bestimmten Benutzer nur die Berechtigung zum Schreiben von Ordnern erteilen möchten, sollten Sie auch die "Anonyme Benutzeridentität" der Site in "Bestimmter Benutzer" und nicht in "Anwendungspoolidentität" ändern.

user2147802
quelle