Změna v IIS 7.0 po aplikaci W2008 SP2

Neměl jsem poslední měsíce moc času na nové příspěvky, takže jsem to moc nepozoroval. Posledních pár dní si však říkám, co se to kruci s tím blogem děje? Je to pomalé, nefunguje odmazávání komentářů, nefunguje dobře jejich přidávání. Potřeboval jsem změnit jeden parametr v konfiguraci BlogEngine.NET a opět se objevila ta hláška “500 – Internal Server Error”. To snad není možný. Nové články přidávat jdou, komentáře také. Takže kontrola web.config souboru, kontrola ACL na adresáři App_Data, ne prostě je vše ok.

Jdu do konfigurace IIS, rozklepnu Application Pools, koukám, že Managed Pipeline Mode je nastaven správně na Integrated, pro jistotu znovu kontrola web.configu a správnosti migrace <handlers> a <modules> při zapnutém validateIntegratedModeConfiguration=”true”. Fakt je všechno správně.

Takže ze zoufalství začínám přemýšlet a dohledávat, co jsem kdy na serveru dělal. Nic, po přesunu na W2008 x64 SP2 jsem pouze aplikoval hotfixy a žádný zásadní zásah neprováděl. Zkrátím to – problém je rovnou v tom SP2. Akorát jsem si toho při rozjíždění blogu nevšiml a díky tomu, že se ta chyba neprojevuje vždy (což nechápu), jsem neměl moc šancí na to přijít.

V Set Application Pool Defaults… vidím, že Process Model\Identity mám nastaveno na NetworkService.

Tak si říkám, že pro jistotu ještě prozkoumám Advanced Settins aplikačního poolu, v němž mi běží BlogEngine.NET. A to byla trefa do černého. Nechápu, kde se vzala, nicméně identita je nastavena na mně nic neříkající ApplicationPoolIdentity. Divné, práva na adresář s aplikací mám nastavené pouze pro System a Administrators Full Control, Users a Network Service jako Read&Execute a pouze pro podadresář App_Data má Network Service oprávnění Change. No nic, přepnu na Network Service, provedu IISRESET – a vše jede jako z praku! Fungují všechny funkce, které jsem popisoval v prvním odstavci jako problémové.

Ponořil jsem se tedy do hledání, co to ta ApplicationPoolIdentity vlastně je. Sranda je, že je to popisováno jako novinka Windows 7 a Windows Serveru 2008 R2 – ale ten já na serveru nemám. Až v komentářích pod nalezeným článkem jsem našel příspěvek nějakého dobrodince, který vysvětluje, že tuto funkcionalitu přináší už SP2 pro W2008.

Goodbye Network Service!
What’s New in Service Accounts (Technet článek a i ten blbě tvrdí, že je to záležitost R2)

První článek popisuje i způsob, jakým nastavovat práva. Tím víc nechápu, jak to, že mi ten blog částečně fungoval (a zapisovalo se do App_Data), když jsem měl práva nastavena pouze pro “NTAuthority\Network Service” a nikoliv pro “IIS APPPOOL\jmeno_meho_app_poolu”.

Další otázka, která se vkrádá – jak se vůbec do konfigurace toho mého aplikačního poolu tento nesmysl dostal, když jsem na začátku psal o Set Application Pool Defaults…? Inu, pravděpodobně bugík. Schválně si zkusím vytvořit nový aplikační pool nazvaný pokusny. Vytvořím, vyberu jej, stisknu Advanced Settings… a kuk, kouká na mne ApplicationPoolIdentity :) Pěkné a zatraceně záludné.

A ještě perlička na závěr – i kdybych chtěl ApplicationPoolIdentity používat, narazím na další problém. Jak přidat práva na adresáře. Jak je hezky popsáno zde, Vista SP2 a W2008 SP2 neumožňují výběr IIS APPPOOL identit přes GUI. Jedinou šancí je nastavení přes ICACLS.

Dovolím si citovat Anil Ruia (Senior Software Design Engineer, IIS Core Server team):

“This is unfortunately a limitation of the object picker on ws08/vista - as several people have discovered it already, you can still manipulate the ACL for the app-pool identity using command line tools like icacls.”

Kde já to jenom slyšel, že nové Service Packy nebudou přinášet novou funkcionalitu? :)

Prosím kdyby toto četl někdo fundovaný, kdo by mi dokázal objasnit, jak je možné, že i s chybným nastavením identity aplikačního poolu a nedostatečně nastavenými právy na adresář, mi tento blog (ASP.NET 2.0 aplikace) “tak trochu fungoval”, ať se mi prosím ozve. Já to prostě nechápu.