2010-07-08 6 views
0

Je crée un site Web dans IIS 7.5 (avec Windows 7) qui doit être capable de créer d'autres sites Web. J'ai écrit du code qui utilise Microsoft.Web.Administration pour créer le site Web par programmation, et cela fonctionne très bien quand je l'exécute en tant qu'administrateur.Comment autoriser le site Web à créer d'autres sites Web dans IIS 7.5?

Maintenant, j'essaie d'utiliser le même code dans le contexte de mon application web. Il échoue avec l'erreur

Error: Cannot read configuration file due to insufficient permissions

pour le fichier Redirection.config (que je comprends est situé dans% windir%/System32/Inetsrv/config).

J'ai essayé de créer un nouveau pool d'applications pour ce site Web spécifique, sous l'identité IIS AppPool [AppPoolName]. J'ai ensuite essayé d'accorder cette autorisation d'identité pour éditer la configuration IIS en utilisant

ManagementAuthorization.Grant(@"IIS AppPool\MyAppPool", "Default Web Site", false); 

mais je reçois toujours la même erreur.

Que dois-je essayer d'autre?

Répondre

1

Cette approche n'est probablement pas la plus sage du point de vue de la sécurité. Si ce site est piraté, vos attaquants seront en mesure d'interférer avec ces fichiers (sans but précis) ou simplement de les supprimer.

La façon dont nous avons abordé cette question consistait à séparer les tâches de création de sites Web en un service Windows fonctionnant avec les droits appropriés pour effectuer ces activités. Dans ce service est un point de terminaison à distance (bien que ces jours vous voudriez probablement utiliser WCF).

Nous avons ensuite créé un assembly proxy signé et enregistré dans le GAC (il doit également être marqué avec l'attribut APTCA si vous utilisez moins de confiance totale). Cet assembly transmet les appels pertinents au point de terminaison distant dans le service Windows à partir de l'application/service Web d'administration.

Ceci nous permet d'exécuter le site admin au moins en mode privilège et en mode confiance partielle. La portée de ce qui peut être fait au moyen de tâches d'administration de site est limitée quelque peu par la fonctionnalité exposée dans l'application de service Windows.

Cette technique est connue sous le nom de sandboxing.

+0

Merci: J'avais pensé à l'approche du bac à sable, mais j'espérais qu'il y avait une approche raisonnablement sécurisée impliquant moins de travail! –

+0

@samuel - ouais c'est un petit peu compliqué de tout faire fonctionner la première fois (ça m'a pris environ une demi-journée), mais les résultats en valent la peine. Aussi, le livre de sécurité de Dominick Baier vous explique à peu près tout. Il vaut la peine d'acheter seulement pour ce chapitre: http://www.microsoft.com/learning/en/us/book.aspx?ID=9989&locale=en-us. – Kev

+0

Eh bien, je viens de passer les 2 dernières heures sur l'approche du bac à sable et ça semble avoir fonctionné! Il était en fait assez simple en utilisant WCF et TopShelf (http://topshelf-project.com) pour héberger le service Windows –

0

J'ai trouvé un moyen de le faire, mais j'aimerais beaucoup entendre une opinion d'expert sur la question de savoir si c'est une bonne chose à faire.

J'ai accordé des autorisations de modification et d'écriture pour le compte IIS AppPool \ MyAppPool à% WinDir%/System32/inetsrv/config et les trois fichiers .config à l'intérieur.