L'accès en écriture à TOUT LE MONDE fonctionne, IUSR, IIS_IUSRS, DefaultAppPool ne fonctionne pas. Pourquoi?

10

D'accord. Ici, nous essayons de configurer un site Web ASP classique sur IIS 7.5 dans Windows Server 2008 R2. Il y a un dossier nommé dbc sous la racine du site Web et il a un fichier qui est utilisé pour lire et écrire certaines informations pendant que chaque page est traitée.

Le problème est, si j'accorde des autorisations d'écriture IUSR et des autorisations d'écriture IIS_IUSRS ou des autorisations d'écriture DefaultAppPool, j'obtiens le "Accès au chemin d'accès" E: .. \ websiteroot \ dbc \ filename.txt "est refusé"

Mais si j'accorde à TOUT LE MONDE l'accès en écriture sur ce dossier dbc, je ne reçois aucune erreur, tout semble parfait.

Plus d'informations: Le site Web fonctionne en mode pipeline classique, l'authentification anonyme est activée (c'est peut-être la seule authentification activée). Et j'ai essayé l'authentification anonyme en utilisant le compte IUSR ainsi que l'identité du pool d'applications. Dans mon cas, ApplicationPoolIdentity est l'identité pour l'authentification du site Web. Nous utilisons un COM + pour les E / S de fichiers. Et Classic ASP Server.CreateObject pour instancier un objet hors de lui. COM + fonctionne comme un service réseau.

Pensées? Je ne veux pas accorder la permission d'écriture à TOUS. Suis-je en train de manquer quelque chose?

RESOLU: Voici ce que j'ai fait.

Mon site Web nommé CipherDemo fonctionnait sous un AppPoolIdentity dans IIS 7.5, qui pouvait être localisé par Identity IIS AppPool \ CipherDemo. J'ai utilisé ICACLS pour accorder des autorisations RW sur ce dossier.

et le COM + qui effectuait réellement les E / S de fichier s'exécutait sous l'identité de service réseau. Lorsque j'utilisais Process Monitor pour tracer l'erreur d'accès refusé, il s'est avéré que le service réseau n'a qu'une autorisation de lecture sur ce dossier.

J'ai utilisé ICACLS "foldername" / grant: r "NT AUTHORITY \ NETWORKSERVICE" :( OI) (CI) RXW / T pour accorder l'accès en écriture sur ce dossier.

Et je l'ai résolu.

J'avais l'intention que, puisque le site Web fonctionne en tant qu'identité CipherDemo, ce sera le compte qui sera utilisé pour accéder au fichier via COM +. Mais il est gênant de découvrir que le COM + fonctionnerait toujours sur ses propres limites d'identité.

gmaran23
la source

Réponses:

5

Sous IIS 7.5 (et éventuellement dans IIS 7), tous les travailleurs s'exécutent avec l'identité du pool d'applications: utilisateur "IIS AppPool * PoolName *".

Accordez l'accès à cet utilisateur plutôt qu'à Tout le monde (vous devrez taper le nom dans les boîtes de dialogue de sélection d'identité - il n'apparaîtra pas dans la fonction de recherche).

Il y a une page très utile sur iis.net qui couvre les choses beaucoup plus en détail.

Notez également: sous IIS7 (Server 2008):

  • Vous définissez l'identité du pool d'applications par pool d'applications dans les paramètres avancés.
  • Il n'y a pas de prise en charge de l'interface graphique, vous aurez donc besoin de la ligne de commande pour définir les autorisations ( icacls.exe).

Enfin, la sélection d'identité de SQL Server ne connaît pas non plus l'identité du pool d'applications: utilisez CREATE LOGINet CREATE USERinitialement, après cela, l'interface graphique peut être utilisée pour accorder des rôles, etc.

Richard
la source
@Richard - Oui. Merci pour la réponse rapide. Les forums msdn sont très inutiles ces jours-ci. Revenez en arrière ... J'ai bousculé le site Web IIS.net et la défaillance du serveur pendant quelques jours. J'utilise l'identité du pool d'applications par défaut dans mon serveur IIS 7.5 / Win 2008 R2. Et donc, j'ai accordé les autorisations IIS APPPOOL \ DefaultAppPool Wite sur mon dossier 'dbc'. De plus, j'ai accordé des autorisations d'écriture IUSR et IIS_IUSRS sur ce dossier. Cela ne fonctionnerait toujours pas jusqu'à ce que je donne à TOUS les autorisations d'écriture. Je sais qu'il manque quelque chose. Pouvez-vous m'aider?
gmaran23
@ gmaran23: Si les étapes évidentes n'ont pas fonctionné, j'utilise Process Monitor pour voir exactement ce qui échoue (et souvent ce sera soit le fichier ouvert demandera trop d'accès, j'ai échoué à configurer correctement l'ACL, soit quelque chose sinon le fichier est ouvert).
Richard
@Richard - Je fais des opérations de lecture / écriture avec un lecteur de fichiers en c # avec FileMode.Open, FileAccess.ReadWrite. - Je suppose que cette partie est bonne. Quelque chose d'autre a le fichier ouvert - je suppose que cela pourrait être exclu, car aucune possibilité de celui-ci .. Il y a quelque chose de mal avec l'ACL. Je vais vérifier cela et le poster ici. Essayez également le Process Monitor. Merci pour l'aide :)
gmaran23
@ gmaran23: Si cela ne fonctionne pas, ne supposez pas que vous savez toujours tester. J'ai perdu trop de temps au fil des ans parce que je sais que quelque chose était ou n'était pas vrai - trop souvent j'avais tort.
Richard
1
@ gmaran23: Utilisez des outils pour voir exactement ce qui se passe: vous devinez et ne traitez pas systématiquement les problèmes. (1) Utilisez Process Explorer pour confirmer que le fichier n'est pas ouvert. (2) Utilisez Process Monitor pour voir quel accès est demandé et par quelle identité (et vous avez le bon fichier). (3) Vérifiez le résultat de # 2 par rapport à l'ACL sur le fichier (et ouvrez les propriétés de sécurité avancées pour plus de détails). (4) Ajustez une chose et passez à # 1 jusqu'à ce qu'elle soit fixe. Si vous êtes toujours bloqué après quelques itérations, développez le Q avec tous les détails (et soyez précis).
Richard
5

Vous pouvez ajouter le compte via l'interface graphique NTFS en le tapant directement. Le nom est au format IIS APPPOOL\<<app pool name>>, par exemple IIS APPPOOL\DefaultAppPool. (voir cet article de support Microsoft )

Une solution alternative: j'ai utilisé le compte "Service réseau" en tant qu'utilisateur du pool d'applications en lui accordant une autorisation d'écriture.

splattne
la source
Correct, cette astuce est bonne, mais je l'ai déjà fait. J'utilise le "ApplicationPoolIdentity" par défaut pour le pool d'applications. Et pour le dossier «dbc», j'ai déjà accordé des autorisations d'écriture pour IIS AppPool \ DefaultAppPool. Mais cela ne fonctionnerait toujours pas jusqu'à ce que j'accorde à TOUS les droits d'écriture.
gmaran23
1

Si vous souhaitez uniquement accorder l'autorisation d'écriture de dossier à l'utilisateur spécifique, vous devez également remplacer «identité d'utilisateur anonyme» du site par «utilisateur spécifique», et non «identité du pool d'applications».

user2147802
la source