Autor: Libor Bešenyi
Osobne som potreboval rozbehať dva nezávisle ISAPI systémy, ktoré mali DCOM spojenie s aplikačným serverom a pracovali s bežnými I/O operáciami OS. Tento dokument je vlastne zozbieraním všeobecných problémov a ich riešení, ktoré za ten čas nastali.
Nebudem tu ale vysvetľovať základné veci ohľadom http protokolu, prípadne problematike webových serverov! Taktiež sa nechcem hádať, o tom, ktorý webový server je lepší IIS / Apache apod. Tento článok je proste o IIS a je smerovaný ľuďom, ktorí majú problémy s danou službou.
[WINXP
Najsamprv sa ubezpečme sa, či služba v systéme už nie je nainštalovaná. V nástrojoch pre správu (Štart – Nastavenia – Ovládacie panely) nájdime ikonu služby IIS. Ak sme to nenašli, je potrebné službu doinštalovať a na to budeme potrebovať inštalačné CD WinXP[1] bežiaceho na danom PC.
Ak máme inštalačné CD, IIS sa doinštaluje ako jedna zo súčastí programov pre Windows. Vstúpme do Ovládacích panelov (Štart – Nastavenia – Ovládacie panely) a zvolíme si Pridať alebo odstrániť programy. Vyberieme si v ľavom Pridať alebo odstrániť súčasti systému Windows:
V zobrazenom dialógovom okne nájdeme a zaškrtneme položku Internet Information Services (IIS) a klasickým „user friendly“ spôsobom aplikáciu nainštalujeme (Ďalej, Ďalej, Ďalej...).
WINXP]
Spustime si konfigurátor služby IIS (Štart – Nastavenia – Ovládacie panely – Nástroje pre správu – Internet Information Services).
Virtuálny adresár „vytvára“ cestu v URL ku dátam, ktoré sú umiestnené niekde na disku. Takže, ak web máme na mieste C:Web, tak URL nemusí k súboru inedx.html byť práve http://localhost/web/[2]. Nemala by byť vlastne vôbec viditeľná vnútorná hierarchia servera, preto virtuálny adresár „supluje“ túto cestu a odkazuje na fyzické umiestnenie na disku „interne“.
V ľavej časti okna sa „doklikajme“ po strome až ku Default Web Site, kde si vyberme možnosť nového virtuálneho adresára. Po zvolení sa nás opýta systém na názov:
Zobrazí sa nám sprievodca vytvorením. Úvodnú obrazovku „odklikneme“ a v druhej zadáme názov aliasu (teda adresára. Teraz musíme nastaviť miesto, kde sa fyzicky nachádzajú súbory na disku. Napr. C:!Web:
Obrázok 6 Výber fyzického umiestnenia súborov webu.
Potom už len odklikajme nastavenia ďalej.
Ak sme úspešne rozbehali virtuálny adresár, teraz potrebujeme zabezpečiť aj korektné vlastnosti aplikácie, ktorú chceme prevádzkovať na danom serveri. Vstúpme tedado IIS nastavení (Štart – Nastavenia – Ovládacie panely – Nástroje pre správu – Internet Information Services).
Vyberme vlastnosti v našom virtuálnom adresári.
Ak chceme, aby sme mohli zobrazovať súbory z adresára, určite musíme povoliť čítanie. V prípade, že pracujeme s nejakým skriptom (alebo ISAPI / CGI) a aplikácia zapisuje do súboru (logovanie, nastavenia apod.), povolíme aj zápis.
V prípade, že sa jedná o ISAPI aplikáciu, nastavíme „spúšťateľnosť“ a ochranu súboru akú potrebujeme. Napríklad najnižšia ochrana bola počas vývoja použitá, pretože niektoré praktiky Delphi, umožňovali krokovanie v zdrojovom kóde (Delphi 7 je v porovnaní s Visual Studiom dosť biedne pri programovaní webových riešení). Stredná úroveň nie je zlá, pretože ak sa nám podarí odpáliť službu (napr. aplikácia načítava DLL inej verzie – zmenil sa interface, tak to môže pekne položiť službu s hláseniami typy „Access violation“). Pri strednej úrovni vieme zo správcu úloh odpaľovať bezpečne proces bez spôsobenia havárie počítača (reštart), resp. služby (opätovné nenabehnutie).
Ak chceme prechádzať obsah adresára typu „Index Of“, tak povolíme aj túto možnosť.
V prvom rade si nastavme prechádzanie adresára. Ak teda máme virtuálny adresár pomenovaný pokus, otvorme si prehliadač a do URL napíšme http://localhost/pokus . Mal by sa zobraziť obsah fyzického adresára:
Ak sa to nestalo, ale zobrazila sa chyba 401.3, alebo 401.2 tak to preto, lebo nemáme oprávnenie na daný súbor. Prepnime sa do konfigurácie IIS: Nastavenia - Nástroje pre správu - Internetová informačná služba. Vyrolujme si konkrétny virtuálny adresár a prvým tlačidlo vynúťme zobrazenie pomocného menu. Zvoľme si položku oprávnenia:
[WINXP:
Ak nemáme „oprávnenie meniť oprávnenia“, t.j. v kontextovom menu sa nenachádza „Oprávnenie“, tak pravdepodobne máme Windows XP s „defaultným“ nastavaním zdieľania (pravdepodobne sa nastavuje s „WinXP témou“, ak sa napr. pridá nový užívateľ, ktorý má vzhľad desktopu nastavený na iný, ako „klasický“, tak sa pre všetkých užívateľov (admin) nastavuje toto obmedzenie).
Zapneme si prieskumníka a „vlezieme“ do Nástroje - Možnosti priečinka, kde odškrtneme možnosť v záložke Zobrazenie Použiť jednoduché zdieľanie súborov. Teraz máme prístup ku „zložitému“ zdieľaniu...
WINXP]
Ak môžeme meniť oprávnenia (dajú sa navodiť aj vo vlastnostiach na danom adresári):
Tak pridajme skupinu everyone (o konkrétnom užívateľovi si povieme nižšie) a priraďme jej oprávnenia, aké uznáme za vhodné. Ide o to, že ISAPI aplikácia je spúšťaná službou, ktorá nie bežným užívateľom. Ak sme „mimo“ adresár Webroot, tak tento užívateľ má zakázané pristupovať do daného adresára.
Je to logické, ak by vznikla napr. chyba (úmyselná?) od programátorov ISAPI, hacker by dokázal spravovať celý server.
Znova sa pokúsme o vyrolovanie súborov z adresára. Ak sa zobrazila chyba 401.1, máme problém s užívateľom, ktorý spúšťa danú službu. Tento problém môže nastať napríklad, ak máme dva servery. Prvý plní úlohu primárneho a druhý má zreplikované Active Directory, v reálnom čase „klonuje“ databázu a tak plní úlohu záložného servera, ktorý pri výpadku prvého preberie bez problémov jeho „povinnosti“.
Na prvom serveri ale služba chodí správne na druhom vypisuje spomínanú chybu. Skúsme preto pridať do domény nového užívateľa (napr. AnonymnyWebUzivatel s heslom AnWebUzi123). Otvorme si nástroje pre správu a zvoľme si konfiguráciu Active directory: v nastavenia / nástroje pre správu / Užívatelia a počítače služby Active Directory. Pridajme nového doménového užívateľa:
Tohto užívateľa teraz pridajme ako konto, cez ktoré pristupujú užívatelia cez web. Otvorme si konfiguráciu IIS: nastavenia / nástroje pre správu / Internetová informačná služba, prepnime si vlastnosti, zabezpečenie adresára a kliknime na tlačidlo upraviť v sekcii Nastavenia anonymného prístupu. Tu pridajme nášho nového užívateľa.
Ak sa už podarilo rozbehať korektne IIS službu, skúsme jej ostatné vlastnosti. Na miesto fyzického určenia, kde sa má webová aplikácia nachádzať vytvorme súbor a.html s obsahom:
<html>
Hello World
</html>
Ak teraz v prehliadači zadáme cestu ku virtuálnemu adresáru a za ňou názov súboru mala by sa zobraziť nasledujúca stránka:
Typická chyba, ktorá hovorí o tom, že súbor neexistuje. Overme preto existenciu daného súboru (a.html) na disku, kde naň odkazuje definícia virtuálneho adresára. Overme aj správnosť prípony, prípadne case-senzitivitu.
V prípade, že chceme, aby tento súbor bol predvolený, môžeme ho nastaviť v záložke Documents vo vlastnostiach virtuálneho adresára:
Kde ho najprv pridáme a potom šípkami umiestnime na prvé miesto. Takto získame to, že ak napíšeme URL: http://localhost/Pokus/ zobrazí sa A.HTML aj bez toho, že si ho „vypýtame“ priamo. Ostatné súbory sú podľa poradia „náhradné“, pre prípad, že neexistuje ten s vyššou prioritou (nad ním).
Keď sa nám podarilo zobraziť obsah adresára, aj súbor, môžeme pristúpiť na spustenie ISAPI aplikácie.
[WIN2003
Ak potrebujeme rozbehať ISAPI / CGI / ASP aplikáciu na Windows 2003, musíme vedieť, že „nová“ politika Microsoftu je „všetko zakázať“ a teda je na administrátorovi, čo povolí (nie zakáže – teda implicitná inštalácia má veľa vecí zakázaných a teda je menšia šanca úspechu útočníka.
Prepnime sa teda v IIS konfigurácii na Rozšírenia webových služieb, kurzorom vyberme Všetky neznáme rozšírenia ISAPI, ktoré povolíme.
WIN2003]
Vyskúšajme nakopírovať súbory ISAPI aplikácie do virtuálneho adresára. Zadajme do URL cestu ku vykompilovanej DLL.
Ak sa nám nepodarilo rozbehať ISAPI, ale server hlási chybu 500, tak sme niečo pravdepodobne spackali priamo v kóde aplikácie. Táto chyba sa zvykne nahodiť, ale DLL vráti výnimku. Napríklad sme chceli „kastiť“ variant s reťazcovou hodnotou na číslo. No bežne sa stáva aj to, že naša ISAPI aplikácia používa externé DLL / BPL (nie sú kompilované s ňou). Vtedy treba tieto DLL mať v ceste – nestačí ich nakopírovať do virtuálneho adresára, pretože vlastne ISAPI nemá nastavený pracovný adresár tam! Ide len o DLL, ktorú spúšťa iná služba. Práve ta sa nachádza v adresároch Windows a potrebné DLL by mali byť potom nakopírované tam (alebo sa nastaví hodnota prostredia – DLL pôjdu na miesto „v ceste“).
V prípade, že dostávame chybu 403, tak máme zablokovaný prístup na web. Nejedná sa ani tak o chybu ako o vlastnosť (takto sa dajú regulovať nežiaduce IP adresy – no pozor na adresy za NAT/PAT proxy, jedná IP neznamená, že sa jedná o jedno PC).
Zmeny, alebo opravy sa dajú vykonať v konfiguračnom rozhraní IIS. Nájdeme ho v nastaveniach / nástrojoch pre správu / Internetová informačná služba, kde si vyberieme konkrétny virtuálny adresár a jeho vlastnosti. Prepneme sa na zložku Zabezpečenie adresára a stlačíme tlačidlo Upraviť obmedzenia adries a názvov domén. V nasledujúcom dialógovom okne pridávame / uberáme práva prístupu užívateľov ku IIS serveru:
Ak raz spustíme ISAPI, služba „načíta“ DLL. Túto DLL potom drží, pokiaľ služba (proces) neskončí. V prípade, že chceme urobiť upgrade, musíme službu stopnúť, „prepľacnúť“ súbory a znova ju naštartovať. Stopnutie služby má za následok to, že všetci surfujúci užívatelia budú dočasné márne klikať na linky odkazujúce na server, ale aj fakt, že sa im vymaže session! Teda ak pracujeme s nejakou intranetovou aplikáciou, kde sa v session drží napr. smerník na spojenie s DB, užívateľ príde o toto prihlásenie po stopnutí / reštarte služby!
Vyhľadajme služby Štart – Nastavenia – Ovládacie panely – Nástroje pre správu – Služby a kliknime na ikonku v hornom toolbare:
Služba sa v rôznych verziach Windows volá ináč:
WinXP Prof. SP2 Cz: Publikovaní na webu
Win2003 RC2 Cz: Služba publikovaní na webu
WinXP Prof. SP2 Aj / Sj SP: World Wide Web Publishing
WinXP Prof. SP2 Aj / Sj SP: Služba publikovania na webe
WinXP Prof. SP2 Aj / Sj SP: Publikovanie na w
Niekedy služba môže „vypovedať“ a reštart sa nepodarí. Nastáva to v prípade brutálneho vydochnutia Webovej aplikácie. Symptómom je dlhé vypínanie služby, ktoré vyhodí chybu o nemožnosti vykonania operácie. DLL sa síce uvoľní „spod pazúr“ služby a je možné ju prepísať, ale službu sa už nepodarí zapnúť, pretože všetky tlačidlá ostanú neaktívne. V prípade WinXP nepomôže nič, len reštart počítača, Win2003 RC2 sa dokáže spamätať ak sa odhlási aktívny užívateľ a prihlási sa znova.