Accendo / Publikované

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.

Inštalujeme IIS

[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]

Virtuálny adresár

            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.

Konfigurácia Virtuálneho adresára

            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ť.

           

Overenie správnosti nainštalovanej IIS a Virtuálneho adresára

            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:

 

 

Chyba 401.3 a 401.2

            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.

 

Chyba 401.1

            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:

 

Chyba 404

            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.

Predvolený súbor

            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).

Spúšťame ISAPI / CGI

            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.

 

Chyba: 500

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“).

Chyba 403

            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:

 

Upgrade ISAPI

            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

Problém s reštartom služby

 

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.

 



[1] Windows 2003 implicitne inštaluje IIS.

[2] Localhost je interný názov počítača, na ktorom beží služba. Zvonku musia klienti zadávať názov počítača podľa DNS, resp. jeho IP adresu. Localhost odkazuje vlastne sám na seba a je ekvivalentný s IP adresou 127.0.0.1.