Operacˇnı syste´my - RNDr. Šárka Vavrečková, Ph.D.
Transkript
Šárka Vavrečková Operačnı́ systémy cvičenı́ Část I: Windows Slezská univerzita v Opavě Filozoficko-přı́rodovědecká fakulta Ústav informatiky Opava, poslednı́ aktualizace 27. března 2012 Anotace: Tento dokument je určen pro studenty druhého ročnı́ku IVT na Ústavu informatiky Slezské univerzity v Opavě. Obsahuje látku probı́ranou ve cvičenı́ch předmětu Operačnı́ systémy v části semestru věnované Windows. Probı́raná látka navazuje na předmět Praktikum z operačnı́ch systémů. Předpokládá se znalost základnı́ orientace na Přı́kazovém řádku, v registru a běžných nástrojı́ch s grafickým rozhranı́m. Operačnı́ systémy cvičenı́ Část I: Windows RNDr. Šárka Vavrečková, Ph.D. Dostupné na: http://fpf.slu.cz/˜vav10ui/opsys.html Ústav informatiky Filozoficko-přı́rodovědecká fakulta Slezská univerzita v Opavě Bezručovo nám. 13, 746 01 Opava Sázeno v systému LATEX Tato inovace předmětu Operačnı́ systémy je spolufinancována Evropským sociálnı́m fondem a Státnı́m rozpočtem ČR, projekt č. CZ.1.07/2.3.00/0 9.0197, „Posı́lenı́ konkurenceschopnosti výzkumu a vývoje informačnı́ch technologiı́ v Moravskoslezském kraji“. Předmluva Co najdeme v těchto skriptech Tato skripta jsou určena pro studenty informatických oborů na Ústavu informatiky Slezské univerzity v Opavě. Ve cvičenı́ch předmětu Operačnı́ systémy se v prvnı́ části semestru probı́rajı́ operačnı́ systémy z rodiny Windows a v druhé části semestru unixové systémy se zaměřenı́m na Linux, tato skripta se využı́vajı́ právě v prvnı́ části semestru. Navazujeme na obdobná skripta z předmětu Praktikum z operačnı́ch systémů, tedy předpokládajı́ se již základnı́ znalosti práce ve Windows, v přı́stupových oprávněnı́ch a základ práce s Přı́kazovým řádkem. Na to, že jde o látku pouze pro část semestru, se skripta mohou zdát značně rozsáhlá. Důvodem je zařazenı́ mnoha ukázkových (řešených) přı́kladů a motivačnı́ch (neřešených) úkolů, které majı́ pomoci při pochopenı́ a osvojenı́ si učiva. U některých přı́kazů jsou uvedeny také jejich obvyklé výstupy, také z důvodu často nedostatečných přı́stupových oprávněnı́ studentů v učebnách. Některé oblasti jsou také „navı́c“ (jsou označeny ikonami fialové barvy), ty nejsou probı́rány a ani se neobjevı́ na testech – jejich úkolem je motivovat k dalšı́mu samostatnému studiu nebo pomáhat v budoucnu při zı́skávánı́ dalšı́ch informacı́ dle potřeby v zaměstnánı́. Značenı́ Ve skriptech se použı́vajı́ následujı́cı́ barevné ikony: • Nové pojmy, názvy souborů, obecné postupy, značenı́ v přı́kazech, použı́vané symboly, apod. jsou značeny modrým symbolem v poznámce na okraj, který vidı́me také zde vpravo. P • Konkrétnı́ postupy a nástroje (přı́kazy, programy, soubory, skripty), způsoby řešenı́ různých situacı́, do kterých se může administrátor dostat, syntaxe přı́kazů atd. jsou značeny také modrou ikonou. $ • Zelená je ikona vyznačujı́cı́ sekce, které jsou opakovánı́m učiva z přednášek, jiné části těchto skript nebo z předchozı́ho semestru (předmětu Praktikum z operačnı́ch systémů). O iii iv • Zvlášt’je také vyznačen text, který je obvykle výstupem probı́raných přı́kazů (včetně těch, jejichž spuštěnı́ vyžaduje vyššı́ přı́stupová oprávněnı́) nebo může jı́t o obsah některých souborů. Barva ikony je oranžová. • Některé části textu jsou označeny fialovou ikonou, což znamená, že jde o nepovinné úseky, které nejsou probı́rány (většinou; studenti si je mohou podle zájmu vyžádat nebo sami prostudovat). Jejich účelem je dobrovolné rozšı́řenı́ znalostı́ studentů o pokročilá témata, na která obvykle při výuce nezbývá moc času. • Fialová ikona se objevuje také u některých neřešených úkolů. Tyto úkoly nejsou povinné a studenti se jimi mohou zabývat podle svých zájmů (jsou obvykle náročnějšı́ než jiné úkoly). • Žlutou ikonou jsou označeny odkazy, na kterých lze zı́skat dalšı́ informace o tématu. Může jı́t o způsoby zı́skánı́ nápovědy, nejčastěji však u této ikony najdeme odkazy na internet. • Červená je ikona pro upozorněnı́ a poznámky. Opticky jsou odlišeny také řešené přı́klady a neřešené úlohy. Přı́klady jsou čı́slovány, čı́sla sloužı́ k jednoduchému odkazovánı́ na tyto přı́klady. M R L Přı́klad 0.1 Takto vypadá prostředı́ s přı́kladem. Čı́slo přı́kladu je 0.1. Úkoly Otázky a úkoly, náměty na vyzkoušenı́, které se doporučuje při procvičovánı́ učiva provádět, jsou uzavřeny v tomto prostředı́. Pokud je v prostředı́ vı́ce úkolů, jsou čı́slovány. Jak probı́hajı́ testy Na zápočtových testech z předmětů týkajı́cı́ch se operačnı́ch systémů lze použı́vat počı́tač, a to nápovědu a nástroje běžně dostupné ve standardnı́ instalaci daného operačnı́ho systému, ale bez přı́stupu na Internet. Nejsou dovoleny dokumenty vlastnı́ ani cizı́ výroby, které nejsou součástı́ standardnı́ instalace, nelze použı́vat internetový prohlı́žeč ani jiný způsob přı́stupu na externı́ zdroje informacı́. Na stránkách předmětu je k dispozici orientačnı́ seznam otázek a úkolů, které se mohou objevit na testu, ovšem v testu se mohou objevit mı́rné odlišnosti (napřı́klad v názvech zpracovávaných souborů či adresářů, jiné přepı́nače přı́kazů, apod.). Tato skripta plně pokrývajı́ odpovědi na otázky, které se mohou objevit v zápočtovém testu č. 1 (Windows) v předmětu Operačnı́ systémy. C Obsah 1 2 Úvod do správy na Přı́kazovém řádku 1.1 Prostředı́ Přı́kazového řádku . . . . . . . . 1.2 Adresáře, soubory a pamět’ová zařı́zenı́ 1.2.1 Vytvořenı́ nového souboru . . . 1.2.2 Prohledávánı́ souborů . . . . . . 1.2.3 Virtuálnı́ disky . . . . . . . . . . 1.2.4 Synchronizace a zálohovánı́ . . . 1.2.5 Údržba pamět’ových zařı́zenı́ . . 1.2.6 Dalšı́ přı́kazy . . . . . . . . . . . 1.3 Proměnné . . . . . . . . . . . . . . . . . 1.4 Dávkové soubory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Pokročilejšı́ úlohy na Přı́kazovém řádku 2.1 Správa sı́tě . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.1 Základnı́ přı́kazy pro správu sı́tě . . . . . . . . . 2.1.2 Přı́kaz NET . . . . . . . . . . . . . . . . . . . . . . 2.1.3 Přı́kaz NET – uživatelé a skupiny . . . . . . . . . 2.1.4 Přı́kaz NET – sdı́lenı́ prostředků a správa domén 2.1.5 Přı́kaz NET – práce se službami a dalšı́ úlohy . . 2.1.6 NetShell . . . . . . . . . . . . . . . . . . . . . . . 2.2 Složené přı́kazy . . . . . . . . . . . . . . . . . . . . . . . 2.2.1 Propojenı́ přı́kazů a podmı́něné vyhodnocovánı́ 2.2.2 Podmı́něný přı́kaz . . . . . . . . . . . . . . . . . 2.2.3 Cyklus přes množinu . . . . . . . . . . . . . . . 2.2.4 Cyklus přes interval . . . . . . . . . . . . . . . . 2.3 Hromadné zpracovánı́ dat . . . . . . . . . . . . . . . . . 2.4 Odlišnosti v nástrojı́ch Přı́kazového řádku . . . . . . . . 2.5 PowerShell . . . . . . . . . . . . . . . . . . . . . . . . . . v . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1 4 4 5 7 8 10 12 14 16 . . . . . . . . . . . . . . . 20 20 20 26 26 30 35 38 45 45 48 50 53 53 58 59 vi 2.6 3 4 2.5.1 Jak na PowerShell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 2.5.2 Pár typických úloh v PowerShellu . . . . . . . . . . . . . . . . . . . . . . . . . . 62 Skripty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 Řı́zenı́ přı́stupu 3.1 Základnı́ pojmy . . . . . . . . . . . . . . . . . 3.2 Objektový model ve Windows řady NT . . . 3.2.1 Objekty . . . . . . . . . . . . . . . . . . 3.2.2 GDI objekty a stanice oken . . . . . . 3.2.3 Model COM . . . . . . . . . . . . . . . 3.2.4 .NET . . . . . . . . . . . . . . . . . . . 3.3 Řı́zenı́ přı́stupu a správa uživatelů . . . . . . 3.3.1 Uživatelské profily a uživatelské účty 3.3.2 Přı́stupová oprávněnı́ . . . . . . . . . 3.3.3 Navyšovánı́ přı́stupových oprávněnı́ 3.4 Jmenné a adresářové služby . . . . . . . . . . 3.4.1 Úvod do DNS . . . . . . . . . . . . . . 3.4.2 Active Directory . . . . . . . . . . . . 3.5 Zásady a šablony . . . . . . . . . . . . . . . . 3.5.1 Systémové zásady . . . . . . . . . . . 3.5.2 Zásady skupiny . . . . . . . . . . . . . 3.5.3 Šablony pro správu . . . . . . . . . . . 3.5.4 Šablony zabezpečenı́ . . . . . . . . . . Služby a procesy 4.1 Správa služeb . . . . . . . . . . . . . . . . . 4.1.1 Jak služby fungujı́ . . . . . . . . . . 4.1.2 Sdı́lené procesy služeb, Service Host 4.1.3 Program sc.exe . . . . . . . . . . . 4.2 WBEM . . . . . . . . . . . . . . . . . . . . . 4.2.1 Princip a implementace WBEM . . . 4.2.2 WMI . . . . . . . . . . . . . . . . . . 4.2.3 Program wmic . . . . . . . . . . . . 4.3 Správa procesů . . . . . . . . . . . . . . . . 4.3.1 Procesy ve Windows NT . . . . . . . 4.3.2 Úlohy a procesy . . . . . . . . . . . . 4.3.3 Vztahy mezi procesy . . . . . . . . . 4.3.4 Priority procesů . . . . . . . . . . . . 4.3.5 Plánovánı́ . . . . . . . . . . . . . . . 4.4 Komunikace mezi procesy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 68 71 71 77 78 82 83 83 86 90 91 91 92 94 94 95 96 97 . . . . . . . . . . . . . . . 99 99 99 101 103 106 106 107 109 113 113 115 120 122 123 127 vii 4.5 4.6 5 6 4.4.1 Schránka . . . . . . . . . . . . . . 4.4.2 DDE . . . . . . . . . . . . . . . . 4.4.3 OLE . . . . . . . . . . . . . . . . 4.4.4 Zprávy . . . . . . . . . . . . . . . 4.4.5 Volánı́ procedur . . . . . . . . . . Programové rozhranı́ . . . . . . . . . . . 4.5.1 Dynamicky linkované knihovny 4.5.2 Lokálnı́ verze knihoven . . . . . 4.5.3 Win API . . . . . . . . . . . . . . 4.5.4 Běh aplikacı́ . . . . . . . . . . . . Kompatibilita verzı́ Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Zařı́zenı́ a paměti 5.1 Správa zařı́zenı́ . . . . . . . . . . . . . . . . . . . . 5.1.1 Ovladače zařı́zenı́ . . . . . . . . . . . . . . . 5.1.2 Instalace ovladačů . . . . . . . . . . . . . . 5.1.3 Modely ovladačů . . . . . . . . . . . . . . . 5.2 Pamět’ová zařı́zenı́ . . . . . . . . . . . . . . . . . . 5.2.1 Diskové kvóty . . . . . . . . . . . . . . . . . 5.2.2 Kontrola stavu disků . . . . . . . . . . . . . 5.2.3 Program diskpart . . . . . . . . . . . . . 5.2.4 Program fsutil . . . . . . . . . . . . . . . 5.2.5 Streamy v NTFS . . . . . . . . . . . . . . . . 5.3 Správa paměti . . . . . . . . . . . . . . . . . . . . . 5.3.1 Adresovánı́ . . . . . . . . . . . . . . . . . . 5.3.2 Stránkovánı́ . . . . . . . . . . . . . . . . . . 5.3.3 Struktura paměti . . . . . . . . . . . . . . . 5.3.4 Správa paměti ve Windows od verze Vista Nasazenı́ systému 6.1 Konfigurace systému a aplikacı́ . . . . . . . . . . . 6.1.1 Konfiguračnı́ soubory pro staršı́ programy 6.1.2 INI soubory . . . . . . . . . . . . . . . . . . 6.1.3 INF soubory . . . . . . . . . . . . . . . . . . 6.1.4 Registr . . . . . . . . . . . . . . . . . . . . . 6.2 Start systému . . . . . . . . . . . . . . . . . . . . . 6.2.1 Windows s DOS jádrem . . . . . . . . . . . 6.2.2 Windows 2000 a XP . . . . . . . . . . . . . 6.2.3 Windows Vista a novějšı́ . . . . . . . . . . . 6.3 Instalace Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 128 129 130 131 132 132 135 136 137 140 . . . . . . . . . . . . . . . 143 143 143 145 145 146 146 148 150 152 157 159 159 161 162 164 . . . . . . . . . . 165 165 165 166 167 169 172 172 173 176 177 viii 6.4 6.5 6.6 6.3.1 Instalace Windows do verze XP . . . . . . . . . . . . . . 6.3.2 Nástroje k bezobslužné instalaci Visty a novějšı́ch verzı́ 6.3.3 Instalace Visty a novějšı́ch verzı́ . . . . . . . . . . . . . 6.3.4 Služba pro nasazenı́ systému Windows (WDS) . . . . . Aktualizace systému . . . . . . . . . . . . . . . . . . . . . . . . Chyby při běhu aplikacı́ a systému . . . . . . . . . . . . . . . . Správa softwaru . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.6.1 Instalace aplikacı́ . . . . . . . . . . . . . . . . . . . . . . 6.6.2 Instalačnı́ soubory aplikacı́ . . . . . . . . . . . . . . . . 6.6.3 IntelliMirror . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 179 183 187 187 189 192 192 193 195 Přı́lohy 197 A Laděnı́ programů a jádra Windows A.1 Princip laděnı́ . . . . . . . . . . . . . . . . . . . . . . . . . A.2 Dr. Watson . . . . . . . . . . . . . . . . . . . . . . . . . . . A.3 WinDbg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.3.1 Instalace a nastavenı́ programu . . . . . . . . . . . A.3.2 Práce se souborem výpisu při zhroucenı́ Windows A.3.3 Práce ve WinDbg bez načtenı́ DBG souboru . . . . A.3.4 Funkce napojenı́ se na proces . . . . . . . . . . . . 198 198 198 199 199 200 201 206 Literatura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 Kapitola 1 Úvod do správy na Přı́kazovém řádku V této kapitole prohloubı́me naše znalosti o použı́vánı́ Přı́kazového řádku. Navážeme na to, co jsme se naučili v minulém semestru, a probereme základnı́ přı́kazy, které můžeme využı́t při správě systému, podı́váme se na dávkové soubory. 1.1 Prostředı́ Přı́kazového řádku Navazujeme na učivo z předchozı́ho semestru. Kdo měl problémy se základy Přı́kazového řádku, ten si urychleně zopakuje přı́slušnou kapitolu ze skript předmětu Praktikum z operačnı́ch systémů (http://fpf.slu.cz/~vav10ui/obsahy/pos/skripta/pos win.pdf). Vı́me, že Přı́kazový řádek lze spustit přı́kazem cmd.exe nebo přes nabı́dku Start. Přı́kazy, které lze spustit v Přı́kazovém řádku, můžeme rozdělit do dvou skupin: E P • vnitřnı́ přı́kazy – jsou implementovány přı́mo v souboru cmd.exe, většinou se jedná o základnı́ a jednoduché přı́kazy jako napřı́klad kopı́rovánı́ souborů nebo procházenı́ mezi adresáři (složkami), • vnějšı́ přı́kazy – jedná se o spustitelné soubory (s přı́ponou COM, EXE, MSC, apod.), tuto skupinu přı́kazů můžeme libovolně rozšiřovat instalacı́ nových programů. Je obvykle jedno, jestli přı́kaz napı́šeme malými nebo velkými pı́smeny (až na výjimky). V tomto dokumentu jsou při prvnı́m použitı́ většinou použita velká pı́smena. Jen málokdo si pamatuje název a přesnou syntaxi jednotlivých přı́kazů, už proto, že verzi od verze těchto přı́kazů neustále přibývá. Proto bychom měli zvládnout vyhledánı́ nápovědy k přı́kazu. To lze několika způsoby: • program help, lze použı́t také ve tvaru help | more (výpis nápovědy po stránkách, výpis přerušı́me klávesou q ), • nápověda k určitému přı́kazu ve formátu přı́kaz /? nebo help přı́kaz, • systém nápovědy Windows přes tlačı́tko Start, vhodná klı́čová slova se lišı́ v různých verzı́ch Windows (většinou lze použı́t klı́čové slovo přı́kazy nebo přı́kazový řádek ). 1 O PROSTŘEDÍ Přı́kazového řádku 1.1 2 Program help (at’už s parametrem nebo bez něj) funguje pouze pro staršı́ přı́kazy. U většiny přı́kazů (předevšı́m těch pro práci se sı́tı́) proto volı́me spı́še zobrazenı́ nápovědy použitı́m parametru /?. Nezapomeňte, že před každým parametrem musı́ být mezera, ale uvnitř parametru mezera nesmı́ být (ani za lomı́tkem), pokud nenı́ uzavřen do uvozovek. Práci s Přı́kazovým řádkem může zjednodušit program doskey (ve Windows od verze 2000 je automaticky spuštěn). Nabı́zı́ kromě jiného možnost použı́vat historii přı́kazů: • ↑ , ↓ : zobrazı́me (přı́p. i upravı́me) předchozı́/následujı́cı́ přı́kaz z historie, • ← , → : posun o znak doleva/doprava v zadávaném přı́kazu, • F7 • Alt+F7 O zobrazı́ celou historii přı́kazů, šipkami je možné si vybrat ze seznamu, smaže historii přı́kazů. Přı́kazový řádek je možné spouštět i s parametry, tak lze určovat jeho vlastnosti nebo stanovit přı́kazy, které se provedou hned po spuštěnı́ přı́kazového řádku, viz tabulku 1.1. Pokud je použito Přı́klad cmd /k přı́kaz cmd /k CD ”C:\program files” cmd /k C:\nastav.bat cmd /c přı́kaz cmd /t:xy P Význam hned po spuštěnı́ přı́kazového řádku se provede zadaný přı́kaz pracovnı́m adresářem se stane adresář uvedený v přı́kazu CD pokud existuje tento dávkový soubor, pak se provede hned po startu Přı́kazového řádku totéž jako /k, ale po provedenı́ přı́kazu bude Přı́kazový řádek ukončen nastavı́ barvy pozadı́ (x) a textu (y) obrazovky, x a y jsou hexadecimálnı́ čı́slice, barvy lze měnit také přı́kazem color, proto možnosti barevných kombinacı́ lze zı́skat přı́kazem color /? Tabulka 1.1: Parametry přı́kazového řádku vı́ce přepı́načů, pak /k a /c musı́ být poslednı́. Přepı́nače můžeme použı́vat při spuštěnı́ Přı́kazového řádku z menu Start ï Spustit nebo využı́t možnosti Windows při definovánı́ zástupců (do přı́kazové řádky zástupce napı́šeme celý přı́kaz včetně parametrů). Úkoly 1. Vzpomeňte si na aplikaci Process Explorer od firmy Sysinternals, se kterou jsme se seznámili v předchozı́m semestru. Pokud ho nemáte k dispozici, stáhněte z internetu. Spust’te Process Explorer, potom spust’te Přı́kazový řádek a obě okna umı́stěte tak, aby byla obě zároveň viditelná. V Process Exploreru najděte ve stromové struktuře záznam Přı́kazového řádku (cmd.exe). V Přı́kazovém řádku spust’te postupně následujı́cı́ přı́kazy a sledujte v okně Process Exploreru, co se stane s řádkem cmd.exe: C 1.2 ADRESÁŘE, SOUBORY A PAMĚŤOVÁ ZAŘÍZENÍ 3 • netsh program netsh budeme probı́rat později, jde o prostředı́ s rozsáhlými možnostmi konfigurace předevšı́m sı́t’ových nastavenı́; práci v prostředı́ ukončı́me přı́kazem exit, • copy con d:\pokusny.txt opět budeme probı́rat později, přı́kaz copy sloužı́ ke kopı́rovánı́ souborů, ale varianta s prvnı́m parametrem con a druhým parametrem názvem souboru pracuje takto: – vytvořı́ soubor s daným názvem (zde na disku D:), – text, který od této chvı́le budeme psát na klávesnici, se objevı́ na obrazovce (tj. zařı́zenı́ con – console) a pak se z obrazovky bude kopı́rovat do vytvořeného souboru, každý stisk klávesy Enter bude interpretován jako konec řádku, – až nás přestane bavit psanı́, stiskneme klávesu F6 zkratku Ctrl+Z ) a interaktivnı́ režim bude ukončen. a Enter (nebo klávesovou Obě možnosti srovnejte. Poznáte podle zobrazovaných informacı́ v Process Exploreru, který z těchto přı́kazů je vnitřnı́ a který vnějšı́? 2. Vytvořte na pracovnı́ ploše zástupce s přı́kazem cmd /t:1e /k Z: (po spuštěnı́ poklepánı́m se stane pracovnı́m diskem Z:, barvy jsou nastaveny na modré pozadı́, žluté pı́smo). Barvu textu a pozadı́ upravte podle svého vkusu (vkusu!), pokud nemáte přı́stup na disk Z:, použijte jiné umı́stěnı́. 3. Vzpomeňte si (nebo najděte v nápovědě), jakým způsobem lze přı́kaz dir spustit rekurzı́vně – tedy zobrazit veškerý obsah uvnitř zadaného či pracovnı́ho adresáře včetně obsahu podadresářů, jejich podadresářů, atd., s potlačenı́m nadbytečných informacı́ (třeba záhlavı́ a zápatı́). Vyzkoušejte na kořenový adresář disku C:, a zároveň vyzkoušejte klávesovou zkratku pro zastavenı́ činnosti pracujı́cı́ho programu – Ctrl+C – tuto zkratku si pamatujte, je velmi užitečná). 4. Vypište všechny soubory s přı́ponou .MSC nacházejı́cı́ se na disku C: (tj. rekurzı́vně). Některý z těchto souborů spust’te (Pamatujete si, o jaké soubory se jedná?). 5. Proved’te totéž co v předchozı́m úkolu, ale pro soubory s přı́ponou .CPL, výstup přesměrujte do souboru panely.txt (umı́stěte do adresáře, ve kterém máte právo zápisu). 6. Vypište obsah adresáře neexistujici (přı́padně jiného neexistujı́cı́ho adresáře), výstup přesměrujte do souboru prazdny.txt, chybový výstup směrujte tamtéž (přičemž název souboru uvedete v celém přı́kazu pouze jednou). 7. Proved’te totéž co v předchozı́m přı́kazu (využijte klávesu pro přesun v historii přı́kazů), ale chybový výstup přesměrujte tak, aby se nikam nezobrazil ani neuložil. 8. Výstup přı́kazu time /t směrujte tak, aby se uložil na konec souboru cas.txt (tj. přidávejte na jeho konec k původnı́mu obsahu, který zůstane zachován). Přı́kaz včetně směrovánı́ spust’te několikrát za sebou (využijte historii přı́kazů), pak zkontrolujte soubor s výslednými časovými údaji. O 1.2 ADRESÁŘE, SOUBORY A PAMĚŤOVÁ ZAŘÍZENÍ 1.2 4 Adresáře, soubory a pamět’ová zařı́zenı́ 1.2.1 Vytvořenı́ nového souboru Nový soubor můžeme vytvořit několika způsoby. Předně se může jednat o výstup některého programu, což můžeme zajistit i ručně – přesměrovánı́m výstupu některého přı́kazu do souboru. Existuje však také způsob, jak vytvořit nový soubor s „originálnı́m“ obsahem. Přı́klad 1.1 V pracovnı́m adresáři vytvořı́me nový soubor s názvem soubor.txt: COPY CON soubor.txt Enter ... (nějaký obsah souboru) ... Ctrl+Z nebo F6 , pak Enter $ Klávesová kombinace Ctrl+Z nebo F6 vytvořı́ textový znak znamenajı́cı́ konec souboru. Podobný postup můžeme využı́t, pokud chceme k existujı́cı́mu souboru připojit dašı́ řádky: COPY soubor.txt+CON soubor.txt Enter ... (řádky, které chceme připojit) ... Ctrl+Z nebo F6 , pak Enter Výsledek můžeme samozřejmě uložit i do jiného souboru než původnı́ho. Nové řádky se přidajı́ na konec souboru. Kdybychom obrátili pořadı́ operandů kolem symbolu „+“, přidaly by se nové řádky na začátek souboru. Úkoly 1. V adresáři, kde máte právo zápisu, vytvořte pomocı́ COPY CON textový soubor. Pak ho přejmenujte pomocı́ REN, setřid’te a výsledek třı́děnı́ uložte do jiného souboru, ten vypište pomocı́ TYPE. 2. Vytvořte v pracovnı́m adresáři soubor pokus1.txt, napište do něj jakýkoliv text (několik řádků) a uložte. Potom ho zkopı́rujte do téhož adresáře na soubor s názvem pokus2.txt, otevřete, na některém řádku pozměňte jeden znak (tak aby se délka souboru nezměnila) a uložte. Dále porovnejte oba soubory postupně pomocı́ přı́kazů FC a COMP a porovnejte jejich výstupy. U přı́kazu COMP vyzkoušejte také uvedené přepı́nače. 3. Na začátek souboru pokus1.txt, který jste vytvořili v předchozı́m úkolu, přidejte řádek jakéhokoliv textu, a podobně také na jeho konec – použijte metodu přı́kazu copy con uvedenou výše v druhé části přı́kladu 1.1. C 1.2 ADRESÁŘE, SOUBORY A PAMĚŤOVÁ ZAŘÍZENÍ 1.2.2 5 Prohledávánı́ souborů Zopakujeme si dva z nejdůležitějšı́ch přı́kazů pro zpracovánı́ textu – přı́kazy pro vyhledávánı́. Vı́me, že ve Windows existujı́ dva – jednoduššı́ FIND a pokročilejšı́ FINDSTR. Použı́váme je nejen tehdy, když potřebujeme v existujı́cı́m textovém souboru najı́t řetězec odpovı́dajı́cı́ zadanému klı́čovému slovu nebo regulárnı́mu výrazu, ale předevšı́m (a nejčastěji) tehdy, když chceme zpracovat a profiltrovat výstup některého jiného přı́kazu. Typické použitı́ je tedy ve formě filtru zřetězeně v „rouře“. Syntaxi přı́kazu findstr známe, přı́padně si ji můžeme najı́t v nápovědě findstr /? Pro základnı́ orientaci: prvky, které lze použı́t v regulárnı́m výrazu, jsou v tabulce 1.2. Prvek Význam . * ˆ $ [znaky] [ˆznaky] [x-y] \<text text\> Libovolný znak Nula nebo vı́ce výskytů předcházejı́cı́ho znaku nebo třı́dy Začátek řádku (znak „střı́ška“) Konec řádku Jakýkoli (jeden) znak z množiny v závorkách Jakýkoli znak mimo prvky množiny Jakýkoli znak v rozsahu daném dvěma znaky (jeden znak) Začátek slova Konec slova Tabulka 1.2: Regulárnı́ výrazy v přı́kazu findstr Přı́klad 1.2 V předchozı́m semestru jsme se již s vyhledávánı́m trochu seznámili, ted’ si pro připomenutı́ dáme pár přı́kladů. V adresáři windows\system32 (což je právě náš pracovnı́ adresář) a přı́padně jeho podadresářı́ch se nacházı́ hodně programů, které lze spustit na přı́kazovém řádku. Chceme najı́t přı́kazy souvisejı́cı́ s diskem, zřejmě budou mı́t v názvu podřetězec „disk“, přı́pona může být libovolná: dir /S /B | findstr ”disk” V pracovnı́m adresáři si vytvořı́me testovacı́ soubor pokus.txt: P:\> copy con pokus.txt slovo prvnı́ řádek znakový soubor druhý znak slovo třetı́ řádek znak, čárka čtvrtý řádek přı́znak slovo Stiskneme postupně klávesy F6 a Enter . Dále budeme vyhledávat v tomto souboru: findstr ”prvnı́ řádek” pokus.txt očekávali bychom, že bude nalezen a vypsán pouze prvnı́ řádek souboru, ale ve skutečnosti se vypı́šou všechny řádky – mezeru ve výrazu totiž tento přı́kaz chápe jako operátor OR, tedy jsou vypsány řádky obsahujı́cı́ jeden nebo druhý řetězec (nepomůže ani escape sekvence – opačné lomı́tko před mezerou) O 1.2 ADRESÁŘE, SOUBORY A PAMĚŤOVÁ ZAŘÍZENÍ 6 findstr /c:”prvnı́ řádek” pokus.txt vypı́še se opravdu jen prvnı́ řádek, řetězec mezi uvozovkami je brán jako celek (pozor, je omezen význam metaznaků) findstr ”znak” pokus.txt vyhledá všechny výskyty řetězce znak v zadaném souboru, tedy vypı́še všechny řádky (nacházı́ se na všech) findstr ”znak\>” pokus.txt najde slova končı́cı́ řetězcem znak, tj. taková, za nimiž je některý oddělovač (mezera, čárka, tečka, střednı́k apod.), předpona je „dovolena“ – vypı́še druhý, třetı́ a čtvrtý řádek findstr ”\<znak\>” pokus.txt vyhledá všechny výskyty slova znak obklopené některými oddělovači, v našem přı́padě vypı́še pouze druhý a třetı́ řádek (na ostatnı́ch řádcı́ch má toto slovo ještě předponu nebo přı́ponu) findstr ”znak[o,]” pokus.txt vypı́šou se řádky obsahujı́cı́ některý z řetězců „znako“ nebo „znak,“, tedy prvnı́ a třetı́ findstr ”znak[ˆo,]” pokus.txt výsledek je opačný vzhledem k předchozı́mu, vypı́šou se řádky obsahujı́cı́ řetězec znak, za kterým nenásleduje pı́smeno o ani čárka (tj. druhý a čtvrtý řádek) findstr ”ˆdru” pokus.txt hledáme řádek začı́najı́cı́ řetězcem dru, to je druhý řádek (všimněte si duality významu metaznaku „ˆ“) findstr ”soubor$” pokus.txt vypı́še se řádek, který končı́ řetězcem soubor findstr /c:”\<znak\>” pokus.txt chyba, takto je výraz brán jako literál a hledá se řetězec \<znak\>, nikoliv řetězec znak obklopený oddělovači (tj. nevypı́še se nic, takový řetězec v souboru nemáme) findstr ”\<znak\> slovo” pokus.txt vypı́šou se všechny řádky, na každém je bud’ samostatný řetězec znak nebo řetězec slovo findstr /c:”znak slovo” pokus.txt zı́skáme druhý a třetı́ řádek, tam jsou tyto řetězce přı́mo za sebou (i když prvnı́ nenı́ samostatné slovo obklopené oddělovači) findstr /c:”znak slovo” pokus.txt | findstr ”\<znak\>” takto jsme určili řetězec, ve kterém je znak samostatné slovo a je následován řetězcem slovo – krkolomné, ale funguje to findstr ”\<znak\>” *.txt projde všechny soubory s přı́ponou TXT nacházejı́cı́ se v pracovnı́m adresáři a hledá tam zadaný řetězec, vždy napı́še název souboru a pak nalezený řádek, v našem přı́padě (předpokládejme, že se řetězec nacházı́ ještě v dalšı́m souboru) pokus.txt:druhý znak slovo pokus.txt:třetı́ řádek znak, čárka pokus2.txt:což je typický znak těchto typů programů M 1.2 ADRESÁŘE, SOUBORY A PAMĚŤOVÁ ZAŘÍZENÍ 7 findstr /N ”\<znak\>” *.txt přidá se čı́slo řádku, výstup: pokus.txt:2:druhý znak slovo pokus.txt:3:třetı́ řádek znak, čárka pokus2.txt:51:což je typický znak těchto typů programů M findstr /M ”\<znak\>” *.txt nevypı́šou se řádky s nalezeným řetězcem, ale pouze soubory, ve kterých se hledaný řetězec nacházı́, výstup může vypadat napřı́klad takto: pokus.txt pokus2.txt M findstr /S /M /I ”\<znak\>” *.txt parametr /S způsobı́ rekurzivnı́ chovánı́ programu – prohledávajı́ se všechny soubory vyhovujı́cı́ masce *.txt, a to rekurzı́vně v celém podstromě podadresářů pracovnı́ho adresáře, vypisujı́ se opět pouze názvy souborů (protože jsme použili parametr /M), navı́c se porovnává bez rozlišovánı́ malých a velkých pı́smen (parametr /I) findstr /V ”slovo” pokus.txt vypı́sou se řádky, na kterých se nenacházı́ řetězec slovo, tedy pouze třetı́ řádek Úkoly 1. Vyzkoušejte si přı́kazy z přı́kladu 1.2. C 2. Zjistěte, zda v souboru C:\Windows\WindowsUpdate.log je řádek začı́najı́cı́ řetězcem obsahujı́cı́m záznam ve tvaru „rok–měsı́c–den“ pro současné datum (napřı́klad 2010–01–25). 3. Pro přemýšlivé: jak by vypadal přı́kaz, který by dokázal totéž, co v předchozı́m úkolu, provést souhrnně přes všechny LOG soubory rekurzı́vně v pracovnı́m adresáři? 1.2.3 Virtuálnı́ disky Pokud je cesta do adresáře přı́liš dlouhá, můžeme si ji jednoduše zkrátit – podobně jako oddı́lu na disku lze pı́smeno přidělit také adresáři. Přı́kaz SUBST vytvořı́ virtuálnı́ disk s označenı́m X: směrovaný na zadaný adresář, označenı́ disku volı́me tak, aby nekolidovalo s existujı́cı́mi disky v systému. Použı́váme napřı́klad tehdy, když chceme tentýž adresář (s dlouhou specifikacı́) použı́vat často, ale nechce se nám jeho celý název vypisovat. Použitelné také ve Windows, disk s tı́mto označenı́m se objevı́ ve všech běžných správcı́ch souborů. Přı́klad 1.3 Následujı́cı́ dva přı́kazy můžeme použı́t přı́mo za sebou (žádný disk s přiřazeným pı́smenem G: do této chvı́le ještě neexistoval). $ 1.2 ADRESÁŘE, SOUBORY A PAMĚŤOVÁ ZAŘÍZENÍ subst G: Z:\adr1\adr2\adr3 8 vytvořı́ virtuálnı́ disk s pı́smenem G:, který ukazuje na zadaný adresář copy soubor.xxx G: do adresáře kopı́rujeme soubor, můžeme použı́vat jakkoliv běžným způ- sobem subst G: /d zrušı́ přiřazenı́ virtuálnı́ho disku, uvolnı́ pı́smeno, které jsme pro něj použili (zde X) Úkoly 1. Zjistěte, které pı́smeno pro jednotky je ještě volné (zvolte některé spı́še několik pı́smen před koncem abecedy). To lze napřı́klad v některém souborovém manažerovi či Průzkumnı́kovi, v úvahu obvykle připadajı́ pı́smena W, T, Y nebo podobná. C Toto pı́smeno přiřad’te virtuálnı́mu disku, který vytvořı́te jako přı́stupovou jednotku pro adresář C:\Windows\system32. 2. Přiřazenı́ pı́smene virtuálnı́mu disku vytvořené v předchozı́m úkolu využijte při kopı́rovánı́ souboru charmap.exe, který je v uvedeném adresáři (a tedy i na virtuálnı́m disku), na disk D:. 3. Zrušte přiřazenı́ pı́smene virtuálnı́ho disku, které jste vytvořili v předchozı́ch úkolech, a soubor, který jste nakopı́rovali na disk D:, smažte. 1.2.4 Synchronizace a zálohovánı́ Poměrně častým úkonem při práci s daty je synchronizace a zálohovánı́ dat. Jde o to, abychom s minimálnı́m úsilı́m zajistili zjištěnı́ rozdı́lů mezi původnı́m a novým umı́stěnı́m a abychom měli na vı́ce mı́stech aktuálnı́ synchronizovaná data. XCOPY kopı́ruje nejen soubory, ale zvládne i celé adresářové struktury. Má také dalšı́ funkce, dı́ky kterým ho lze použı́t pro pokročilejšı́ zálohovánı́ rekurzı́vně (parametr /s) zkopı́ruje celý adresář z prvnı́ho parametru na disk G: (to může být třeba USB flash disk), pokud je některý podadresář ve struktuře prázdný, nezkopı́ruje ho xcopy d:\dopisy g:\ /s /e totéž, ale navı́c kopı́ruje i prázdné adresáře (empty) xcopy d:\dopisy g:\ /s /m kopı́ruje pouze soubory s nastaveným atributem archivovat, tento atribut po kopı́rovánı́ na zdroji vždy odstranı́ (je pak nastaven při následovné změně souboru) – při opakovaném použı́vánı́ přı́kazu zálohujeme pouze ty soubory, které se od poslednı́ho zálohovánı́ změnily xcopy d:\dopisy g:\ /s /d porovnává datum poslednı́ změny každého souboru ve zdrojovém a cı́lovém adresáři (také rekurzı́vně v podadresářı́ch) a kopı́ruje jen ty soubory, které byly změněny od poslednı́ho zálohovánı́ xcopy d:\dopisy g:\ /s $ 1.2 ADRESÁŘE, SOUBORY A PAMĚŤOVÁ ZAŘÍZENÍ 9 budou kopı́rovány pouze soubory, které byly změněny po zadaném datu (25. 12. 2010, formát je měsı́c–den–rok), a to rekurzı́vně i v podadresářı́ch xcopy d:\dopisy g:\ /s /L > seznam.txt parametr /L znamená, že ve skutečnosti se nebude kopı́rovat, jen bude vypsán seznam souborů, které by byly kopı́rovány (zde je přesměrován do souboru) xcopy d:\dopisy g:\ /s /h /k kopı́ruje také skryté a systémové soubory (parametr /h) a navı́c zachová atributy (napřı́klad jen pro čtenı́, systémový, apod., parametr /k) xcopy d:\dopisy g:\ /s /u provede pouze aktualizaci (update), kopı́ruje ze zdroje jen ty soubory, které v cı́li již existujı́ xcopy d:\dopisy \\pocitac\evidence /s /z parametr určený pro kopı́rovánı́ v sı́ti, pokud dojde k přerušenı́ kopı́rovánı́, dokáže po obnovenı́ spojenı́ navázat a pokračovat v kopı́rovánı́ (také ukazuje procento průběhu kopı́rovánı́) xcopy d:\dopisy g:\ /s /d:12-25-10 ROBOCOPY zdroj cı́l určenı́_souborů parametry „robustnı́“ kopı́rovánı́ – tento nástroj najdeme až od verze Vista (ale přı́kaz xcopy odstraněn nebyl, existujı́ simultánně), je navržen prakticky přı́mo za účelem zálohovánı́ a rozsáhlých přesunů datových struktur jednoduše zálohuje všechny soubory z prvnı́ho umı́stěnı́ do druhého umı́stěnı́ (bez podadresářů), určenı́ souborů je výchozı́ (*.*, tedy všechny) robocopy D:\mojedata \\server\D$\zaloha podobně, zálohujeme na server, jehož adresu jsme zadali ve formě UNC, všimněte si, jakým způsobem jsme zadali adresář na disku D: na serveru (vzpomı́náte na skrývánı́ názvů sdı́lených položek?) robocopy D:\mojedata G:\zaloha *.xlsx pouze excelovské soubory (se zadanou přı́ponou) robocopy D:\mojedata G:\zaloha /e /np prvnı́ parametr určuje, že se má kopı́rovat i obsah podadresářů, včetně prázdných, druhý parametr způsobı́, že se během kopı́rovánı́ nezobrazuje průběh, což šetřı́ čas robocopy D:\mojedata G:\zaloha /s /np /mir prvnı́ parametr znamená, že budou kopı́rovány i podadresáře, ale narozdı́l od /e se přı́padný prázdný adresář ze zdroje v cı́li neobjevı́, druhý parametr již známe, třetı́ určuje, že se má provést zrcadlenı́ (mirroring) – celá struktura ze zdroje se zohlednı́ v cı́li (berou se v úvahu změny, souborů beze změn si přı́kaz nebude všı́mat), a pokud byl od poslednı́ zálohy některý prvek ve zdroji smazán, bude smazán i v cı́li (pozor, to může být za určitých okolnostı́ nebezpečené) robocopy D:\mojedata G:\zaloha /s /np /mir /log:zaloha.log totéž jako předchozı́, navı́c je proces zálohovánı́ logován do zadaného souboru (taktéž – výstup přı́kazu nebude vypisován na obrazovku, ale pouze do log souboru) robocopy D:\mojedata G:\test /s /create jakási polovičnı́ simulace kopı́rovánı́ – v cı́lovém adresáři pouze vytvořı́ adresářovou strukturu stejnou jako je ve zdroji, soubory v cı́li sice vytvořı́, ale s nulovou délkou (tj. vpodstatě zkopı́ruje pouze obsah adresářů, obsah souborů nikoliv) robocopy D:\mojedata G:\zaloha $ 1.2 ADRESÁŘE, SOUBORY A PAMĚŤOVÁ ZAŘÍZENÍ 10 Veškeré možnosti robocopy zde nebudeme probı́rat – je možné napřı́klad pracovat s atributy souborů a adresářů (včetně atributu archivace), vylučovat určité soubory a adresáře z kopı́rovánı́, filtrovat podle data změny souborů a pracovat s časovými razı́tky, odložit kopı́rovánı́ na restart systému (aby bylo možné kopı́rovat i ty soubory, které jsou obvykle uzamknuté systémem), přesouvat mı́sto kopı́rovánı́, optimalizovat kopı́rovánı́ po sı́ti pro nižšı́ propustnost, atd. Dalšı́ informace: • • • • http://social.technet.microsoft.com/wiki/contents/articles/robocopy-and-a-few-examples.aspx http://www.sevenforums.com/tutorials/187346-robocopy-create-backup-script.html http://ss64.com/nt/robocopy.html http://www.xxcopy.com/xxcopy30.htm Úkoly 1. Zjistěte v nápovědě přı́kazu robocopy, jak lze zálohovat celý oddı́l disku C: na server tak, aby se zálohovánı́ netýkalo souboru pagefile.sys ani adresáře ”System Volume Information”, aby se zálohovala–zrcadlila celá adresářová struktura a logovalo se do souboru vysledek.log. Poznámka: v reálu by vyloučených souborů a adresářů bylo samozřejmě vı́ce. C 2. Sestavte přı́kaz, kterým zálohujete složku Dokumenty ze svého profilu (celou včetně obsahu – rekurzı́vně) na disk F: (to může být třeba USB flash disk), a to tak, že jsou zálohovány pouze soubory s nastaveným atributem pro archivaci (během zálohovánı́ tento atribut odstraňujte). Použijte jeden z výše uvedených přı́kazů. 3. Sestavte přı́kaz, kterým zálohujete celou složku se všemi profily (rekurzı́vně) se stejným chovánı́m k atributu pro archivaci jako v předchozı́m úkolu, ale cı́lem bude adresář nazvaný podle názvu tohoto počı́tače na serveru \\fileserver, a to tak, aby přı́kaz dokázal v přı́padě poruchy sı́tě po obnovenı́ spojenı́ navázat na předchozı́ zálohovánı́. R 4. Pro přı́kaz robocopy existuje grafické uživatelské rozhranı́ (GUI) přı́mo od Microsoftu. Pokuste se o tomto GUI zjistit vı́ce. 1.2.5 Údržba pamět’ových zařı́zenı́ Při údržbě pamět’ových zařı́zenı́ jako celku můžeme využı́t tyto přı́kazy: (pouze Windows s DOS jádrem) definuje pracovnı́ oblasti disku (partitions, logické disky), po jeho použitı́ je nutné logické disky zformátovat FDISK Poznámka: Ve Windows s NT jádrem použı́váme grafickou konzolu Správa disků (diskmgmt.msc) lokálně nebo ke správě vzdáleného počı́tače, kterou však nelze ovládat programově (ve skriptu). $ E 1.2 ADRESÁŘE, SOUBORY A PAMĚŤOVÁ ZAŘÍZENÍ 11 FORMAT X: zformátuje zadaný disk X: (připravı́ k použitı́, vytvořı́ souborový systém, tedy umožnı́ na disk ukládat soubory), obsah disku samozřejmě vymaže. Pracuje se souborovým systémem FAT (po zadánı́ určitých parametrů také FAT32). Výchozı́ nastavenı́ (chovánı́) tohoto přı́kazu je odlišné v systémech s DOS a NT jádrem. $ (pouze Windows s DOS jádrem, ale může nedokumentovaně fungovat i na některých NT verzı́ch) vytvořı́ systémový disk (nahraje nezbytnou část operačnı́ho systému) format X: /U (Windows s DOS jádrem; v NT je tato volba výchozı́) hluboké formátovánı́; u běžného formátovánı́ je pouze přepsána FAT (tabulka obsazenı́ disku), tedy soubory je možné ještě obnovit, u hlubokého formátovánı́ je celý disk přepsán symboly s ASCII kódem #0 format X: /Q (Windows s NT jádrem, v DOS je výchozı́) rychlé formátovánı́, nemažou se data format X: /FS:souborový_systém (Windows s NT jádrem) formátuje na zadaný souborový systém, můžeme použı́t FAT, FAT32 nebo NTFS format X: /S MOUNTVOL pracuje s přı́pojnými body diskových oddı́lů (je to obdobná funkce jako přı́pojné body v unixových systémech). Účelem je připojovat diskové oddı́ly (ale také výměnná zařı́zenı́) bez nutnosti přiřazovánı́ pı́smen. $ Můžeme vytvořit nebo zrušit přı́pojný bod, a nebo jen zobrazit diskové oddı́ly, které lze připojit. vypı́še krátkou nápovědu a seznam diskových oddı́lů, které jsou k dispozici (at’ už připojené nebo nepřipojené), u připojených vidı́me také přidělené pı́smeno jednotky nebo adresář bodu připojenı́ mountvol c:\disky\prvni /L zjistı́me, co konkrétně je v zadaném adresáři připojeno (pokud se jedná o bod připojenı́) mountvol c: /L zjistı́me, kterému oddı́lu je zadané pı́smeno jednotky přiřazeno (je to vpodstatě varianta předchozı́ho přı́kazu) mountvol c:\disky\prvni \\označenı́svazku připojı́me svazek (jeho označenı́ zjistı́me předchozı́mi vypisovacı́mi přı́kazy) do adresáře prvni (tento adresář musı́ už existovat), v tomto adresáři pak najdeme v adresářové struktuře obsah připojeného svazku mountvol c:\disky\prvni /D zrušı́me přı́pojný bod (odpojı́me) mountvol Diskové oddı́ly, které lze připojit, jsou označeny takto: \\?\Volume{označenı́ GUID}\ kde označenı́ GUID (Global Unique Identifier) je jednoznačné určenı́ zařı́zenı́ nebo jeho části (zde oddı́lu na disku), napřı́klad \\?\Volume{865f1ff0-a863-11d9-9f02-806d6172696f}\ Pozor, mountvol pracuje na nižšı́ úrovni (na úrovni jádra) než přı́kaz subst pro virtuálnı́ disky. Důsledkem je, že potřebujeme vyššı́ přı́stupová oprávněnı́, označenı́ disků nenı́ zrovna intuitivnı́ a také mountvol nevidı́ virtuálnı́ disky vytvořené přı́kazem subst. E 1.2 ADRESÁŘE, SOUBORY A PAMĚŤOVÁ ZAŘÍZENÍ 12 Úkoly 1. Zjistěte, které oddı́ly disku jsou připojeny a pod jakými pı́smeny. Existujı́ nějaké nepřipojené oddı́ly? C 2. Vyberte si jakýkoliv oddı́l z výpisu předchozı́ho přı́kladu a zjistěte, kde v registru se jeho GUID nacházı́. 1.2.6 Dalšı́ přı́kazy START Abychom spustili nějaký program v Přı́kazovém řádku, stačı́ napsat jeho jméno (přı́p. s cestou k tomuto programu) a potvrdit klávesou Enter . Tento přı́kaz však při spouštěnı́ programu rozšiřuje naše možnosti předevšı́m tak, že umožňuje spuštěnı́ programu řı́dit pomocı́ parametrů. Napřı́klad program notepad.exe je Windows aplikace Poznámkový blok. V Přı́kazovém řádku tuto aplikaci můžeme spustit několika způsoby: spustı́ Poznámkový blok, jakobychom použili grafické prostředı́, Přı́kazový řádek nečeká na ukončenı́ aplikace a hned zobrazı́ prompt START notepad.exe provede totéž START /wait notepad.exe spustı́ aplikaci a počká na jejı́ ukončenı́, teprve pak zobrazı́ prompt a očekává přı́kazy START /min notepad.exe aplikace se spustı́ minimalizovaná (přepı́nač může mı́t v někt. Windows tvar /m) START /max notepad.exe aplikace se spustı́ maximalizovaná START /low notepad.exe aplikace se spustı́ s nı́zkou prioritou (vysoká priorita se určuje parametrem /high) START notepad.exe soub.txt spustı́ aplikaci a předá jı́ zbytek řádku jako parametry START soub.txt spustı́ aplikaci ve Windows asociovanou s přı́ponou TXT (obvykle Poznámkový blok) a jako parametr jı́ předá soubor soub.txt START /i cmd spustı́ nové okno Přı́kazového řádku (cmd.exe) jako by bylo spuštěno přı́mo z Windows (nové okno apod.) START explorer.exe /e,d:\clanky spustı́ Průzkumnı́ka Windows se zadanými parametry – parametr /e patřı́ již programu explorer.exe, ne start, způsobı́, že hned po startu je zadaný adresář (nebo disk, zde d:\clanky) aktivnı́ $ notepad.exe ASSOC, FTYPE přı́kazy pro definovánı́ asociacı́ přı́pon souborů a programů. Prvnı́ přı́kaz sloužı́ k přiřazenı́ typu souboru dané přı́poně, druhý pak k přiřazenı́ aplikace danému typu souboru. Syntaxe: ASSOC přı́pona=typ FTYPE typ=aplikace Napřı́klad: assoc vypı́še seznam asociacı́ přı́pon a typů souborů 1.3 PROMĚNNÉ 13 ftype vypı́še seznam přiřazenı́ typů souborů a aplikacı́ assoc .htm=textfile souborům s přı́ponou HTM je přiřazen typ „textfile“, to znamená, že soubor s touto přı́ponou se po poklepánı́ otevře v programu určeném pro tento typ (obvykle Poznámkový blok) assoc .html=htmlsoubor pro soubory s přı́ponou HTML jsme vytvořili nový souborový typ assoc .abc= odstranili jsme asociaci definovanou pro přı́ponu ABC ftype htmlsoubor=pspad.exe %1 souborovému typu vytvořenému v předchozı́m přı́kazu jsme přiřadili aplikaci PSPad, má se vždy spustit s jednı́m parametrem, kterým je název otevı́raného souboru (tj. když v grafickém rozhranı́ poklepeme na soubor s danou přı́ponou, otevře se v této aplikaci) ftype htmlsoubor= odstranili jsme nadefinovaný souborový typ EXPAND rozbalenı́ souborů s přı́ponou CAB (jde o archivy podobně jako napřı́klad ZIP) expand zdroj.cab d:\cı́l rozbalı́ zadaný soubor do adresáře, který je druhým parame- trem přı́kazu rozbalı́ soubory s názvem zadaným maskou do adresáře, který je druhým parametrem expand zal*.cab f:\rozbalene Zajı́mavý seznam přı́kazů s vysvětlenı́m je napřı́klad na http://commandwindows.com/. Úkoly 1. Spust’te některou menšı́ aplikaci s grafickým rozhranı́m (notepad.exe, calc.exe, apod.) s nižšı́ a potom naopak vyššı́ prioritou, a to s minimalizovaným oknem. Výsledek zkontrolujte ve Správci úloh nebo Process Exploreru. C 2. V nápovědě přı́kazu start zjistěte, jaké dalšı́ přepı́nače lze použı́t pro nastavenı́ priority spouštěné aplikace. 3. Vyzkoušejte všechny uvedené přı́klady spouštěnı́ aplikacı́ a souborů s asociovanou přı́ponou. 4. Asociujte přı́ponu .XXX s typem „txtfile“. Pak vytvořte v pracovnı́m adresáři nový soubor s touto přı́ponou (vzpomeňte si na copy con) a z Přı́kazového řádku tento soubor otevřete (pak zase uzavřete). 5. Asociaci vytvořenou v předchozı́m úkolu zkontrolujte v registru (najděte klı́č s názvem .xxx). 6. Vytvořte nový souborový typ textovysoubor a přiřad’te mu kteroukoliv aplikaci, která umı́ zobrazit textové soubory (nezapomeňte na parametr za názvem aplikace). Pak s tı́mto souborovým typem asociujte přı́ponu .XXX a výsledek opět zkontrolujte v registru. 7. Uklid’te po sobě – soubor s přı́ponou XXX, který jste vytvořili v předchozı́ch úkolech, smažte. Potom odstraňte také vytvořenou asociaci a souborový typ. R 1.3 PROMĚNNÉ 1.3 14 Proměnné Z předchozı́ho semestru již vı́me, že na Přı́kazovém řádku lze použı́vat proměnné, které obvykle chápeme jako řetězcové. Vı́me také, že existujı́ • systémové proměnné – definované v systému, společné pro všechny uživatele, v registru je najdeme v klı́či O HKLM/System/CurrentControlSet/Control/Session Manager/Environment • uživatelské proměnné – totéž, ale definované uživatelem a platné jen pro něj, v registru je najdeme v klı́čı́ch HKCU/Environment HKCU/Volatile Environment • dynamické proměnné – jejich obsah je při každém volánı́ generován dynamicky (nejsou nikde fyzicky uloženy), nelze do nich ukládat ani vytvářet vlastnı́ nové, jsou to např. TIME, RANDOM, ERRORLEVEL a dalšı́, nejsou uloženy v registru. Proces má své vlastnı́ prostředı́, ve kterém běžı́ a kde má uloženo vše, co potřebuje a k čemu má přı́stup. Odtud máme název proměnné prostředı́ – jsou to prostě proměnné, které má proces namapovány ve svém prostředı́. Jde bud’ o proměnné, které si proces importoval ze systémových či od uživatele, ale také o proměnné, které si proces vytvořil pro svou vlastnı́ potřebu. Dynamické proměnné nejsou mapovány do prostředı́ procesu, pouze systémové a uživatelské. V Přı́kazovém řádku pracujeme s proměnnými (kromě dynamických) pomocı́ přı́kazu set, který sloužı́ k výpisu seznamu proměnných (přı́padně lze vypsat jen některé proměnné – zadáme řetězec, který se má vyskytovat v jejich názvu), a dále k vytvářenı́ nových proměnných či změně jejich obsahu. Dále využı́váme přı́kaz echo, který vypisuje jakékoliv řetězce včetně proměnných. Pro výpis dynamických proměnných nelze použı́t přı́kaz set, proto na- Obrázek 1.1: Proměnné prostředı́ procesu přı́klad pı́šeme echo %random%, pokud chceme vypsat Thunderbird v Process Exploreru náhodné čı́slo. Obecně platı́, že pokud chceme hodnotu dynamické proměnné, musı́me ji uzavřı́t do znaků „%“, napřı́klad v parametru přı́kazu echo. Přı́klad 1.4 Několik ukázek pro připomenutı́: set vypı́še seznam definovaných proměnných (kromě dynamických) i s jejich obsahy set computername o název počı́tače) vypı́še obsah proměnné computername (z názvu proměnné je zřejmé, že jde P 1.3 PROMĚNNÉ 15 vytvořı́ novou proměnnou s názvem mojeprom a iniciuje ji řetězcem abc, pokud již existuje, tak pouze změnı́ jejı́ hodnotu set mojeprom = abc vypı́še zadaný řetězec, mı́sto názvu proměnné dosadı́ hodnotu zadané proměnné (obklopenı́ symboly % určuje řetězec k interpretaci, vyhodnocenı́) echo Název počı́tače: %computername% do proměnné můžeme uložit i momentálnı́ obsah jiné proměnné, také v kombinaci s čı́mkoliv dalšı́m set prom=Právě přihlášen: %username% set pomocna = %random% do proměnné pomocna jsme načetli náhodné čı́slo (všimněte si, že proměnná random, která je dynamická, je sice na řádku se „zakázaným“ přı́kazem set, ale tı́mto přı́kazem vlastně nenı́ vypisována, přı́kaz pouze využı́vá jejı́ předem zı́skanou hodnotu) dir %WINDIR% %systemdrive% přesun do adresáře s instalacı́ Windows přesun na systémový disk cd %USERPROFILE% přesun do vlastnı́ho profilu SET PATH=%PATH%;X:\MUJ_PROG přidáváme dalšı́ cestu do proměnné PATH Počı́táme. U přı́kazu set lze použı́t parametr /a. Následujı́cı́ řetězec pak bude považován za matematický výraz. Můžeme použı́vat běžné aritmetické operátory a také některé bitové operace, seznam najdeme ve výpisu set /?. Pokud chceme uvnitř výrazu (za přiřazovacı́m operátorem) použı́t proměnnou, umı́stı́me výraz do uvozovek (potom všechny pı́smenné řetězce vpravo od přiřazovacı́ho operátoru budou považovány za čı́selné proměnné a nahrazeny svou hodnotou). Přı́klad 1.5 Ukážeme si několik přı́kladů: set pom=2 vytvořı́me novou proměnnou a inicializujeme ji na 2 set /a pom=2*(4-3+2) na pravé straně přiřazovacı́ho přı́kazu je výraz, proto musı́me použı́t parametr /a, dı́ky kterému se s výrazem nezacházı́ jako s řetězcem, ale před přiřazenı́m se vypočte set /a ”abc=30-pom” na pravé straně máme proměnnou, proto celý řetězec umı́stı́me do uvo- zovek set /a ”abc=30 % pom” set /a pom+=2 set /a 152*4 použili jsme operátor pro zbytek po celočı́selném dělenı́ (modulo) dalšı́ z forem přiřazenı́ (k proměnné se přičte čı́slo 2) vypı́še výsledek výpočtu (608), použijeme pro rychlé výpočty dynamické proměnné musı́me uzavřı́t mezi symboly procenta (ostatnı́ proměnné můžeme, ale nemusı́me), jinak je za ně dosazeno čı́slo 0; v tomto přı́kazu jsme určili spodnı́ hranici pro generovaná náhodná čı́sla set /a ”%random%+50” set /a 0x2af7 převede zadané hexadecimálnı́ čı́slo na desı́tkové (zde 10999) $ 1.4 DÁVKOVÉ SOUBORY 16 Úkoly 1. Vyzkoušejte si přı́kazy z přı́kladu 1.5 (vytvořené proměnné budou existovat jen do vypnutı́ či restartu počı́tače, takže jich můžete vytvořit kolik chcete). C 2. V nápovědě přı́kazu set najděte seznam podporovaných operátorů (je třeba použı́t nápovědu v textovém režimu set /?). 3. V přı́kladu 1.5 je uveden přı́kaz, kterým lze stanovit spodnı́ hranici pro generovánı́ náhodných čı́sel proměnnou %random%. Zamyslete se nad tı́m, jak lze generovaná čı́sla omezit shora. Nápověda: můžete použı́t zbytek po celočı́selném dělenı́, neztrat’te se v symbolech procent. 1.4 R Dávkové soubory Dávkové soubory jsou soubory s přı́ponou BAT (z anglického batch file). V dávkovém souboru můžeme vytvořit tzv. dávku přı́kazů, tedy posloupnost přı́kazů, která se má provést. Jde o textové soubory, které můžeme editovat napřı́klad pomocı́ programu EDIT či notepad (nebo jakéhokoliv jiného programu pracujı́cı́ho s ASCII soubory), ale přitom to jsou spustitelné soubory jako třeba EXE (ve skutečnosti jsou interně spouštěny jako parametr přı́kazu cmd). Lze je spustit z Přı́kazové řádky nebo přı́mo ve Windows poklepánı́m jako kterékoliv jiné spustitelné soubory. Dávkový soubor může mı́t také parametry (při spuštěnı́ se pı́šou za název BAT souboru, oddělujı́ se mezerou), uvnitř souboru se k nim dostaneme přes proměnné %0, %1, . . . , %9, kde %0 je samotný název dávkového souboru, %1 je prvnı́ parametr, atd. Pokud nebyl parametr zadán, je v přı́slušné proměnné prázdný řetězec. P P Přı́kazy pı́šeme každý na nový řádek. Kromě dřı́ve uvedených přı́kazů použı́váme: REM komentář (remark); všechno od tohoto přı́kazu do konce řádku je považováno za komentář (v některých konfiguračnı́ch souborech se mı́sto přı́kazu rem použı́vá střednı́k) $ tento přı́kaz už trochu známe, sloužı́ k řı́zenı́ výpisu hlášenı́ na obrazovku: $ ECHO ECHO text vypı́še na obrazovku text (nenı́ třeba ho ohraničit uvozovkami) ECHO. zařádkuje na obrazovce (vypı́še prázdný řádek) ECHO ON zapne výpis výstupů přı́kazů na obrazovku (implicitnı́ nastavenı́), napřı́klad pokud v následujı́cı́ posloupnosti přı́kazů je přı́kaz COPY . . . , na obrazovku se vypı́še řádek s tı́mto přı́kazem a dále vše, co samotný přı́kaz posı́lá na výstup, ECHO OFF vypne výpis výstupů přı́kazů na obrazovku ECHO Název tohoto souboru je %0, prvnı́ parametr je %1 vypı́še název a prvnı́ parametr dávkového souboru, ve kterém je tento přı́kaz @přı́kaz vypne výpis na obrazovku u toho přı́kazu, jehož řádek tı́mto znakem začı́ná obvyklé použitı́ přı́kazu @ECHO OFF (přı́kaz sice vypı́ná výstup na obrazovku, ale až od následujı́cı́ho řádku, $ 1.4 DÁVKOVÉ SOUBORY 17 proto na tento řádek musı́me použı́t znak @, aby se nezobrazil), tı́mto řádkem začı́ná většina dávkových souborů CALL soubor.bat spuštěnı́ jiného dávkového souboru; programy EXE a COM lze spustit zadánı́m jejich jména, ale kdybychom totéž provedli s BAT souborem, tak po jeho provedenı́ by původnı́ dávkový soubor (ve kterém byl tento BAT soubor volán) byl násilně ukončen, proto je nutné použı́t přı́kaz CALL $ PAUSE pozastavı́ prováděnı́ dávkového souboru, použı́váme, když chceme, aby si uživatel přečetl text vypsaný na obrazovce (vykonávánı́ dalšı́ch přı́kazů pokračuje po stisknutı́ kterékoliv klávesy) $ GOTO :návěštı́ přı́kaz skoku (narozdı́l od vyššı́ch programovacı́ch jazyků je v dávkových souborech nezbytný), lze odskočit na kterýkoliv řádek souboru, který označı́me návěštı́m REM ukázka odskoku na řádek s návěštı́m :konec :zacatek ... goto :zacatek ... :konec $ M Návěštı́ musı́ vždy začı́nat dvojtečkou (a neobsahuje mezery, ani za tou dvojtečkou), v přı́kazu goto je mezera před celým návěštı́m (tj. před dvojtečkou). SET /p proměnná=výzva vypı́še na obrazovku výzvu, počká až uživatel něco napı́še a stiskne Enter , pak to, co uživatel zadal, uložı́ do proměnné: $ SET /p soub=Zadejte soubor, se kterým budeme dále pracovat: SHIFT posun obsahu parametrů souboru – to, co bylo uloženo v %1, se přesune do %0, obsah %2 se přesune do %1 atd., do %9 se mı́sto původnı́ho obsahu načte následujı́cı́ parametr, použı́vá se, pokud má dávkový soubor vı́ce než 9 parametrů (dostaneme se tak i k desátému a následujı́cı́m). SETLOCAL, ENDLOCAL při použitı́ v dávkovém souboru jsou všechny proměnné vytvořené mezi těmito dvěma přı́kazy pouze lokálnı́ (přesněji lokálnı́ jsou všechny změny souvisejı́cı́ s přı́kazovým prostředı́m, obvykle jde o proměnné), platı́ jen v tomto bloku, a po ukončenı́ interpretace tohoto dávkového souboru (nebo uvedenı́ přı́kazu endlocal) přestanou existovat. Přı́klad 1.6 Ukážeme si použitı́ přı́kazů setlocal a endlocal. @echo off ... setlocal $ 1.4 DÁVKOVÉ SOUBORY 18 set path=%ProgramFiles%\mujprogram;%path% set mojeprom=”Moje proměnná” set /p retezec=Zadejte řetězec, který má být později vypsán: rem (ted’ uživatel něco napsal a stiskl Enter) echo Zadali jste: %retezec% ... rem použı́váme vlastnı́ nastavenı́ proměnné path a proměnnou mojeprom ... endlocal rem ted’ už má proměnná path původnı́ hodnotu (bez našeho přı́davku) rem a proměnné mojeprom a retezec neexistujı́ Přı́kazy setlocal a endlocal majı́ také parametry, napřı́klad lze vypnout či znovu zapnout tzv. rozšı́řenı́ přı́kazů.1 Podrobnosti o rozšı́řenı́ přı́kazů můžeme zjistit napřı́klad v nápovědě přı́kazu cmd. Nejen binárnı́ spustitelné soubory, ale také dávkové soubory mohou do dynamické proměnné errorlevel uložit svůj ukončovacı́ kód. Provádı́ se to přı́kazem E EXIT /B čı́slo Napřı́klad když chceme v dávkovém souboru ukončit jeho běh, můžeme na daný řádek umı́stit přı́kaz $ exit /B 0 (to znamená, že jde o regulérnı́ ukončenı́, k žádné chybě nedošlo). Pokud se rozhodneme pomocı́ proměnné errorlevel rozlišit různé typy chyb, tak napřı́klad při problému s přı́stupem k souboru vypı́šeme hlášenı́ a provedeme exit /B 1, při nesprávně ukončeném kopı́rovánı́ exit /B 2, atd. podle vlastnı́ho rozhodnutı́. Na stránce http://fpf.slu.cz/~vav10ui/obsahy/os/skripty.html najdete krátké ukázky dávkových souborů. Dále je zajı́mavá stránka s vysvětlenı́m parametrů dávkových souborů http://www.robvanderwoude.com/parameters.php. Úkoly 1. Vytvořte dávkový soubor, který na disku, kde máte právo zápisu, vytvořı́ adresář a do něho zkopı́ruje všechny soubory s přı́ponou TXT z adresáře C:\. 2. Vytvořte dávkový soubor, ve kterém • zajistěte, aby nadbytečné výstupy přı́kazů nebyly vypisovány, • prompt nastavte na název právě přihlášeného uživatele (použijte přı́slušnou proměnnou), • vypište právě přihlášeného uživatele (dopište ještě nějaký vysvětlujı́cı́ řetězec) – pokud si nemůžete vzpomenout, jak se jmenuje proměnná obsahujı́cı́ název přihlášeného uživatele, 1 Rozšı́řenı́ přı́kazů ovlivňuje poměrně mnoho přı́kazů (napřı́klad for, assoc, cd, md, prompt, set, atd.). Obvykle rozšiřuje množstvı́ parametrů těchto přı́kazů nebo obohacuje jejich chovánı́. Standardně jsou rozšı́řenı́ přı́kazů zapnuta, což lze ovlivnit bud’ ručnı́m zadánı́m přı́slušného přepı́nače v přı́kazu cmd při spuštěnı́ Přı́kazového řádku, a nebo změnou proměnné comspec. C 1.4 DÁVKOVÉ SOUBORY 19 využijte faktu, že přı́kaz set vypisuje seznam všech proměnných obsahujı́cı́ch zadaný řetězec (tedy stačı́ zadat set user a zjistı́me názvy všech proměnných, které majı́ co dělat s uživateli), • požádejte o zadánı́ řetězce s cestou k některému adresáři (pomocı́ proměnné), • předpokládejte, že uživatel zadal platnou (skutečnou, správnou) cestu k některému adresáři a tento údaj využijte: – nejdřı́v vypište hlášenı́ o tom, že bude následovat strom s adresářovou strukturou v zadaném adresáři, – pak vypište stromovou strukturu v zadaném adresáři (použijte obsah proměnné, kterou jste vytvořili při načtenı́ řetězce od uživatele). 3. Zjistěte, jak lze spustit Přı́kazový řádek bez funkce rozšı́řenı́ přı́kazů. Zjistěte (třeba v nápovědě), jak se zapnutı́ či vypnutı́ rozšı́řenı́ přı́kazů projevı́ na funkcı́ch přı́kazu start. R Kapitola 2 Pokročilejšı́ úlohy na Přı́kazovém řádku Pokračujeme v úlohách na Přı́kazovém řádku. Zaměřı́me se na správu počı́tače a zejména na správu sı́tě včetně vytvářenı́ skriptů, nahlédneme také do PowerShellu. 2.1 Správa sı́tě Upozorněnı́: podrobnějšı́ informace k následujı́cı́m přı́kazům a samozřejmě dalšı́ přı́kazy a přı́klady najdeme ve skriptech (v jejich přı́lohách) do předmětu Počı́tačové sı́tě a decentralizované systémy – jsou na mých stránkách. 2.1.1 Základnı́ přı́kazy pro správu sı́tě Důležité informace, které můžeme potřebovat i jako parametry některých následujı́cı́ch přı́kazů, najdeme v souborech obsažených v adresáři ...\system32\drivers\etc (jsou to textové soubory, třebaže nemajı́ přı́ponu): • • • • networks obsahuje doménové a IP adresy lokálnı́ch sı́tı́, hosts je soubor urychlujı́cı́ mapovánı́ IP adres na známé doménové adresy, services obsahuje informace o známých sı́t’ových službách, protocol totéž o známých sı́t’ových protokolech. Tyto soubory vznikly z důvodu užitné kompatibility sı́t’ového rozhranı́ se stroji s jinými operačnı́mi systémy. Soubory hosts a networks můžeme využı́t pro urychlenı́ překladu názvů, který je za normálnı́ch okolnostı́ prováděn DNS serverem. Jestliže u některé často použı́vané adresy známe dvojici název–IP adresa a vı́me, že IP adresa je staticky přidělena (tudı́ž se nemůže změnit), můžeme tuto dvojici zaznamenat do souboru hosts (pokud jde o adresu konkrétnı́ho uzlu v sı́ti) a nebo networks (pokud jde o adresu sı́tě či podsı́tě) a pak o překlad nemusı́ být zdlouhavě žádán DNS server. 20 P 2.1 SPRÁVA SÍTĚ 21 Dostat se k těmto souborům může být trochu problém, pokud pracujeme v 64bitových Windows a jsme v 32bitovém procesu (což je většina souborových manažerů třetı́ch stran). V 64bitovém systému je totiž adresář System32 také 64bitový (navzdory svému názvu) a při přı́stupu z 32bitového procesu docházı́ k přesměrovánı́. Rozhodně bychom se do adresáře etc nedostali postupným procházenı́m adresářovou strukturou, pouze přı́mým zapsánı́m celé cesty k tomu souboru, se kterým chceme pracovat (napřı́klad C:\windows\system32\drivers\etc\hosts), a nebo pracı́ v 64bitovém procesu. L Typické úlohy, se kterými se při práci se sı́těmi běžně setkáváme, obvykle sestávajı́ z práce s MAC a IP adresami, zjišt’ovánı́ dostupnosti uzlů sı́tě, monitorovánı́ a dalšı́ch. Zde si ukážeme jen několik nejtypičtějšı́ch úloh, s dalšı́mi se setkáme v předmětu Počı́tačová sı́t’ a internet. Na obrázku 2.1 je naznačen vztah mezi jednotlivými vrstvami sı́t’ové komunikace, umı́stěnı́ typických protokolů do jednotlivých vrstev a adresace, která se na daných vrstvách použı́vá. Relačnı́ model ISO/OSI L7 Relačnı́ model TCP/IP POP3, IMAP Aplikačnı́ vrstva SMTP L6 Prezentačnı́ vrstva HTTP, HTTPS DHCP DNS Relačnı́ vrstva L4 Transportnı́ vrstva Transportnı́ vrstva L3 Sı́t’ová vrstva Sı́t’ová vrstva L2 Linková vrstva Fyzická vrstva atd. Aplikačnı́ vrstva L5 L1 FTP, SFTP MAC ICMP, IGMP IP adresy IPv4, IPv6 LLC (IEEE 802.2) LLC porty TCP, UDP Vrstva sı́t’ového rozhranı́ MAC adresy Ethernet, Wi-fi, . . . Obrázek 2.1: Modely ISO/OSI, TCP/IP, protokoly a adresy Dále projdeme několik užitečných přı́kazů pro práci se sı́těmi. IPCONFIG zobrazı́ konfiguraci protokolu TCP/IP a umožňuje také jeho (omezenou) konfiguraci zjištěnı́ všech potřebných informacı́ o sı́t’ových kartách včetně IP adresy, brány, masky podsı́tě a MAC adresy ipconfig /release název_karty uvolněnı́ IP adresy přidělené zadané sı́t’ové kartě (když neuvedeme název karty, jsou uvolněny IP adresy všech karet) ipconfig /renew název_karty obnovenı́ přidělenı́ IP adresy pro zadanou sı́t’ovou kartu (když nenı́ název karty uveden, provede se pro všechny karty) ipconfig /all $ 2.1 SPRÁVA SÍTĚ 22 zobrazı́ záznamy adres přidělených v systému DNS (informace k přı́slušným DNS jménům včetně hodnoty TTL1 ), a to jak ve směru doménové jméno → IP adresa, tak i ve směru opačném (reverznı́ adresy, ty jsou v záhlavı́ označeny řetězcem „in-addr.arpa“); vždy jsou zobrazeny alespoň dva záznamy (localhost a jeho reverznı́ adresa) ipconfig /displaydns Přı́klad 2.1 Chceme zjistit údaje o své sı́t’ové kartě – svou IP adresu, fyzickou (MAC) adresu, masku podsı́tě, adresu svého DNS serveru a dalšı́: ipconfig /all Zjistı́me, že je nějaký problém – máme zřejmě špatně přiřazenu IP adresu (napřı́klad stejnou jako jiný počı́tač v sı́ti, to se občas může stát), proto IP adresu uvolnı́me a pak znovu kartu aktivujeme (znovu požádáme o IP adresu) – předpokládejme, že IP adresu dostáváme přes DHCP, potom si znovu ověřı́me, jakou máme adresu: ipconfig /release ipconfig /renew ipconfig /all PING ověřuje průchodnost připojenı́ k zadanému počı́tači v sı́ti, odesı́lá k tomuto počı́tači pakety a podle zaslaných odpovědı́ určuje, zda je počı́tač dostupný a jaká je odezva připojenı́ (pokud má vzdálený počı́tač firewall nakonfigurovaný tak, aby požadavky ping byly ignorovány, může se počı́tač jevit jako nedostupný) zjistı́, zda je zadaný server dostupný (je dostupný prakticky vždy, tedy pokud se zobrazı́ hláška, že tomu tak nenı́, zřejmě nejsme připojeni k sı́ti nebo je někde na cestě porucha) ping -n 2 www.google.com tento parametr omezı́ (nebo u většı́ho čı́sla navýšı́) počet odesı́laných testovacı́ch paketů, zde na 2; výchozı́ hodnota je 4 pakety ping -t www.google.com počet odesı́laných paketů nenı́ stanoven, posı́lajı́ se opakovaně až do přerušenı́ klávesovou zkratkou Ctrl+C ping www.google.com Přı́klad 2.2 Jako parametr přı́kazu ping lze použı́t i čı́selnou IP adresu. Dokonce to může být i adresa loopback, což je vlastně zpětná smyčka, dı́ky této adrese může počı́tač komunikovat i sám se sebou (resp. procesy na témže počı́tači mezi sebou) přes sı́t’ové protokoly. Adresa loopback je 127.0.0.1, tedy můžeme otestovat: ping 127.0.0.1 1 TTL (Time to Live) je čı́tač uložený v hlavičce IP datagramu, který se při průchodu kteréhokoliv směrovače na cestě snižuje (nejméně) o 1. Hlavnı́m účelem je omezenı́ počtu „bloudı́cı́ch“ datagramů. Pokud hodnota TTL vypršı́ (klesne na 0), směrovač, který vypršenı́ zjistı́, už dál datagram neposı́lá, ale odešle zdroji datagramu informaci o překročenı́ povoleného TTL. $ 2.1 SPRÁVA SÍTĚ 23 Tento přı́kaz je užitečný napřı́klad tehdy, když chceme zjistit, zda je naše sı́t’ová karta funkčnı́. Pokud by přı́kaz hlásil nedostupnost, máme problém se sı́t’ovou kartou. Jestliže máme správně přidělenu IP adresu, ale spojenı́ v některých sı́t’ových aplikacı́ch přesto nefunguje (typicky v internetovém prohlı́žeči), může být problém v nesprávné adrese DNS serveru (to je server, který překládá doménové – slovnı́ – adresy na čı́selné IP adresy a přı́padně zpět). Ověřı́me si přı́kazem, ve kterém použijeme čı́selnou adresu, napřı́klad ping 8.8.8.8 (to je adresa veřejného DNS serveru Googlu; použijeme ji, protože je dobře zapamatovatelná a obvykle bez problémů funguje). Pokud přı́kaz nehlásı́ chyby, pak je určitě problém právě v DNS serveru. Můžeme si nastavit jiný DNS server (jde o i přes „okna“), třeba zrovna tento (jen upozorňuji, že je celkem vytı́žený, má horšı́ propustnost). ROUTE pracuje se směrovacı́mi tabulkami (routing tables); tam je předevšı́m uvedena výchozı́ brána (tj. když nenı́ stanoveno jinak v pravidlech směrovacı́ tabulky, je paket směrován právě na tuto bránu) a taky směrovacı́ pravidla („pakety s cı́lem xxx ved’ na bránu yyy“). $ route print vypı́še směrovacı́ tabulky (lze zadat také upřesňujı́cı́ parametry) route add h IP adresa cı́le i MASK h maska podsı́tě i h brána i METRIC 1 přidá do směrovacı́ tabulky záznam se zadanou IP adresou, maskou podsı́tě, bránou a metrikou (zde je metrika 1), také je možné zadat rozhranı́ (to je IP adresa sı́t’ové karty v tomto počı́tači), lomené závorky samozřejmě nepı́šeme, jsou zde jen pro usnadněnı́ orientace route delete h IP adresa i odstranı́ ze směrovacı́ tabulky záznam pro zadanou IP adresu Přı́klad 2.3 Směrovacı́ tabulka určuje, kam má být který odchozı́ paket směrován. Na desktopu (Windows XP) může směrovacı́ tabulka vypadat třeba takto: C:\> route print ============================================================================ Seznam rozhranı́ 0x1 ........................... MS TCP Loopback interface 0x2 ...00 0f fe 36 52 3a ...... Broadcom NetXtreme Gigabit Ethernet - Packet Scheduler Miniport ============================================================================ ============================================================================ Aktivnı́ směrovánı́: Cı́l v sı́ti Sı́t’ová maska Brána Rozhranı́ Metrika 0.0.0.0 0.0.0.0 193.84.195.1 193.84.195.63 10 127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1 193.84.195.0 255.255.255.128 193.84.195.63 193.84.195.63 10 193.84.195.63 255.255.255.255 127.0.0.1 127.0.0.1 10 193.84.195.255 255.255.255.255 193.84.195.63 193.84.195.63 10 224.0.0.0 240.0.0.0 193.84.195.63 193.84.195.63 10 M 2.1 SPRÁVA SÍTĚ 24 255.255.255.255 255.255.255.255 193.84.195.63 193.84.195.63 1 Výchozı́ brána: 193.84.195.1 ============================================================================ Trvalé trasy: Žádné Počı́tač má v tuto chvı́li přidělenu IP adresu 193.84.195.63. Podı́vejte se, kde v tabulce se tato adresa nacházı́. Všimněte si, že pakety adresované sobě samému jsou směrovány na loopback (127.0.0.1). Brána pro mı́stnı́ segment lokálnı́ sı́tě je 193.84.195.1. Tuto adresu najdeme předevšı́m v údaji Výchozı́ brána. TRACERT určuje trasu k zadaným počı́tačům včetně jejı́ délky pomocı́ protokolu ICMP: $ • v paketu ICMP využı́vá hodnotu TTL, podle přı́padné reakce směrovačů odhadne délku trasy, • nejdřı́v vyšle paket s TTL=1, při předčasném vypršenı́ TTL je vyslán paket s TTL=2, pak TTL=3, atd., dokud neobdržı́ kladnou odezvu. Parametrem -h můžeme omezit počet směrovánı́, aby při nemožnosti dosaženı́ cı́le přı́kaz nepracoval zbytečně dlouho. zobrazı́ cestu k danému serveru včetně časových údajů (nejkratšı́, průměrná a nejdelšı́ doba) tracert -h 5 www.google.com zajı́má nás pouze prvnı́ch 5 skoků přes směrovače na cestě tracert www.google.com PATHPING vypı́še cestu k zadané adrese a vypočı́tá statistiky souvisejı́cı́ s jednotlivými úseky cesty (vpodstatě náročnost úseků cesty). Jde o kombinaci funkcı́ přı́kazů ping a tracert – je nejen určena trasa přes směrovače k danému cı́li, ale ke každému směrovači jsou posı́lány pakety podobně jako u přı́kazu ping. Takto lze zjistit spolehlivost cest k jednotlivým směrovačům (počet ztracených paketů, dobu odezvy apod.) a tı́m napřı́klad odhadnout, kde na cestě docházı́ k problémům s doručovánı́m paketů. $ zjistı́ stav cesty k zadanému serveru, vypı́še podrobnou statistiku cesty (generovánı́ statistiky může trvat i několik minut) pathping www.google.com Výstup můžeme upřesnit zadánı́m parametrů, také lze stanovit jiný výchozı́ počı́tač. Přı́kaz je užitečný napřı́klad tehdy, když cesta k některému cı́li vykazuje hodně špatnou propustnost, a my potřebujeme zjistit, na kterém úseku je problém. NETSTAT tento program zobrazuje statistiku protokolů TCP/IP vypı́še základnı́ statistiku (nevšı́má si aplikacı́, které pouze naslouchajı́, vypisuje pouze TCP spojenı́) netstat -a vypı́še celou statistiku netstat $ 2.1 SPRÁVA SÍTĚ netstat netstat netstat netstat 25 -a -o vypı́še celou statistiku, přidá sloupec s PID přı́slušného procesu -ao totéž (přepı́nače můžeme sdružovat do jediného řetězce) -ano navı́c mı́sto doménových vypisuje IP adresy -ab > seznam.log vypı́še všechny procesy (názvy i PID), které právě komuni- kujı́ se sı́tı́ (jakkoliv), výsledek uložı́ do zadaného souboru (opět jsme přepı́nače shrnuli k jedné pomlčce) netstat -e základnı́ statistika pro Ethernet (počet odeslaných a přijatých paketů, počet chyb apod. – týká se protokolů rodiny TCP/IP) netstat -es podrobná statistika všech protokolů z rodiny TCP/IP netstat 2 vypisuje svůj výstup opakovaně každé dvě sekundy (můžeme zadat jakýkoliv interval), činnost přı́kazu lze ukončit jen klávesovou zkratkou Ctrl+C ARP Arp je protokol převádějı́cı́ IP adresy na fyzické (MAC) adresy, tento přı́kaz tedy souvisı́ s překladem adres. Fyzická adresa je v sı́ti zjišt’ována odesı́lánı́m tzv. Arp paketů s dotazy. Aby nebylo nutné opakovaně posı́lat tyto pakety, udržuje každé sı́t’ové zařı́zenı́ (tj. také zvlášt’ každá sı́t’ová karta) mezipamět’, do které ukládá dosud zjištěné dvojice IP a fyzických adres (ARP tabulky). ARP tabulku je možné prohlı́žet a přidávat i mazat záznamy. $ zobrazı́ ARP tabulku, také vidı́me, které záznamy jsou dynamické (automaticky vytvořené z komunikace) a které statické (ručně vložené) arp -s 123.123.123.123 00-12-34-56-78-9A přidá do ARP tabulky statický záznam se vztahem zadané IP adresy a MAC (fyzické) adresy, MAC adresa se zadává v hexadecimálnı́ch čı́slech s pomlčkami arp -d 123.123.123.123 odstranı́ z ARP tabulky záznam pro zadanou IP adresu arp -d * odstranı́ z ARP tabulky všechny záznamy arp -a Lze také přidat parametr s určenı́m IP adresy sı́t’ové karty, pro kterou daná ARP tabulka platı́ (každá karta má svou tabulku), což má smysl pouze v přı́padě, kdy je v provozu vı́ce než jedna sı́t’ová karta. Přı́klad 2.4 Na desktopu s jedinou sı́t’ovou kartou je dost pravděpodobné, že ARP tabulka (tedy tabulka sousedů) bude vypadat takto: C:\> arp -a Rozhranı́: 193.84.195.63 --- 0x2 internetová adresa fyzická adresa 193.84.195.1 00-0d-66-2c-7a-00 typ dynamická Je to z toho důvodu, že v současných ethernetových sı́tı́ch mı́vajı́ tyto uzly jediného souseda – přepı́nač nebo směrovač, ke kterému jsou připojeny (a to je také jim přiřazená brána, přes kterou kumunikujı́ se světem, všimněte si adresy). M 2.1 SPRÁVA SÍTĚ 26 Úkoly 1. Prohlédněte si obsah souborů networks, hosts, services a protocols v adresáři ...\system32\drivers\etc (pozor, pokud pracujete na 64bitovém systému). C 2. Zjistěte svou IP a MAC adresu, a také masku podsı́tě. 3. Zobrazte seznam informacı́ o DNS názvech (včetně přı́slušné IP adresy, evidovaných hodnot TTL atd.). 4. Vyberte si jakýkoliv server na sı́ti (třeba svůj mail server nebo server, který použı́váte při vyhledávánı́) a zjistěte jeho dostupnost, při testu použijte pouze dva pakety. 5. Vypište směrovacı́ tabulky na vašem počı́tači. Všimněte si, jakou metriku má zařı́zenı́ s IP adresou začı́najı́cı́ čı́sly 127.0.0. 6. Porovnejte výpisy přı́kazů tracert a pathping pro tentýž server. 7. K serveru použitému v úkolu 4 zjistěte trasu (adresy) včetně určenı́ časové náročnosti trasy k jednotlivým uzlům (směrovačům) na cestě. 8. Zjistěte, které procesy (všechny) právě pracujı́ se sı́tı́. Zjistěte, jak přidánı́m přı́slušného filtru vypsat pouze ty procesy, které naslouchajı́ na některém portu. 9. Zjistěte, kolik je odeslaných a přijatých unicast paketů, kolik jiných než unicast a zda nejsou hlášeny některé poškozené pakety (chyby) – souhrnně přes TCP/IP (Ethernet). Dále se zaměřte na vypsané statistiky pro jednotlivé protokoly a ověřte, zda nejsou hlášeny některé chyby nebo neúspěšné operace. 10. Projděte si nápovědu přı́kazu netstat (v Přı́kazovém řádku) a zjistěte, kterým přepı́načem lze omezit výpis z předchozı́ho úkolu pouze na protokol TCP. 11. Zobrazte ARP tabulku sı́t’ové karty na vašem počı́tači. 2.1.2 Přı́kaz NET Přı́kaz NET je komplexnı́ nástroj pro práci předevšı́m se sı́tı́, ale taky je určen pro některé úkoly souvisejı́cı́ se správou počı́tače a uživatelů (Windows řady NT). Jeho prvnı́ parametr obvykle určuje oblast, které se budou dalšı́ parametry týkat, můžeme ho chápat jako vnořený přı́kaz. Zde si uvedeme některé z nich podle přı́padného vztahu k nástrojům s grafickým rozhranı́m. Je poměrně dobře zdokumentován v nápovědě i v grafickém režimu (v rejstřı́ku zadáme net). K jednotlivým variantám přı́kazu zı́skáme krátkou nápovědu v textovém režimu (napřı́klad net user /? (stručný popis syntaxe), podrobnějšı́ nápovědu najdeme v grafickém režimu, když do vyhledávacı́ho okna napı́šeme net user . 2.1.3 Přı́kaz NET – uživatelé a skupiny Pro správu uživatelů a skupin sloužı́ podpřı́kazy user, localgroup, group a accounts přı́kazu net. 2.1 SPRÁVA SÍTĚ 27 NET USER (podobně ve Správě počı́tače, položka Mı́stnı́ uživatelé a skupiny ï Uživatelé) práce s uživateli (vypsánı́ informacı́ u uživateli, změna hesla, nový uživatel, deaktivace uživatele, možnost stanovit dobu, kdy se uživatel může přihlašovat, . . . ). $ net user vypı́še seznam uživatelů (v několika sloupcı́ch) net user novak vypı́še podrobné informace o uživateli novak, včetně skupin, do kterých net net net net net patřı́, údajů o hesle (jestli smı́ uživatel měnit heslo, kdy bylo nastaveno, kdy vypršı́, apod.), kdy se uživatel naposledy přihlásil, zda je účet aktivnı́, atd. user novak heslo nastavı́me uživateli novak zadané heslo user novak * jako předchozı́, ale na heslo jsme dotázáni, při jeho zadávánı́ se nezobrazujı́ znaky user administrator heslo nastavı́ heslo administrátora na zadaný řetězec; tı́mto způsobem zcela zaktivnı́me účet administrátora i ve variantách Home (také pro funkce, kdy je vyžadováno zadánı́ hesla administrátora – pokud nenı́ definováno, k těmto funkcı́m se nedostaneme); přı́padně můžeme mı́sto hesla do přı́kazu napsat hvězdičku user novak /active:no zneaktivnı́me účet uživatele (zaktivněnı́ se provádı́ parametrem /active:yes) user novak /passwordchg:no od této chvı́le zadaný uživatel nemá možnost změnit své heslo (toto nastavenı́ je typické napřı́klad pro účet host) net user novak heslo /add /fullname:”Jan Novák” vytvořı́ nového uživatele se zadaným přihlašovacı́m jménem, heslem a zobrazovaným jménem net user novak * /add /fullname:”Jan Novák” totéž, ale na heslo jsme interaktivně dotázáni, při zadávánı́ se nezobrazujı́ znaky zadáme se skriptem, který se má provést při přihlášenı́ uživatele (cesta ke skriptu nesmı́ být absolutnı́, musı́ být relativnı́ vzhledem k adresáři . . . \System32\Repl\Import\Scripts, ale může obsahovat také přechody do nadřı́zeného adresáře ..) net user novak /delete odstranı́ uživatele net user novak /times:Po-Pá,6-16 umožnı́ danému uživateli být přihlášen pouze v zadaných dnech a hodinách (zde v pracovnı́ch dnech mezi 6. a 16. hodinou, dalšı́ možnosti najdeme v nápovědě). net user novak /scriptpath:souborskriptu Lze také použı́t parametr /domain, pak pracujeme s účtem na primárnı́m řadiči domény (když tento parametr nezadáme, pracujeme s lokálnı́m účtem). Přı́kaz net user se dá využı́t také pro automatizaci přidávánı́ nových uživatelů (údaje předem uložı́me do souboru a pak je v cyklu načı́táme – naučı́me se to později v sekci 2.3 o hromadném zpracovánı́ dat na straně 53). NET LOCALGROUP (podobně ve Správě počı́tače, položka Mı́stnı́ uživatelé a skupiny ï Skupiny) práce se skupinami (nová skupina, uživatelé ve skupině, . . . ). S tı́mto přı́kazem pracujeme podobně jako s předchozı́m. net localgroup vypı́še seznam uživatelských skupin $ 2.1 SPRÁVA SÍTĚ 28 vypı́še informaci o skupině Power Users (název skupiny obsahuje mezeru, proto musı́ být uzavřen do uvozovek) – pouze komentář a seznam členů skupiny localgroup uctarna /add vytvořı́ novou skupinu se zadaným názvem (na lokálnı́m počı́tači) localgroup uctarna novak koutova /add do skupiny uctarna přidá (předem vytvořené) uživatele novak a koutova localgroup uctarna marketing\zlatnik /add do skupiny uctarna bude přidán uživatel zlatnik z domény marketing localgroup uctarna novak /delete odstranı́me uživatele ze skupiny localgroup uctarna /delete zrušı́me skupinu net localgroup ”power users” net net net net net Opět použı́váme parametr /domain, pokud chceme pracovat se skupinami na úrovni domény. Ke skutečné práci se skupinami na úrovni domény pak použı́váme přı́kaz net group (tento přı́kaz však lze použı́t pouze na serveru, který je doménovým řadičem). $ NET ACCOUNTS (podobně v Mı́stnı́ch zásadách zabezpečenı́, položka Zásady účtů) správa uživatelských účtů na obecné úrovni (stanovı́me požadavky na vlastnosti účtů, např. minimálnı́ délka hesla, nutnost změnit heslo po určité době, můžeme zde zajistit, aby při změně hesla uživatel jako nové heslo zvolil to, co už někdy dřı́ve jako heslo použı́val – určujeme, kolik změn hesla v minulosti má být tako sledováno, . . . ) $ net accounts vypı́še momentálně nadefinované vlastnosti uživatelských účtů net accounts /minpwlen:8 nastavı́ minimálnı́ požadovanou délku hesla uživatele na net net net net 8 znaků (v mnoha parametrech se vyskytuje zkratka „pw“, to znamená, že se vztahujı́ k nastavenı́ hesla – pasword) accounts /maxpwage:120 heslo platı́ vždy nejvýše 120 dnů, po této době si uživatel musı́ zvolit nové heslo accounts /maxpwage:unlimited uživatel nenı́ nucen pravidelně měnit své heslo, jeho časová platnost nenı́ prakticky omezena accounts /uniquepw:4 uživatel smı́ zvolit heslo, které už měl někdy v minulosti, ale až po nejméně 4 změnách hesla accounts /maxpwage:30 /uniquepw:6 heslo platı́ vždy maximálně 30 dnů, uživatel (při této poměrně restriktivnı́ době) smı́ zvolit i takové heslo, které už měl, ale až po nejméně 6 změnách hesla Přı́klad 2.5 Zobrazı́me seznam uživatelů (Windows 7 Pro na desktopu), zobrazilo se jich 6: C:\> net user Uživatelské účty pro \\DOMACIPC -------------------------------------------------------------------------Administrator Druhyuzivatel Guest Prvniuzivatel Tretiuzivatel User Přı́kaz byl úspěšně dokončen. M 2.1 SPRÁVA SÍTĚ 29 Vytvořı́me novou skupinu a ověřı́me si, zda je v seznamu skupin, jsou podle abecedy: C:\> net localgroup tiskpovolen /add C:\> net localgroup Aliasy pro \\DOMACIPC -------------------------------------------------------------------------*Administrators *Backup Operators *Cryptographic Operators *Distributed COM Users *Event Log Readers *Guests *HomeUsers *IIS_IUSRS *Network Configuration Operators *Performance Log Users *Performance Monitor Users *Power Users *Remote Desktop Users *Replicator *tiskpovolen *Users Prı́kaz byl úspešne dokoncen. M Do nové skupiny zařadı́me dva uživatele (můžeme najednou, v jediném přı́kazu) a pak vypı́šeme seznam členů skupiny: C:\> net localgroup tiskpovolen prvniuzivatel druhyuzivatel /add C:\> net localgroup tiskpovolen Název aliasu Komentár tiskpovolen M Clenové ------------------------------------------------------------------------druhyuzivatel prvniuzivatel Prı́kaz byl úspešne dokoncen. Tak ted’ jsme si to rozmysleli, novou skupinu odstranı́me: C:\> net localgroup tiskpovolen /delete Úkoly 1. Vypište seznam uživatelů, kteřı́ se mohou na počı́tači přihlásit. Najděte v seznamu své přihlašovacı́ jméno a vypište informace o sobě (s využitı́m svého přihlašovacı́ho jména). 2. Sestavte přı́kaz, kterým přidáte nového uživatele se zadánı́m jména, hesla, vypisovaného jména a parametru, který zajistı́, že po uživateli nebude heslo vyžadováno (tento parametr najdete v nápovědě). 3. Vypište seznam skupin, které jsou vytvořeny na vašem počı́tači. C 2.1 SPRÁVA SÍTĚ 30 4. Pokud máte přı́slušná přı́stupová oprávněnı́, vytvořte nového uživatele s názvem TestovaciUzivatel, dále novou skupinu s názvem PokusnaSkupina a nového uživatele do nı́ zařad’te. Potom tohoto uživatele ze skupiny odstraňte a skupinu zrušte. 5. Zjistěte, jaké zásady jsou nastaveny pro uživatelské účty na vašem počı́tači. Předevšı́m zkontrolujte, jaká musı́ být minimálnı́ délka hesla uživatele. 2.1.4 Přı́kaz NET – sdı́lenı́ prostředků a správa domén Každý by měl mı́t přehled o tom, co je na jeho počı́tači nasdı́leno „ven“ a je tedy dostupné z jiného počı́tače, podobně by měl vědět, jak zjistit, co je dostupné na jiných počı́tačı́ch a jak se k tomu dostat. Opět se podı́váme na několik podpřı́kazů přı́kazu net. NET SHARE (podobně ve Správě počı́tače, položka Sdı́lené složky ï Sdı́lené položky) práce se sdı́lenými prostředky (obvykle adresáři/složkami nebo tiskárnami) na našem počı́tači (nasdı́let prostředek, ukončit sdı́lenı́, bez dalšı́ch parametrů zobrazı́ seznam nasdı́lených prostředků), umožňuje také omezit sdı́lenı́ jen na určitý počet uživatelů $ zobrazı́ seznam všech prostředků (složek, tiskáren apod.), které jsou na tomto počı́tači nasdı́leny (jsou přı́stupné z jiného počı́tače na sı́ti). V seznamu jsou také položky neviditelné v nástroji Mı́sta v sı́ti (končı́ symbolem $). net share fakturydod=d:\faktury /remark:”Faktury dodavatelů” vytvořı́ nové sdı́’ lenı́ – adresář d:\faktury bude na sı́ti přı́stupný, a to bud přes nástroje s grafickým rozhranı́m nebo přes UNC adresu \\pocitac\fakturydod (předpokládáme, že pracujeme na počı́tači pocitac), je také připojen komentář prostředku net share fakturydod /delete odstranı́ sdı́lený prostředek, ten přestane být přı́stupný ze sı́tě net share NET FILE (podobně ve Správě počı́tače, položka Sdı́lené složky ï Otevřené soubory) práce se sdı́lenými otevřenými soubory (soubory, které náš počı́tač nabı́zı́ ke sdı́lenı́ a zrovna s nimi někdo pracuje). $ vypı́še seznam otevřených sdı́lených souborů s informacı́ (uživatel na sı́ti, který soubor použı́vá, cesta k souboru, apod.), taky zde zjistı́me ID (identifikačnı́ čı́slo) nasdı́leného souboru net file 2 vypı́še informace o využı́vánı́ nasdı́leného souboru, jehož ID je 2 (to jsme zjistili z předchozı́ho výpisu) net file 2 /close uzavřeme soubor (se zadaným ID), který někdo otevřel ze sı́tě, tı́m také soubor odblokujeme (soubor použı́vaný ze sı́tě je uzamčen, blokován proti změnám) net file NET SESSION (podobně ve Správě počı́tače, položka Sdı́lené složky ï Relace) práce s vnějšı́mi připojenı́mi na náš počı́tač (session neboli relace je navázané připojenı́ mezi našı́m počı́tačem a jiným počı́tačem v sı́ti) $ 2.1 SPRÁVA SÍTĚ 31 vypı́še seznam počı́tačů, ze kterých jsou navázány relace na náš počı́tač (včetně dalšı́ch informacı́ – uživatele, jeho operačnı́ systém, počet prostředků, se kterými na našem počı́tači pracuje a dobu nečinnosti) net session \\pocitac podrobnějšı́ informace o relaci navázané ze zadaného počı́tače net session \\pocitac /delete ukončenı́ relace (pokud nezadáme název počı́tače, ukončı́ se všechny navázané relace) net session NET VIEW zobrazı́ seznam sdı́lených prostředků na určeném počı́tači v doméně net net net net net net view view view view view view $ zobrazı́ seznam počı́tačů v doméně \\pocitac vypı́še seznam sdı́lených prostředků, které nabı́zı́ daný počı́tač /domain vypı́še seznam domén v sı́ti /domain:ucetni vypı́še seznam počı́tačů, které jsou v zadané doméně /network:NW vypı́še seznam serverů v sı́ti Novell Netware /network:NW \\pocitac v sı́ti Novell Netware vypı́še prostředky dostupné na zadaném počı́tači NET USE práce se sdı́lenými prostředky na ostatnı́ch počı́tačı́ch v sı́ti zobrazı́ existujı́cı́ sı́t’ová připojenı́ (cesta na sı́ti, ale pokud je prostředek namapován jako logická jednotka s pı́smenem, pak i označenı́ jednotky) use W: \\pocitac\fakturydod přiřadı́me pı́smeno W zadanému prostředku ze sı́tě, od této chvı́le můžeme k tomuto prostředku přistupovat přes W: use W: \\pocitac\fakturydod /user:uživatel podobně, ale na cı́lovém počı́tači budeme k jednotce přistupovat jako zadaný uživatel (vyžaduje zadánı́ hesla), pokud je cı́lový počı́tač v jiné doméně, musı́me zadat i tuto doménu use W: \\pocitac\fakturydod /delete odstranı́me vazbu use W: /delete totéž (název prostředku nemusı́me zadávat) use /persistent:a momentálně platná připojenı́ budou uložena a zůstanou platná i po restartu (přı́p. vypnutı́ a dalšı́ch startech) počı́tače $ net use net net net net net NET COMPUTER přidá nebo odstranı́ počı́tač z domény net computer \\pocitac /add net computer \\pocitac /del přidá zadaný počı́tač do domény odstranı́ zadaný počı́tač z domény Přı́klad 2.6 Předpokládejme, že máme v lokálnı́ sı́ti dva počı́tače – desktop a notebook. Zjistı́me, co je z desktopu viditelné v lokálnı́ sı́ti: C:\> net share Název sdı́lené položky Prostredek Poznámka --------------------------------------------------------------------------------------ADMIN$ C:\Windows Vzdálený správce C$ C:\ Výchozı́ sdı́lená položka M 2.1 SPRÁVA SÍTĚ print$ C:\Windows\system32\spool\drivers IPC$ themes P:\zaloha\themes Users C:\Users zaloha P:\zaloha EPSON BX620FWD Series USB001 Zarazeno EPSON BX620FWD Series(FAX) USB001 Zarazeno Prı́kaz byl úspešne dokoncen. 32 Ovladace tiskárny Vzdálený IPC EPSON BX620FWD Series EPSON BX620FWD Series (FAX) U notebooku to bude podobné, jen v seznamu nebude tiskárna, fax ani položka print$, protože k notebooku nenı́ připojena tiskárna. Ted’ se podı́váme, co je ve skutečnosti vidět z jiného počı́tače. To můžeme provést dvěma způsoby. Pokud chceme zůstat u téhož počı́tače a jen se na sebe podı́vat „zvenčı́“, stačı́ použı́t přı́kaz net view 127.0.0.1 (nebo dosadı́me svou konkrétnı́ IP adresu). To sice funguje, ale bohužel i tehdy, když samotná sı́t’ nenı́ zcela vpořádku a může to vytvořit falešný pocit jistoty, že je vše funkčnı́. Jinou možnostı́ je sednout si k jinému počı́tači v sı́ti a provést následujı́cı́ postup (začátek je relevantnı́ jen tehdy, pokud je předem nutné zfunkčnit sdı́lenı́ v lokálnı́ sı́ti). Povolı́me služby souvisejı́cı́ s lokálnı́ sı́tı́ (předevšı́m Prohledávánı́ počı́tačů, může být třeba povolit ještě několik dalšı́ch). Počı́tače v lokálnı́ sı́ti by měly být ve stejné pracovnı́ skupině (ověřı́me) a dále může být problém ve vynucenı́ přı́stupu s heslem (bud’ správně nastavı́me heslo na počı́tačı́ch nebo tuto možnost vypneme, napřı́klad ve Windows 7 v Centru sı́t’ových připojenı́ a sdı́lenı́ ï Změnit pokročilé nastavenı́ sdı́lenı́, ve Vistě přı́mo v dotyčném Centru, v XP tato možnost nenı́). Od verze Vista můžeme povolit přı́stup konkrétnı́m uživatelům a nebo uživateli everyone, který je definován společně pro celou sı́t’. Seznam viditelných počı́tačů v lokálnı́ sı́ti bude stejný na obou počı́tačı́ch, pořadı́ je podle abecedy. C:\> net view Název serveru Poznámka -------------------------------------------------------------------------\\DOMACIPC \\NOTEBOOK Prı́kaz byl úspešne dokoncen. M Podı́váme se, co konkrétně je viditelné na desktopu (sedı́me u notebooku). Počı́tač můžeme určit bud’ jeho lokálnı́m názvem (tı́m, který je ve výpisu výše) a nebo jeho IP adresou. Ukážeme si přı́stup pomocı́ IP adresy (předpokládejme, že jsou použı́vány soukromé IP adresy třı́dy „A“, desktop má 10.0.0.1, notebook 10.0.0.2): C:\> net view \\10.0.0.1 Sdı́lené prostředky na \\10.0.0.1 Název sdı́lené položky Typ Použito jako Komentář -------------------------------------------------------------------------EPSON BX620FWD Series Tisk EPSON BX620FWD Series EPSON BX620FWD Series (FAX) Tisk EPSON BX620FWD Series (FAX) themes Disk M 2.1 SPRÁVA SÍTĚ 33 Users Disk zaloha Disk Přı́kaz byl úspěšně dokončen. V seznamu je tiskárna, fax a pak tři sdı́lené složky. Všimněte si, že položky z net share začı́najı́cı́ symbolem $ zde nejsou. Můžeme to provést také naopak (na desktopu si vypsat seznam položek z notebooku): C:\> net view notebook Sdı́lené prostredky na notebook Název sdı́lené položky Typ Použito jako Komentár -------------------------------------------------------------------------Public Disk Users Disk zaloha Disk Prı́kaz byl úspešne dokoncen. M Zůstaneme na desktopu. Pokud máme přı́slušná přı́stupová oprávněnı́, lze nasdı́lené položky z jiného počı́tače volně využı́vat. Napřı́klad si můžeme vypsat obsah adresáře nasdı́leného na jiném počı́tači a otevřı́t některý ze souborů ve sdı́leném adresáři: C:\> dir \\notebook\zaloha Svazek v jednotce \\notebook\zaloha je DATA. Sériové cı́slo svazku je 5A37-8E6F. Výpis adresáre \\notebook\zaloha 18.10.2010 18.10.2010 19.04.2002 18.10.2010 19.04.2000 11.06.2000 M 08:39 <DIR> . 08:39 <DIR> .. 11:32 378 945 disk6.zip 08:39 <DIR> nejnovejsi 09:38 8 512 ukazka1.pas 16:59 58 122 ukazka2.pas Souboru: 2, Bajtu: 274 065 Adresáru: 3, Volných bajtu: 9 649 033 216 C:\> notepad \\notebook\zaloha\ukazka1.pas Pozor, stejným způsobem se dajı́ využı́vat prostředky, které ve výpisu net view nejsou vidět (končı́ symbolem $): dir \\notebook\ADMIN$ Na notebooku si zkontrolujeme, které položky a soubory využı́vá někdo z jiného počı́tače: C:\> net file ID Cesta Uživatelské jméno Počet uzamčenı́ -------------------------------------------------------------------------57 D:\_pocitac\zaloha\ Guest 0 59 D:\_pocitac\zaloha\ukazka1.pas Guest 0 Přı́kaz byl úspěšně dokončen. M 2.1 SPRÁVA SÍTĚ 34 Vidı́me, že někdo přistupoval ke sdı́lenému adresáři a pak také k jednomu souboru. Žádná položka nenı́ uzamčena (což je normálnı́, protože žádný z použitých přı́kazů uzamčenı́ nepožaduje). V přı́padě, že soubor otevřeme v programu, který soubory uzamyká (napřı́klad ve Wordu), můžeme zkusit přı́kaz net session a zjistit, ze kterých počı́tačů v sı́ti jsou využı́vány prostředky našeho počı́tače. C:\> net session Počı́tač Uživatel Typ klienta Otevřenı́ Doba nečinnosti -------------------------------------------------------------------------\\10.0.0.1 Guest 2 00:03:27 Přı́kaz byl úspěšně dokončen. M Zjistı́me si údaje pro dotyčný počı́tač, o kterém ted’ vı́me, že využı́vá prostředky našeho počı́tače: C:\> net session \\10.0.0.1 Uživatelské jméno Počı́tač Přihlášenı́ hosta Typ klienta Doba relace Doba nečinnosti Guest 10.0.0.1 Ne M 00:04:40 00:03:36 Název sdı́lené položky Typ Počet otevřenı́ ----------------------------------------------------------------------zaloha Disk 2 Přı́kaz byl úspěšně dokončen. Uživatel z cizı́ho počı́tače zřejmě dvakrát přistupoval k nasdı́lenému adresáři, soubor už žádný otevřený nemá. Všimněte si, že se na náš počı́tač vlastně ani nepřihlašoval, pracuje pod uživatelským účtem Guest (host). Kdybychom měli zakázán účet hosta, uživatel by takto naše prostředky nemohl využı́vat. Úkoly 1. Zobrazte seznam všech prostředků, které jsou z vašeho počı́tače přı́stupny v sı́ti (které máte nasdı́leny). 2. Na disku, kde máte právo zápisu (předpokládejme D:, může to být i hlouběji v adresářové struktuře) vytvořte adresář s názvem Pokusný adresář (do něj umı́stěte nějaké nepřı́liš důležité soubory a adresáře). Potom tento adresář zpřı́stupněte na sı́ti pod názvem pokusny. Zkontrolujte, zda je opravdu dostupný (název svého počı́tače zřejmě znáte, pokud ne, zjistěte ho). Nakonec zrušte sdı́lenı́ a adresář odstraňte z disku. Rušenı́ můžete odložit na dobu po provedenı́ následujı́cı́ch úkolů v této posloupnosti. 3. Zjistěte, zda na některém počı́tači v sı́ti nejsou nějaké sdı́lené prostředky (týká se i vašeho počı́tače). Dále si vyberte některý počı́tač a zobrazte seznam prostředků, které na sı́ti nabı́zı́. Pokud je některým z těchto prostředků adresář, připojte si ho jako disk pod nějakým vhodným volným pı́smenem a pak si obsah tohoto adresáře prohlédněte v některém souborovém C 2.1 SPRÁVA SÍTĚ 35 manažerovi (přı́padně Průzkumnı́kovi) s využitı́m takto vytvořeného přı́stupu k sı́t’ovému disku. Potom připojenı́ zrušte (můžete odložit na dobu po provedenı́ poslednı́ho úkolu v této posloupnosti). 4. Zjistěte, jestli z některého počı́tače na sı́ti vede relace do vašeho počı́tače (zda někdo zvenčı́ použı́vá prostředky vašeho počı́tače). O zjištěné relaci zjistěte podrobnějšı́ informace (z předchozı́ho výpisu znáte název počı́tače, ze kterého relace vede). 2.1.5 Přı́kaz NET – práce se službami a dalšı́ úlohy Přı́kaz net má speciálnı́ podpřı́kazy pro práci se službami server a workstation, ale také dalšı́ podpřı́kazy pro práci se službami obecně (předevšı́m spuštěnı́ a zastavenı́ služby z přı́kazového řádku). NET CONFIG umožňuje konfigurovat službu Server nebo Workstation (podle dalšı́ho parametru, ta druhá se v české variantě systému může jmenovat Pracovnı́ stanice) $ zobrazı́ momentálnı́ konfiguraci služby Workstation (napřı́klad název počı́tače, doména, a také parametry pro posı́lánı́ dat na sı́t’) config workstation /charcount:32 zajistı́, aby při shromažd’ovánı́ dat posı́laných na sı́t’systém vyčkal, dokud data nejsou v uvedeném množstvı́ (zde 32 B) config server zobrazı́ momentálnı́ konfiguraci služby Server (narozdı́l od Workstation se většinou týkajı́ relacı́ přihlášených uživatelů – kolik uživatelů maximálně může být přihlášeno, kolik souborů může být otevřeno v rámci jedné relace, zda je server skrytý, apod.) config server /autodisconnect:10 /hidden:yes nečinná relace je po 10 minutách nečinnosti ukončena, a také zajišt’ujeme, že nás server „nenı́ vidět“ v seznamu počı́tačů v sı́ti (ale dá se k němu dostat, podle přı́stupových oprávněnı́ uživatelů, když vı́me, jak se jmenuje) config server /srvcomment:”Počı́tač v garáži” /hidden:no nastavı́me řetězec, který se zobrazuje vedle identifikace serveru (napřı́klad také při použitı́ přı́kazu net view), chceme, aby byl počı́tač běžně viditelný v sı́ti (ovšem to je výchozı́ hodnota, obvykle nenı́ nutné ji měnit) net config workstation net net net net Přı́klad 2.7 Ukážeme si, jak vypadá výpis přı́kazu net config server na desktopu (předpokládejme, že služba Server je spuštěna, jinak by nebylo možné konfiguraci vypsat). C:\> net config server Název serveru Komentář serveru \\PC152 PC152 Verze softwaru Windows 2002 M 2.1 SPRÁVA SÍTĚ 36 Server je aktivnı́ na NetbiosSmb (000000000000) NetBT_Tcpip_63B62817-1908-4393-8042-0978A1AC9706 (000ffe5ea237) Skrytý server Maximum přihlášených uživatelů Maximum otevřených souborů na relaci Trvánı́ nečinné relace (minuty) Přı́kaz byl úspěšně dokončen. Ne 10 16384 15 Z výpisu je zřejmé, jak se počı́tač jmenuje, jaký je na něm operačnı́ systém (Windows 2002 znamená Windows XP), základnı́ údaje o protokolech pro provoz mı́stnı́ sı́tě (NetBIOS, NetBT), u NetBT vidı́me v lomené závorce ID sı́t’ové karty a v závorce MAC adresu (je bez oddělovačů, ty si musı́me domyslet). Dále zjistı́me, že server je v sı́ti viditelný, maximálně 10 uživatelů na něm může být najednou přihlášeno (tj. je schopen vést max. 10 relacı́) a existuje také limit na množstvı́ otevřených souborů na jednu relaci. Po 15 minutách je neaktivnı́ relace automaticky ukončena. Tyto hodnoty jsou typické pro desktopovou instalaci a vpodstatě nám nic nebránı́ je změnit. Na skutečném serveru by stanovené limity byly značně kontraproduktivnı́, serverové varianty Windows je majı́ stanoveny značně odlišně. NET STATISTICS vypı́še veškeré protokolované informace (tj. z protokolů) služby Server nebo Workstation (dalšı́ parametr je workstation nebo server) o počtu přijatých nebo odeslaných dat, navázaná připojenı́, spuštěné relace, úspěšné a neúspěšné operace, chybná zadánı́ hesla, různé typy chyb, atd. $ vypı́še se statistika služby workstation (kolik dat bylo přeneseno, chyby přenosu, počet navázánı́ spojenı́, relacı́, atd.) net statistic workstation NET START $ spustı́ zadanou službu net start zobrazı́ seznam všech služeb, které jsou právě spuštěné net start ”terminálová služba” spustı́ službu Terminálová služba (jejı́ spuštěnı́ musı́ být nastaveno na „Ručně“ nebo „Automaticky“; kdyby byl typ spouštěnı́ služby nastaven na „Zakázáno“, spuštěnı́ selže) net start ”indexing service” spustı́ službu Indexing Service – pokud název obsahuje mezery, musı́ být uzavřen do uvozovek net start cisvc provede totéž (každá služba má kromě „lidského“ dlouhého názvu v češtině nebo angličtině také krátký univerzálnı́ název bez mezer a diakritiky, tedy se nemusı́me obtěžovat s uvozovkami) NET STOP $ zastavı́ zadanou službu net stop ”indexing service” zastavı́ službu Indexing Service 2.1 SPRÁVA SÍTĚ 37 provede totéž (zastavı́ službu Indexing Service), zadali jsme zkrácený název služby, který je stejný ve všech jazykových variantách Windows net stop cisvc Úkoly 1. Zjistěte momentálnı́ konfiguraci služeb Workstation a Server. C 2. Vypište statistiky souvisejı́cı́ se službami Workstation a Server. Zjistěte, zda někdo nezadal chybné heslo. 3. Vypište seznam spuštěných služeb. Dále si (napřı́klad v nástroji services.msc) vyberte některou službu, která nenı́ spuštěná, ale zároveň jejı́ spuštěnı́ nenı́ zakázáno, a pomocı́ přı́slušného přı́kazu ji spust’te (nezapomeňte – krátký název). Potom ji ukončete. Ostatnı́: NET PRINT řı́zenı́ tisku po sı́ti – můžeme prohlı́žet a ovládat tiskové úlohy $ vypı́še tiskové úlohy probı́hajı́cı́ na tiskárně HPLaserJet na zadaném počı́tači (název tiskárny je vlastně názvem sdı́leného prostředku, který můžeme zjistit napřı́klad přı́kazem net view) net print \\pocitac 2 vypı́še informace o tiskové úloze č. 2, která probı́há na zadaném počı́tači (čı́slo úlohy zjistı́me z výpisu předchozı́ho přı́kazu) net print \\pocitac 2 /delete odstranı́me zadanou tiskovou úlohu (přı́p. lze pomocı́ jiných parametrů úlohu pouze pozastavit a pak kdykoliv obnovit) net print \\pocitac\hplaserjet NET HELPMSG poskytuje nápovědu k chybovým zprávám Windows (parametrem je čı́slo zprávy) $ pokud se nám při spouštěnı́ některé služby objevila hláška s čı́slem chyby 2182, použijeme tento přı́kaz, který nám zobrazı́ podrobnějšı́ komentář, v tomto přı́padě informace, že jsme se pokusili spustit službu, která je již spuštěna net helpmsg 2182 Některé zprávy jsou poněkud kurióznı́ – při neúspěšném pokusu o spuštěnı́ jedné ze služeb můžete být odkázáni na chybu čı́slo 3534, ale po zobrazenı́ přı́slušné informace zjistı́te, že to znamená „Služba neoznámila chybu.“ NET SEND pokud je spuštěna služba Messenger, lze zası́lat zprávy jiným uživatelům v sı́ti (při testech je použı́vánı́ tohoto přı́kazu zakázáno) NET TIME synchronizace hodin počı́tače s hodinami jiného počı́tače nebo domény, nebo můžeme zobrazit aktuálnı́ čas na jiném počı́tači net time \\CasovyServer synchronizujeme systémové hodiny s hodinami zadaného ča- sového serveru synchronizujeme čas s doménou (také můžeme zadat konkrétnı́ doménu, pokud je jich vı́ce) net time /domain 2.1 SPRÁVA SÍTĚ 38 zobrazı́ název serveru NTP (Network Time Protocol), který je použı́ván (také lze jiným parametrem určit jeden nebo vı́ce NTP serverů, podle kterých budou hodiny synchronizovány) net time /querysntp Úkoly 1. Prověřte, zda na některém počı́tači v sı́ti nenı́ nasdı́lena tiskárna (využijte přı́kazy, které jste použı́vali v předchozı́ch úkolech). Některou si vyberte a vypište jejı́ tiskové úlohy. Pokud nějaké existujı́ (tj. něco je v jejı́ tiskové frontě), zjistěte bližšı́ informace o některé tiskové úloze (čı́slo úlohy zjistı́te v předchozı́m výpisu tiskových úloh tiskárny). C 2. Zjistěte, k čemu sloužı́ přı́kazy net pause a net continue. Najděte (třeba v nápovědě) informaci o tom, co se stane, když prvnı́ z uvedených přı́kazů použijete na službu Server. 3. Zjistěte, co znamená chybová zpráva • č. 3515 (vypı́še se při použitı́ přı́kazu net group na lokálnı́m počı́tači), • č. 1058 (vypı́še se při pokusu o spuštěnı́ některých služeb), • č. 3912 a 3913 (vypı́šou se při nesprávných způsobech zı́skánı́ informacı́ o synchronizaci hodin). 4. Pokud jste připojeni k sı́ti, pokuste se zjistit, zda jsou systémové hodiny na vašem počı́tači synchronizovány s některým serverem (může jı́t o server v doméně nebo na internetu, může nebo nemusı́ to být server s protokolem NTP). 2.1.6 R NetShell Přı́kazem NETSH spustı́me textovou konzolovou aplikaci NetShell (Network Services Shell). Tato konzola sloužı́ ke konfiguraci některých částı́ systému většinou souvisejı́cı́ch se sı́tı́. Pracujeme s moduly (také helper, obvykle dynamické knihovny) a kontexty (sada úloh – přı́kazů pro jednotlivé moduly, každý kontext může odpovı́dat jednomu modulu, některé kontexty mohou mı́t dalšı́ podkontexty). Takže se vlastně jedná o jakési společné pracovnı́ a programové prostředı́ pro běh kontextů uložených v dynamicky linkovaných knihovnách, na momentálnı́m vybavenı́ systému těmito knihovnami záležı́, které kontexty budeme mı́t k dispozici. To, se kterými kontexty můžeme pracovat, tedy závisı́ na verzi, vybavenosti a nastavenı́ operačnı́ho systému. Velký rozdı́l je zejména mezi Windows XP a Windows 7. Obvykle jsou kromě jiných dostupné tyto kontexty: • interface – konfigurace protokolů rodiny TCP/IP (tj. sı́t’ového rozhranı́), má podkontext ip a přı́padně také ipv6 (pro IP verze 6) • routing – funkce souvisejı́cı́ se směrovánı́m, konfigurace směrovacı́ch serverů, má tyto podkontexty: – ip – konfigurace protokolů IP, obsahuje kontexty autodhcp, dnsproxy, igmp, nat, ospf, relay, rip, routerdiscovery (opět podle názvu poznáme jejich funkci) – ipx – konfigurace IPX, obsahuje kontexty netbios, rip, sap P 2.1 SPRÁVA SÍTĚ 39 • ras – konfigurace RAS (Remote Access Server, server vzdáleného přı́stupu), má tyto podkontexty: – ip, ipx, netbeui, appletalk – aaaa – práce s databázı́ AAAA (zkratka z Authentication, Authorization, Accounting, Auditing – prokázánı́ identity, autorizace, práce s účty, audit), která se použı́vá napřı́klad při autentifikaci na sı́ti • dhcp – použı́vá se na DHCP serveru ke konfiguraci DHCP (je v serverových variantách Windows), lze napřı́klad přidat nový DHCP server do seznamu autorizovaných serverů • http (konfigurace protokolu HTTP a HTTPS), ipsec (pracujeme se zásadami a statistikami protokolu IPSec), atd. pro dalšı́ protokoly • firewall – od Windows XP výše, konfigurace vestavěného firewallu • advfirewall – od Visty výše, konfigurace rozšı́řených možnostı́ firewallu • lan, wlan (wireless), mbn (mobile) – konfigurace ethernetové, bezdrátové a mobilnı́ sı́tě • přı́padně dalšı́, tento nástroj lze snadno rozšiřovat Do vybraného kontextu se přepneme zadánı́m jeho názvu (pohybujeme se ve „stromové struktuře“), do nadřı́zeného kontextu se dostaneme zadánı́m .. (dvě tečky, o úroveň výše). Pracuje se zde v textovém režimu, použı́váme pouze přı́kazy specifické pro NetShell. Každý kontext má svou sadu přı́kazů, část je stejná ve všech kontextech, napřı́klad (mnohé přı́kazy se někdy použı́vajı́ s dalšı́mi parametry) • • • • • • • • help zobrazı́ všechny použitelné přı́kazy, je možné také použı́t symbol ? exit odchod z netsh, také je možné použı́t přı́kaz bye show zobrazı́ informace o kontextu set nastavenı́ konfigurace pro daný kontext add přidá položku konfigurace do seznamu (skriptu) delete odstranı́ položku konfigurace dump zobrazı́ konfiguračnı́ skript, přesměrovánı́m ho můžeme uložit do souboru exec spustı́ soubor skriptu (obvykle jde o načtenı́ konfigurace, kterou jsme předchozı́m přı́ka- zem někdy v minulosti uložili do souboru) Přı́klad 2.8 Přı́kazem netsh spustı́me prostředı́ NetShellu; zobrazı́ se typický prompt netsh> (při změně kontextu je promptem momentálnı́ kontext) a dále zadáváme tyto přı́kazy: routing ? zobrazı́me nápovědu ke kontextu routing přesuneme se do kontextu routing, prompt se změnı́ na routing> a můžeme zadávat přı́kazy patřı́cı́ do vybraného kontextu routing show zobrazı́ se informace o tom, co v tomto kontextu můžeme zjistit zobrazı́ se seznam základnı́ch přı́kazů typických jen pro tento kontext s informacı́ pro tyto přı́kazy (jakých DLL knihoven se týkajı́ a jejich GUID), přı́kazy jsou ip a ipx show helper 2.1 SPRÁVA SÍTĚ 40 ip přesuneme se do kontextu ip uvnitř kontextu routing show zobrazı́ se informace o tom, co v tomto kontextu můžeme zjistit (protože jsme v kontextu routing a v jeho podkontextu ip, jedná se většinou o různé směrovacı́ informace týkajı́cı́ se protokolu IP) v předchozı́m výpisu jsme zjistili, že můžeme použı́t tento přı́kaz – vypı́šeme seznam adres ve směrovacı́ tabulce (ke každé položce IP adresa, brána, MAC adresa, metrika apod.) show rtmdestinations .. přesuneme se o úroveň výše (opustı́me kontext ip, jsme v kontextu routing) .. přesuneme se o úroveň výše (opustı́me kontext routing) interface přesuneme se do kontextu interface ip přesuneme se do kontextu ip uvnitř kontextu interface (oba poslednı́ přı́kazy můžeme sjednotit v jediném přı́kazu, a to interface ip) show zobrazı́ se informace o tom, co v tomto kontextu můžeme zjistit (všimněte si, že možnosti jsou jiné než v kontextu ip uvnitř routing, ted’ jde o informace týkajı́cı́ se rozhranı́ protokolu IP) show config show tcpconn zobrazı́me základnı́ konfiguraci rozhranı́ protokolu IP zobrazı́ se tabulka existujı́cı́ch připojenı́ přes protokol TCP (TCP connections)2 zobrazı́ se konfigurace rozhranı́ protokolu IP dump zobrazı́me nápovědu k přı́kazu, který sloužı́ k obnově konfigurace ze zálohy (načtenı́ skriptu s kontextem) exec ? exit ukončı́me práci v interaktivnı́m rozhranı́ NetShellu Kterýkoliv z výše uvedených přı́kazů můžeme zadat i mimo prostředı́ NetShellu, napřı́klad: netsh -c interface show config zobrazı́ konfiguraci rozhranı́ IP bez nutnosti přechodu do prostředı́ NetShellu (přepı́nač -c sloužı́ k zadánı́ kontextu). Dalšı́ přı́kaz netsh -c ras aaaa show authserver zobrazı́ RADIUS server, který se použı́vá k ověřovánı́ identity (pokud ovšem takový server použı́váme, autentizaci lze provádět různými způsoby). To byla krátká ukázka základnı́ho ovládánı́ NetShellu. V následujı́cı́ch přı́kladech se zaměřı́me na konkrétnı́ úlohy. Přı́klad 2.9 Kterýkoliv kontext (jako celek) můžeme zálohovat (záloha se však provádı́ zvenčı́, abychom mohli přesměrovávat výstup): netsh -c interface ip dump > kontextinterip.dat 2 Všimněte si, že se v záhlavı́ výpisu (také u některých jiných přı́kazů) objevuje řetězec „MIB-II“. Jedná se o objektovou databázi, ve které jsou uloženy informace o uzlech v sı́ti. S touto databázı́ pracuje protokol SNMP (pokud použı́váme správu sı́tě přes TCP/IP) a pokud umı́me k MIB II přistupovat (a máme přı́stupová oprávněnı́), můžeme zı́skat hodně zajı́mavých informacı́ o sı́ti. 2.1 SPRÁVA SÍTĚ 41 Výsledek je uložen do textového souboru a umı́stěn do pracovnı́ho adresáře, pokud nezadáme cestu. Tento textový soubor můžeme bud’ pouze zálohovat, nebo exportovat a načı́st na jiném počı́tači, a nebo pozměnit a načı́st se změnami. Výsledkem předchozı́ho přı́kazu je textový soubor, který má přibližně tento obsah (na počı́tači s jednou sı́t’ovou kartou, jejı́ž MAC adresu vidı́me – pozměněnou, IP adresa je přiřazována přes DHCP): # ---------------------------------# Konfigurace rozhranı́ protokolu IP # ---------------------------------pushd interface ip # Konfigurace protokolu IP rozhranı́ pro ”418DA6F5-8B14-4F21-B6AD-43452BF31CA7” set address name = ”418DA6F5-8B14-4F21-B6AD-43452BF31CA7” source = dhcp set dns name = ”418DA6F5-8B14-4F21-B6AD-43452BF31CA7” source = dhcp set wins name = ”418DA6F5-8B14-4F21-B6AD-43452BF31CA7” source = dhcp popd # Konec konfigurace protokolu IP rozhranı́ Přı́kazy pushd a popd sloužı́ k uloženı́ původnı́ho kontextu, načtenı́ nového a opětovném návratu k původnı́mu kontextu. Ze zálohy můžeme kontext kdykoliv obnovit (načı́st), a to i zvenčı́: netsh -c interface ip exec kontextinterip.dat Protože je přechod do určitého kontextu součástı́ skriptu, lze skript načı́st (spustit) také jinak – pomocı́ parametru -f: netsh -f kontextinterip.dat Přı́klad 2.10 Kdykoliv můžeme zı́skat nápovědu, a to i k syntaxi jednotlivých přı́kazů. Napřı́klad pokud jsme v kontextu ip uvnitř kontextu interface, lze se zeptat: show ? show dns ? Zjistı́me, že dotaz na nastavenı́ DNS serveru můžeme formulovat jednoduše tako: show dns Zjistili jsme, jaké DNS servery jsou nastaveny (může jich být i vı́ce, pokud jde o statické adresy). Zjistı́me, co lze nastavovat – přı́kaz set sloužı́ k nastavovánı́ existujı́cı́ch vlastnostı́. set ? Vybereme si nastavenı́ prostředı́ DNS, ale protože neznáme syntaxi, zeptáme se: set dns ? Vypı́še se krátký popis včetně ukázkových přı́kladů. Ted’ už by nám mělo být všechno jasné. Pokud chceme nastavit statickou adresu DNS serveru, použijeme přı́kaz set dns ”Připojenı́ mı́stnı́ sı́tě” static 190.52.192.10 (doplnı́me řetězec označenı́ svého rozhranı́ a skutečnou IP adresu DNS serveru). M 2.1 SPRÁVA SÍTĚ 42 NetShell je součástı́ Windows od verze 2000 (na serverech i desktopech) a různé verze se lišı́ vybavenı́m moduly. Napřı́klad od verze XP přibývá modul (helper) s kontextem firewall. Přı́klad 2.11 Prohlédneme si konfiguraci firewallu ve Windows XP (pokud máte novějšı́ verzi, přesuňte se k přı́kladu 2.12). netsh spustı́me NetShell firewall přesun do kontextu firewall, všechny následujı́cı́ přı́kazy provádı́me v tomto kontextu nejdřı́v si ověřı́me, co vše lze zobrazit show show config show state zobrazı́me konfiguraci firewallu (je celkem obsáhlá) zobrazı́ se momentálnı́ stav firewallu, může vypadat takto: Stav brány firewall: ------------------------------------------------------------------Profil = Standardnı́ Provoznı́ režim = Povolit Režim výjimek = Povolit Režim odezvy na vı́cesměrové nebo všesměrové vysı́lánı́ = Povolit Režim upozorněnı́ = Povolit Verze zásad skupiny = Brána Windows Firewall Režim vzdálené správy = Zakázat Porty, které jsou aktuálně otevřeny na všech sı́t’ových rozhranı́ch: Port Protokol Verze Program ------------------------------------------------------------------Na všech sı́t’ových rozhranı́ch nejsou aktuálně otevřeny žádné porty. zobrazı́ se provoznı́ (operačnı́) režim (porovnejte, co se rozumı́ stavem z předchozı́ho přı́kazu a provoznı́m režimem z tohoto přı́kazu) show opmode tı́mto přı́kazem zjistı́me, co vše lze nastavovat přı́kazem set (tj. daná vlastnost už je definována, ale my ji můžeme změnit) set ? set opmode enable nastavı́me provoznı́ mód na dostupný show allowedprogram zobrazı́ aplikace, které majı́ povoleno přistupovat ven do sı́tě add allowedprogram ? zajı́má nás, jak lze do seznamu přidat dalšı́ aplikaci show portopening zjistı́me porty s nastavenou výjimkou (otevřené) delete portopening ? ze seznamu zjistı́me, že je v něm port, který by tam neměl být, tedy nás zajı́má, jak ho uzavřı́t show service exit vypı́šou se služby přistupujı́cı́ na sı́t’ skončı́me Od verze Vista tento kontext sice existuje, ale doporučuje se použı́t kontext advfirewall firewall. M 2.1 SPRÁVA SÍTĚ 43 Přı́klad 2.12 Od verze Vista se s firewallem zacházı́ trochu jinak. Předně se už nerozlišujı́ povolené/zakázané aplikace, protokoly a porty, ale vše jsou pravidla (rules). Tedy zobrazujeme pravidla, přidáváme pravidla, odstraňujeme je. advfirewall firewall přesuneme se do kontextu advfirewall a hned v tomtéž přı́kazu do jeho podkontextu firewall show ověřı́me, co vše lze zobrazit, zjistı́me, že použitelné je show rule show rule ? požádáme o podrobnosti pokusı́me si nechat vypsat všechna nastavená pravidla, ale seznam je přı́liš dlouhý, pravidla vypadajı́ nějak takto: show rule name=all Název pravidla: Windows Live Messenger (UPnP-In) ---------------------------------------------------------------------Povoleno: Ano Směr: In Profily: Doména,Privátnı́,Veřejná Seskupenı́: Windows Live Messenger LocalIP: Any Vzdálená IP adresa: LocalSubnet Protokol: TCP Mı́stnı́ port: 2869 Vzdálený port: Any Funkce Edge traversal: No Akce: Allow Podobně vypadajı́ i dalšı́ pravidla. Pravidlo je povoleno, směr je „In“, tedy se jedná pravidlo pro přı́chozı́ provoz (pro odchozı́ by bylo „Out“), jsou stanoveny sı́t’ové profily, pro které pravidlo platı́, pravidla jsou seskupována (group) pro snazšı́ správu, dále jsou určeny adresy, protokol, port. Pokud nám nestačı́ konec výpisu (záležı́ na velikosti vyrovnávacı́ paměti Přı́kazového řádku, kolik údajů bude viditelných), pak musı́me přı́kaz spustit mimo prostředı́ NetShellu a výstup směrovat do souboru: netsh advfirewall firewall show rule name=all > d:\vystupfirewall.txt (ale pak je třeba použı́t editor, který zvládá znakovou sadu Latin2, napřı́klad PSPad (je třeba nastavit v menu Zobrazit ï Zobrazenı́ znaků MSDOS) Bohužel musı́me zadat bud’ „all“ nebo konkrétnı́ název pravidla, dále lze filtrovat – omezovat výpis (ale moc možnostı́ nemáme) zkonkrétnili jsme dotaz, chceme všechna pravidla, která jsou dynamicky vytvořená, pro přı́chozı́ provoz a veřejnou sı́t’ show rule name=all type=dynamic dir=in profile=public add rule name=”povolit udp 5000” dir=out protocol=udp localport=5000 action=allow povolili jsme odchozı́ komunikaci na UDP portu 5000 add rule name=”šifrovat 80” protocol=TCP dir=in localport=80 security=authdynenc action=allow takto jsme si vynutili šifrovánı́ přı́chozı́ komuni- kace na TCP portu 80 (o jaký port se asi tak jedná?) M 2.1 SPRÁVA SÍTĚ 44 Přı́klad 2.13 Pro notebook, který přenášı́me mezi umı́stěnı́mi se statickou a dynamickou IP adresou, si můžeme vytvořit dva zástupce nebo dávkové soubory (to se budeme učit později – textové spustitelné soubory s přı́kazy, které se majı́ provést při spuštěnı́ takového souboru). Nejdřı́v si v nápovědě ověřı́me formát přı́kazu: netsh -c interface ip set ? netsh -c interface ip set address ? Ted’ už vı́me, které parametry a v jakém pořadı́ máme zadat, tedy vytvořı́me zástupce nebo dávkové soubory (podle potřeby) s následujı́cı́mi přı́kazy. Prvnı́ z nich je určen ke spuštěnı́ na umı́stěnı́ se statickou adresou: netsh -c interface ip set address name=”Připojenı́ mı́stni sı́tě” source=static addr=123.456.0.5 mask=255.255.0.0 gateway=123.456.0.1 gwmetric=1 Celý přı́kaz by měl být na jednom řádku. Takto nastavı́me statickou IP adresu, masku podsı́tě, bránu, doplnı́me vlastnı́ skutečné údaje. Dalšı́ je pro umı́stěnı́, na kterém použı́váme dynamickou adresu zı́skanou od DHCP serveru: netsh interface ip set address name=”Připojenı́ mı́stni sı́tě” source=dhcp Nastavı́me dynamickou IP adresu, která bude zı́skávána z DHCP. Vytvořı́me dva zástupce na pracovnı́ ploše – jednoho pro statickou adresu a druhého pro dynamickou adresu, do přı́kazového řádku zástupců napı́šeme výše uvedené přı́kazy a oba zástupce vhodně pojmenujeme. Pak stačı́ jen poklepat na jednoho ze zástupců. Prostředı́ NetShell je svými možnostmi přizpůsobeno práci v sı́ti. Počı́tá se přirozeně i s tı́m, že přı́kaz (prostředı́) budeme chtı́t využı́t ke vzdálené správě počı́tačů. Přesun na jiný počı́tač můžeme provést bud’ při spouštěnı́ přı́kazu netsh přepı́načem -r, a nebo přı́mo v interaktivnı́m prostředı́ přı́kazem set: netsh -r počı́tač umožnı́ pracovat v interaktivnı́m prostředı́ vzdáleně na jiném počı́tači tento přepı́nač můžeme použı́t v neinteraktivnı́ formě přı́kazu, když chceme provést některou jednorázovou akci na jiném počı́tači (přidáme jakýkoliv přı́kaz platný v NetShellu) netsh -r počı́tač přı́kaz set machine počı́tač použité v interaktivnı́m režimu v prostředı́ NetShellu sloužı́ k „přesou- vánı́ “ mezi počı́tači set machine pokud nezadáme cı́lový počı́tač, přesuneme se na náš, lokálnı́, počı́tač Úkoly 1. Spust’te prostředı́ NetShell a vyzkoušejte z přı́kladu 2.8 vše, co půjde (na co máte přı́stupová oprávněnı́). Ke každému přı́kazu, který vyzkoušı́te, zobrazte nápovědu, abyste měli přehled o možnostech přı́kazu. 2. Vypište seznam cı́lů ve směrovacı́ tabulce vašeho počı́tače. 3. Vypište tabulku existujı́cı́ch spojenı́ přes protokol TCP. C 2.2 SLOŽENÉ PŘÍKAZY 45 4. Zjistěte, zda se pro autentifikaci použı́vá nějaký RADIUS server (pokud ano, zjistěte, který). 5. Přesuňte se do kteréhokoliv kontextu (raději hlouběji ve struktuře kontextů) a vypište jeho konfiguraci. Potom opust’te prostředı́ NetShell a proved’te totéž, výstup přesměrujte do souboru vypisnetsh.dmp (umı́stěte tam, kde máte právo zápisu). Tento soubor si pak prohlédněte v některém textovém editoru. 6. Pokud pracujete na počı́tači s Windows XP nebo vyššı́mi, vypište konfiguraci firewallu. Zjistěte, které aplikace majı́ povoleno pracovat se sı́tı́, které služby naslouchajı́ na portech a které porty jsou otevřené. Můžete vyzkoušet výpis čehokoliv, co pro tento kontext lze vypsat. U otevřených portů a povolených aplikacı́ se tytéž informace pokuste zjistit i v grafickém prostředı́. 7. Podle přı́kladu 2.13 zobrazte nápovědu pro přı́pad, že chcete interaktivně za běhu systému nastavit způsob zı́skánı́ IP adresy a dalšı́ch potřebných parametrů. Zkontrolujte, které parametry jsou povinné a které se nemusejı́ nebo za určitých okolnostı́ nemohou zadávat. Pokuste se tento přı́kaz sestavit podle nastavenı́ vašeho počı́tače. 8. Sestavte dvojici přı́kazů, která bude určovat parametry DNS serveru taktéž podle umı́stěnı́ počı́tače, podobně jako tomu bylo v přı́kladu 2.13 (jedná se o stejný kontext, jen nenastavujete adresu, ale dns – použijte nápovědu). 2.2 2.2.1 R R Složené přı́kazy Propojenı́ přı́kazů a podmı́něné vyhodnocovánı́ Pokud chceme na jeden řádek umı́stit vı́ce přı́kazů, musı́me je spojit znakem &. Jednou z možnostı́ použitı́ tohoto zřetězenı́ přı́kazů je v Zástupcı́ch, také se použı́vá ve složených přı́kazech (seznámı́me se s nimi v následujı́cı́ podsekci). $ Přı́klad 2.14 REM vyčistı́me obrazovku, vypı́šeme hlášku, prázdný řádek, REM pak obsah pracovnı́ho adresáře: CLS & ECHO Výpis pracovnı́ho adresáře: & ECHO. & DIR Dalšı́ způsob propojenı́ přı́kazů už známe – rouru: Přı́klad 2.15 REM chceme zjistit údaje týkajı́cı́ se hesla uživatele novak: net user novak | find /i ”heslo” (vypı́šou se údaje o tom, kdy bylo heslo naposledy změněno, kdy vypršı́, zda uživatel smı́ měnit heslo, apod.) O 2.2 SLOŽENÉ PŘÍKAZY 46 Přı́klad 2.16 Vytřı́dı́me soubory a adresáře podle atributů. Přı́kaz vypisuje postupně všechny tři skupiny souborů a adresářů. ECHO Skryté: & DIR /a:h & ECHO Systémové: & DIR /a:s & ECHO Pro čtenı́: & DIR /a:r Z unixových systémů byla do Windows řady NT převzata možnost využitı́ výše uvedených symbolů pro podmı́něné vyhodnocovánı́. Pokud symboly & a | zdvojı́me, budou se chovat trochu jinak. • dvojsymbol && znamená konjunkci: – pokud předchozı́ přı́kaz skončil s úspěchem (true), bude vyhodnocen i následujı́cı́ přı́kaz, – pokud předchozı́ přı́kaz skončil s neúspěchem (false), nebude následujı́cı́ přı́kaz vyhodnocován (protože false v konjunkci s čı́mkoliv znamená vždy false v celém výrazu), • dvojsymbol || znamená disjunkci (mezi znaky nesmı́ být mezera): – pokud předchozı́ přı́kaz skončil s úspěchem (true), dalšı́ přı́kaz již nebude vyhodnocován (protože jedno true v disjunkci znamená true v celém výrazu), – pokud předchozı́ přı́kaz skončil s neúspěchem (false), bude vyhodnocen i dalšı́ přı́kaz. Oba operátory můžeme také kombinovat. Typické použitı́ je vypisovánı́ hlášenı́ při správném nebo nesprávném provedenı́ prvnı́ho přı́kazu v pořadı́. Přı́klad 2.17 Chceme vypsat hlášenı́ při chybě: net start fax || ECHO Službu Fax Service se nepodařilo spustit. Chceme vypsat hlášenı́ při bezchybném provedenı́ přı́kazu: net start fax && ECHO Služba Fax Service byla spuštěna. Chceme obojı́: ECHO Spouštı́m službu Fax Service: net start fax && ECHO Služba spuštěna. || ECHO Službu nelze spustit. Přı́klad 2.18 Upravı́me přı́kaz z přı́kladu 2.16. Protože ted’ už přı́kaz bude velmi dlouhý a nevejde se na celý řádek, použijeme jeden z mála způsobů, jak složený přı́kaz rozdělit do vı́ce řádků, závorky (mezi závorkami může být symbol konce řádku): ECHO Skryté: & dir /b /a:h 2>nul && ( ECHO Systémové: & dir /b /a:s 2>nul ) && ( ECHO Pro čtenı́: & dir /b /a:r 2>nul ) Pokud jsou v pracovnı́m adresáři všechny tři typy vypisovaných souborů (předevšı́m prvnı́ dva – skryté a systémové), vypı́šou se všechny tři typy (bez záhlavı́ a zápatı́, pouze seznam souborů a adresářů). Chybový výstup nenı́ vypisován. P 2.2 SLOŽENÉ PŘÍKAZY 47 Jestliže však v pracovnı́m adresáři nejsou žádné skryté nebo systémové soubory, přı́kaz nebude dokončen. Můžeme vyzkoušet napřı́klad v kořenovém adresáři systémového disku (tam jsou všechny tři typy) a v adresáři pro dokumenty uživatele (tam nejsou žádné skryté ani systémové). Bohužel se vypı́še prvnı́ řetězec „Skryté:“, tomu se přı́padně dá předejı́t použitı́m přı́kazů, které se naučı́me na následujı́cı́ch stránkách. Přı́klad 2.19 Porovnáme tyto dva přı́kazy: net user neexistujici | ECHO Neexistujı́cı́ uživatel net user neexistujici || ECHO Neexistujı́cı́ uživatel Prvnı́ přı́kaz je samozřejmě nesmyslný, hláška se vypı́še i při úspěšném vypsánı́ údajů o uživateli, kdežto druhý přı́kaz vypı́še hlášku pouze při chybě (uživatel neexistuje). Zajı́mavé je však to, v jakém pořadı́ se vypisujı́ výstupy přı́kazů. V prvnı́m přı́padě se nejdřı́v objevı́ výstup ECHO a pak až chybové hlášenı́ NET, v druhém přı́padě právě naopak. Je to z toho důvodu, že v prvnı́m přı́padě se chybový kód vytvářı́ pro řádek jako celek. Pokud chceme tuto chybovou hlášku použı́t jako výchozı́, můžeme přı́kaz poupravit: net user neexistujici 2>nul || ECHO Neexistujı́cı́ uživatel Přı́klad 2.20 Chceme ukončit dávkový soubor při výskytu chyby a zároveň do proměnné errorlevel uložit čı́slo, ze kterého by bylo možné poznat, jaká chyba nastala. @echo off ... dir /b 2>nul || exit /B 1 copy *.txt || exit /B 2 Pokud došlo k chybě u přı́kazu dir, v proměnné errorlevel bude hodnota 1, jestliže chyba nastala v dalšı́m přı́kazu, bude v errorlevel hodnota 2, atd. Když nedojde k žádné chybě, hodnota errorlevel bude obsahovat 0. Pokud budeme chtı́t i něco vypsat (nebo provést jiný přı́kaz), můžeme přı́kazy zřetězit: dir /b 2>nul || echo Nastala chyba & exit /B 1 Úkoly 1. Přı́kaz dir je jednı́m z přı́kazů použı́vajı́cı́ch proměnnou errorlevel pro uloženı́ typu chyby. Sestavte přı́kaz, který v přı́padě chyby vypı́še hodnotu proměnné errorlevel (použijte podmı́něné propojenı́ přı́kazů, výpis proměnné errorlevel proved’te pomocı́ echo). 2. Sestavte přı́kaz, který bud’ vypı́še všechny skryté soubory a podadresáře v pracovnı́m adresáři, a nebo (když tam žádné nejsou) hlášenı́, že v zadaném adresáři žádné skryté soubory nejsou. Můžete využı́t postup z přı́kladu 2.18. C 2.2 SLOŽENÉ PŘÍKAZY 48 3. Přı́kaz z předchozı́ho úkolu obohat’te – v přı́padě, že ve výpisu skrytých souborů a podadresářů bude alespoň jedna položka (tj. skončı́ úspěchem, bez chyby), pro porovnánı́ spust’te výpis obsahu pracovnı́ho adresáře bez dalšı́ch parametrů. 4. Zjistěte, jaká hodnota se objevı́ v proměnné errorlevel, když se pokusı́te vypsat sdı́lené prostředky na (jiném) počı́tači v sı́ti, který neexistuje (pro název počı́tače použijte sice správnou syntaxi, ale nesmyslný název počı́tače, třeba \\ABC). 2.2.2 Podmı́něný přı́kaz Přı́kaz IF použı́váme v dávkových souborech k větvenı́ programu. Existuje ve vı́ce variantách: IF EXIST testujeme, zda existuje soubor IF EXIST soubor přı́kaz pokud existuje uvedený soubor, provede zadaný přı́kaz IF EXIST dopis.txt TYPE dopis.txt | MORE pokud existuje dopis.txt, bude vypsán, $ a to po stránkách IF NOT EXIST dopis.txt ECHO soubor dopis.txt neexistuje pokud zadaný soubor neexistuje, vypı́še se chybové hlášenı́ IF EXIST dopis.txt (TYPE dopis.txt) ELSE ECHO soubor neexistuje pokud existuje soubor dopis.txt, bude vypsán, jinak se vypı́še chybové hlášenı́; všimněte si, že přı́kaz před else je uzavřen do závorek, protože obsahuje mezeru (jinak by else bylo považováno za parametr přı́kazu z prvnı́ větve, nebylo by nalezeno) IF DEFINED zjistı́, jestli je definovaná zadaná proměnná IF DEFINED userprofile CD /D %userprofile% pokud je definována proměnná userprofile, přesuneme se pomocı́ nı́ do uživatelského profilu (parametr /D změnı́ nejen pracovnı́ adresář, ale i pracovnı́ disk, viz nápovědu přı́kazu CD) IF DEFINED date ECHO %date% pokud je definována proměnná date, vypı́še jejı́ hodnotu (přı́kaz if defined je jediným přı́kazem, který dokáže pracovat s dynamickými $ proměnnými i bez jejich obklopenı́ symboly %) přı́kaz přesunu do adresáře uloženého v proměnné bude proveden jen tehdy, pokud proměnná existuje IF NOT DEFINED cesta set cesta=%cd% pokud nenı́ definována proměnná cesta, vytvořı́me ji a inicializujeme na cestu k pracovnı́mu adresáři IF DEFINED vlastni_cesta CD %vlastni_cesta% IF ERRORLEVEL testuje, zda se proměnná errorlevel rovná danému čı́slu; do proměnné errorlevel ukládajı́ programy čı́slo určujı́cı́ způsob jejich ukončenı́ (0 znamená OK, vyššı́ čı́slo některý druh ukončenı́ s chybou), tento přı́kaz se často kombinuje s přı́kazem skoku a při testovánı́ různých hodnot naskládáme vı́c přı́kazů if errorlevel pod sebou pokud je v errorlevel uložena hodnota většı́ nebo rovna zadanému čı́slu, provede se přı́kaz a zároveň se proměnná vynuluje IF ERRORLEVEL čı́slo přı́kaz $ 2.2 SLOŽENÉ PŘÍKAZY 49 pokud poslednı́ spuštěný program vrátil hodnotu 2 nebo vyššı́, vyhodnotı́ podmı́nku jako true (provede odskok na dané návěštı́ a vynuluje proměnnou errorlevel), jinak false (odskok neprovede a pokračuje následujı́cı́m přı́kazem) IF ERRORLEVEL 1 GOTO :NAV1 podobně – pokud naposledy spuštěný program skončil s hodnotou 1 nebo vyššı́, provede odskok a vynuluje errorlevel, jinak přı́kaz nic neprovede a pokračujeme dále IF ERRORLEVEL 1 exit /B 1 předáme chybový kód o úroveň výše (dávkový soubor, ve kterém pracujeme, bude ukončen s chybovým kódem 1) IF ERRORLEVEL 2 GOTO :NAV2 IF op1 OPERÁTOR op2 porovná řetězce nebo čı́sla (řetězce by měly být v uvozovkách) podle zadaného operátoru. Možné operátory jsou v tabulce 2.1 (pokud jsou oba operandy čı́sla, je s nimi také vnitřně zacházeno jako s čı́sly) Operátor Význam Operátor Význam == rovná se (pro řetězce) rovná se (pro čı́sla) nerovná se LSS menšı́ než menšı́ nebo rovno většı́ než většı́ nebo rovno EQU NEQ LEQ GTR GEQ Tabulka 2.1: Operátory pro přı́kaz IF pokud prvnı́ parametr dávkového souboru obsahujı́cı́ho tento přı́kaz je prázdný řetězec (tj. nebyl zadán, v tomto přı́padě nebyl zadán žádný parametr kromě samotného názvu souboru), pak vytvořı́me nový adresář IF ”%1” == ”” (MD novy_adr) ELSE MD %1 podobně jako předchozı́, ale pokud soubor neexistuje, provede se větev else IF NOT ”%prom%”==”%1” ECHO nerovná se pro porovnávánı́ řetězců použı́váme jen zdvojené rovnı́tko, jestliže chceme testovat „nerovná se“, použijeme klı́čové slovo not IF %prom% GEQ 0 (ECHO nezáporné) ELSE ECHO záporné zjistı́, jestli je hodnota proměnné většı́ nebo rovna nule IF ”%1” == ”” MD novy_adr Nesmı́me zapomenout, že pokud je v proměnné errorlevel čı́slo většı́ nebo rovno uvedenému čı́slu (testovánı́ dopadne s hodnotou true), proměnná se vynuluje, proto tyto řádky nesmı́me vyměnit, testovánı́ začı́ná od nejvyššı́ho čı́sla, které nás zajı́má. Přı́klad 2.21 Chceme v dávkovém souboru se souborem provést postupně několik operacı́, ale jen pokud existuje. IF EXIST ab.txt ( ECHO Soubor ab.txt: & TYPE ab.txt & DEL ab.txt & GOTO :hotovo ) ECHO Soubor ab.txt neexistuje :hotovo Pokud zadaný soubor existuje, vypı́še se o tom hláška, soubor je vypsán a následně smazán, pokud neexistuje, pouze se o tom vypı́še hláška na obrazovku) $ 2.2 SLOŽENÉ PŘÍKAZY 50 Přı́klad 2.22 Následujı́cı́ úseky kódu z dávkového souboru provedou totéž – načtou od uživatele vstup, a pokud je to prázdný řetězec, vypı́šou hodnotu proměnné errorlevel. Mimo dávkový soubor bude fungovat alespoň prvnı́ možnost. 1. set /p vypis=”Zadej řetězec: ” || ECHO Errorlevel = %errorlevel% 2. set /p vypis=”Zadej řetězec: ” if errorlevel 1 ECHO Errorlevel = %errorlevel% 3. set /p vypis=”Zadej řetězec: ” if %vypis%==”” ECHO Errorlevel = %errorlevel% Úkoly 1. Vyzkoušejte výše uvedené přı́klady (pokud to jde). Vytvořte si dvě vlastnı́ proměnné, uložte do nich různá čı́sla a vyzkoušejte také porovnávánı́ čı́selných proměnných. C 2. Na stránce http://ss64.com/nt/robocopy-exit.html si všimněte využitı́ testovánı́ chybových kódů (proměnná errorlevel u přı́kazu robocopy. Jsou zde uvedeny přı́mo úseky z dávkových souborů využı́vajı́cı́ch k zálohovánı́ přı́kaz robocopy. 3. Vytvořte dávkový soubor, který bude zkoušet sčı́tánı́. Proměnná random vracı́ hodnotu v rozmezı́ 0–32 767, což je poměrně hodně, tedy v přı́kazech generujı́cı́ch operandy upravte maximálnı́ hodnotu napřı́klad pomocı́ operace dělenı́ (aby sčı́tánı́ bylo proveditelné rychle zpaměti). R Cyklus implementujte pomocı́ přı́kazu goto (zeptejte se, zda chce uživatel pokračovat, když ne, proved’te skok na konec souboru). V cyklu do proměnných vygenerujte dvě náhodná čı́sla z vhodného intervalu, vypište „prvnı́ čı́slo + druhé čı́slo=“ a očekávejte výsledek. Ten pak otestujte a vypište hodnocenı́. 2.2.3 Cyklus přes množinu V Přı́kazovém řádku a v dávkovém souboru můžeme použı́t přı́kaz FOR s množinami řetězců. Zadáváme vždy proměnnou, přes kterou probı́há cyklus, množinu, ze které jsou brány řetězce (lze použı́t i zástupné znaky) a přı́kaz, který se má opakovaně provést. Do proměnné jsou postupně dosazovány všechny prvky množiny. Před proměnnou pı́šeme • jeden symbol procenta %, pokud přı́kaz zadáváme přı́mo na Přı́kazovém řádku, • dva symboly procenta %%, pokud přı́kaz pı́šeme do dávkového souboru (aby nedošlo k záměně s jinými vnitřnı́mi proměnnými, které předcházı́ jeden symbol %), • dalšı́ symbol procenta % přidáváme ve vnořeném cyklu (tj. pokud máme v dávkovém souboru cyklus for vnořený v jiném cyklu for, vnitřnı́ proměnná vnitřnı́ho cyklu for bude mı́t tři symboly procenta, atd.). P 2.2 SLOŽENÉ PŘÍKAZY 51 smažeme všechny soubory s přı́ponou BAT, COM a EXE v pracovnı́m adresáři (použito přı́mo na Přı́kazovém řádku) FOR %C IN (*.BAT *.COM *.EXE) DO DEL %C FOR %%C IN (*.BAT *.COM *.EXE) DO DEL %%C totéž (použito v dávkovém souboru) postupně vypisuje názvy všech souborů s přı́ponou TXT v pracovnı́m adresáři a v podadresáři Kopie od každého vytvořı́ kopii. Můžeme pracovat samozřejmě také s adresáři, nejen se soubory (použito v dávkovém souboru) FOR %%a IN (*.TXT) DO ECHO %%a & COPY ”%%a” ”Kopie\%%a” Přı́klad 2.23 Množina nemusı́ nutně obsahovat jen názvy souborů. Pokud uvádı́me jmenovitě vı́ce položek, oddělı́me je čárkou nebo jen mezerou. Sestavı́me přı́kaz, který postupně vypı́še čı́sla od 1 do 4: for %i in (1 2 3 4) do @echo %i Poznámka: U přı́kazu for bychom si měli dávat pozor předevšı́m na to, že pokud přı́kaz v těle ovlivňuje množinu, nad kterou celý přı́kaz pracuje, může se stát, že výpočet půjde do nekonečna. Kromě znalosti důležité klávesové zkratky Ctrl+C bychom proto měli vždy dbát o to, aby v takovém přı́padě byl výstup vnořeného přı́kazu směrován jinam (třeba do podadresáře). E Přı́klad 2.24 Porovnáme funkčnost těchto dvou přı́kazů: for %i in (*.doc *.txt) do copy %i Zaloha_%i for %i in (*.doc *.txt) do copy %i Zaloha\%i Prvnı́ přı́kaz je chybný, způsobı́ zacyklenı́. Je sice užitečné, že všechny soubory se zadanými přı́ponami budou zálohovány, ale protože jsou vytvořené zálohy uloženy v témže adresáři, začnou se postupně vytvářet i zálohy záloh, atd., napřı́klad pro soubor soub.txt vzniknou postupně tyto soubory: Zaloha_soub.txt Zaloha_Zaloha_soub.txt Zaloha_Zaloha_Zaloha_soub.txt atd. Oproti tomu druhý uvedený přı́kaz funguje dobře, protože vytvářı́ nové soubory v podadresáři. Přı́klad 2.25 Budeme počı́tat zkopı́rované soubory, následujı́cı́ kód je v dávkovém souboru: @echo off set pocet=0 echo Kopı́rujeme všechny soubory s přı́ponou ini: M 2.2 SLOŽENÉ PŘÍKAZY 52 set /p adresar=”Zadejte cı́lový adresář s celou cestou: ” if not exist ”%adresar%” goto :neexistujeadr for %%i in (*.ini) do ( xcopy /s /q %%i ”%adresar%” set /a pocet+=1 ) goto :ok :neexistujeadr echo Zadaný adresář %adresar% neexistuje. goto :konec :ok Echo Kopı́rovánı́ dokončeno, bylo zkopı́rováno %pocet% souborů. :konec Přı́kaz FOR má ve skutečnosti mnohem širšı́ možnosti použitı́ (zjistı́me pomocı́ for /? nebo v grafické nápovědě). Najdeme tady několik různých přepı́načů, a také modifikátory, kterými se dostaneme k částem řetězce dosazeného za proměnnou. Přı́klad 2.26 Napřı́klad u některých konverznı́ch programů je třeba zadat tentýž název souboru, jako původnı́, ale s jinou přı́ponou, zde vidı́me použitı́ přı́mo na přı́kazovém řádku: for %i in (*.png) do convert %i %~ni.eps (program convert je součástı́ balı́ku programů Image Magick) – uvedený přı́kaz provede konverzi všech souborů s přı́ponou PNG v pracovnı́m adresáři na stejně pojmenované soubory, ale s přı́ponou (a také typem) EPS, modifikátor ~n způsobı́ u proměnné odtrženı́ přı́pony včetně tečky, a tedy řetězec %~ni vrátı́ tentýž název souboru jako %i, ale bez přı́pony. Úkoly 1. Vytvořte dávkový soubor, který postupně všechny své parametry vypı́še na samostatné řádky, pokud žádný parametr nenı́ zadán, vypı́še pouze řetězec ”Žádný parametr nebyl zadán” (využijte přı́kazy IF, GOTO, FOR, SHIFT, ECHO, neexistujı́cı́ parametr zjistı́te tak, že přı́slušná proměnná je prázdný řetězec). 2. Vytvořte dávkový soubor, který vypı́še obsah zadaného adresáře (tento adresář bude zadán jako prvnı́ parametr souboru). Dále se zeptá, které soubory má vypsat, načte řetězec zadaný uživatelem (přı́kaz SET /p) a použije v přı́kazu FOR s přı́kazem DIR. 3. V přı́kazu uvedeném v přı́kladu 2.23 odstraňte symbol @ před echo. Jaký vliv má uvedenı́ či neuvedenı́ tohoto symbolu? C 2.3 HROMADNÉ ZPRACOVÁNÍ DAT 2.2.4 53 Cyklus přes interval Pokud chceme použı́t cyklus for tak, jak je obvykle použı́ván v programovacı́ch jazycı́ch, máme k dispozici přepı́nač /L. Základnı́ syntaxe je: for /L %prom in (začátek,krok,konec) do přı́kaz Je to podobné, jako když napřı́klad v Pascalu napı́šeme přı́kaz for prom=začátek to konec do Navı́c máme možnost určit délku kroku jinou než 1, to znamená, že proměnná prom bude v každém dalšı́m volánı́ zvýšena o zadanou hodnotu. Přı́klad 2.27 Vypı́šeme lichá čı́sla z intervalu od 1 do 20: for /L %i in (1,2,20) do @echo %i Vypočteme faktoriál zadaného čı́sla: set /p konec=”Zadej čı́slo: ” set vypocet=1 for /L %i in (1,1,%konec%) do @set /a ”vypocet*=%i” & echo. Úkoly 1. Na Přı́kazovém řádku vypočtěte aritmetický průměr ze zadaného počtu zadaných čı́sel (využijte postup z přı́kladu 2.27). C 2. Podobně vypište řadu Fibbonacciho čı́sel o délce zadané uživatelem. 2.3 Hromadné zpracovánı́ dat Přepı́nač /F přı́kazu for můžeme použı́t ke zpracovánı́ textového souboru. To využijeme napřı́klad tehdy, když do souboru uložı́me posloupnost záznamů, na které chceme postupně uplatnit některý přı́kaz. Přı́klad 2.28 Předpokládejme, že máme k dispozici CSV soubor (tj. textový soubor, ve kterém je uložena tabulka, buňky na řádku odděleny střednı́kem, lze otevřı́t v jednoduchém textovém editoru nebo v tabulkových editorech), ve kterém jsou uloženy údaje o objednávkách různých zařı́zenı́ – předpokládejme, že jde o notebooky. Sloupce majı́ tento význam (nejsou v souboru přı́mo popsány, najdeme tam jen samotná data o objednávkách): 1. identifikátor, každý řádek má jiný (můžeme brát jako „čı́slovánı́ řádků“) 2. čı́slo objednávky; řádky vztahujı́cı́ se ke stejné objednávce zde majı́ stejnou hodnotu P 2.3 3. 4. 5. 6. 7. HROMADNÉ ZPRACOVÁNÍ DAT 54 název zařı́zenı́ počet objednaných kusů tohoto zařı́zenı́ dodavatel datum objednávky komentář k zařı́zenı́ Chceme zjistit seznam zařı́zenı́, která jsou součástı́ objednávky čı́slo 152734, vypı́šeme název zařı́zenı́ a počet objednaných kusů: for /F ”delims=; tokens=2-4” %a in (objednavky.csv) do ( if ”%a”==”152734” (echo %b: %c kusů )) Vidı́me, že hned za přepı́načem /F je upřesněnı́ formátu načı́taného souboru (zadáváme, které části souboru má přı́kaz brát v úvazu a jakým způsobem). Zadali jsme oddělovač (střednı́k) a pak sloupce, které má přı́kaz „vidět“ (tj. od druhého do čtvrtého sloupce, prvnı́ nás nezajı́má). Následuje proměnná %a, která bude přiřazena prvnı́mu z „viditelných“ sloupců, tedy vlastně druhému sloupci ze souboru. Následujı́cı́ sloupec zpracovávaného řádku (třetı́ ze souboru) bude přı́stupný v proměnné %b, dalšı́ v proměnné %c. Konstrukce in (objednavky.csv) určuje soubor, který má být zpracován, musı́ následovat klı́čové slovo do a pak přı́kaz, který se má provést pro každý nalezený řádek zvlášt’. Vnitřnı́m přı́kazem je přı́kaz if, který otestuje, zda daný řádek chceme (patřı́ k objednávce, která nás zajı́má), a když ano, vypı́še požadované údaje z tohoto řádku (název zařı́zenı́ a počet objednaných kusů). Všimněte si, že přı́kaz zabı́rá dva řádky. To nenı́ problém, jen je třeba dbát na to, abychom na konec řádku, která má mı́t pokračovánı́, napsali levou závorku (pak Přı́kazový řádek automaticky počı́tá s tı́m, že přı́kaz nenı́ kompletnı́ a pokračuje na dalšı́m řádku). Přı́klad 2.29 Opět budeme prohledávat soubor, který je popsán v předchozı́m přı́kladu. Zajı́majı́ nás dodavatelé dodávajı́cı́ notebooky Lenovo řady IdeaPad. Vı́me, že součástı́ názvu výrobku bude řetězec „IdeaPad“, tedy pro filtrovánı́ použijeme přı́kaz find (v podmı́nce přı́kazu if se zjišt’uje pouze rovnost či nerovnost). for /F ”delims=; tokens=2-5” %a in (objednavky.csv) do ( echo objednavka: %a, dodavatel: %d, zarizeni: %b | find /i ”ideapad” ) Vypı́šou se záznamy obsahujı́cı́ hledaný řetězec, ke každému nejdřı́v čı́slo objednávky, název dodavatele a pak název zařı́zenı́. Úlohu bychom také mohli řešit přı́kazem findstr použitým přı́mo na soubor objednavky.csv, ale výše uvedeným způsobem si vybereme, které části řádku budou vypsány a které majı́ být ignorovány. 2.3 HROMADNÉ ZPRACOVÁNÍ DAT 55 Přı́klad 2.30 Při použitı́ přı́kazu for v dávkovém souboru je třeba k proměnným přidat druhý symbol %, abychom odlišili tyto „vnitřnı́“ proměnné od jiných typů proměnných, předevšı́m parametrů dávkového souboru. Předpokládejme, že v evidenci testů do různých předmětů na některé škole máme tyto tři soubory: • tests.csv obsahujı́cı́ seznamy čı́sel otázek ke každému testu, význam jednotlivých sloupců v souboru je následujı́cı́: 1. 2. 3. 4. čı́slo (identifikátor) testu, každý test má jiné čı́slo (identifikátor) předmětu, do něhož test patřı́ seznam čı́sel otázek tohoto testu (čı́sla jsou oddělena mezerami) komentář k testu • questions.csv obsahujı́cı́ texty otázek: 1. čı́slo (identifikátor) otázky, v tabulce tests.scv tyto identifikátory najdeme v 3. sloupci 2. text otázky • answers.csv obsahujı́cı́ seznam odpovědı́ k otázkám, studenti majı́ označovat ty odpovědi, které jsou správné: 1. čı́slo (identifikátor) odpovědi 2. čı́slo otázky, ke které odpověd’ patřı́, je to vlastně odkaz do prvnı́ho sloupce předchozı́ tabulky 3. text odpovědi 4. komentář k odpovědi Chceme vytvořit soubor vysledek1056.csv obsahujı́cı́ otázky testu č. 1056 a odsazeně také odpovědi. Protože takto budeme chtı́t zpracovat vı́c různých testů, vytvořı́me dávkový soubor, který bude mı́t jako prvnı́ parametr název souboru pro výstup, a jako druhý parametr čı́slo otázky. Na konec zadaného souboru vložı́ řádek s otázkou a hned za tento řádek přidá řádky s odpověd’mi, za poslednı́ odpověd’ k otázce přidá prázdný řádek. Obsah souboru: @echo off rem řádek s otázkou - v prvnı́m sloupci porovnáme čı́slo otázky, pokud souhlası́, rem přidáme ji na konec souboru for /F ”delims=; tokens=1-2” %%a in (questions.csv) do ( if ”%%a”==”%2” ( echo %%b >> %1 ) ) rem řádky s odpověd’mi, budou odsazeny (přidáváme na začátek oddělovač) for /F ”delims=; tokens=1-3” %%a in (answers.csv) do ( if ”%%a”==”%2” ( echo ; %%c >> %1 ) ) rem prázdný řádek: echo ; >> %1 Soubor uložı́me pod názvem testy.bat. Abychom to přı́liš nekomplikovali, seznam čı́sel otázek k danému testu zjistı́me „ručně“ v souboru tests.csv. Předpokládejme, že tento seznam je 290 291 291 328 329 330 331 332 1017 1018 1019 1020 M 2.3 HROMADNÉ ZPRACOVÁNÍ DAT 56 Použijeme cyklus přes množinu: for %i in (290 291 291 328 329 330 331 332 1017 1018 1019 1020) do @( testy.bat vysledek1056.csv %i ) Seznam čı́sel otázek můžeme do přı́kazu vkopı́rovat (připomeňme si, že do Přı́kazového řádku vkládáme přes kontextové menu titulku okna Úpravy ï Vložit). Všimněte si, že před volaný přı́kaz jsme dali symbol @, aby se nevypisovaly prováděné přı́kazy. Volaný spustitelný (dávkový) soubor má dva parametry – výsledný soubor a pak čı́slo otázky z množiny, přes kterou probı́há lokálnı́ proměnná %i. Přı́klad 2.31 Chceme přidat několik desı́tek (nebo stovek, to je jedno) nových uživatelů (studentů), ale nechce se nám to dělat ručně. Všichni majı́ být zařazeni do nové skupiny studenti2010. Seznam jsme dostali v souboru (sice ne textovém, ale text bez problémů vytáhneme). Předpokládejme, že jsme podle původnı́ho souboru vytvořili soubor uzivatele2010.txt, kde na každém řádku souboru je jeden student a pro něj vždy tři údaje – jako prvnı́ je identifikačnı́ čı́slo, pak přı́jmenı́, a potom jméno. Všechny tři údaje na řádku jsou odděleny mezerou. Ve stejném adresáři, ve kterém máme soubor uzivatele2010.txt, vytvořı́me dávkový soubor, který chceme volat (spouštět) se dvěma parametry takto: pridejuziv.bat studenti2010 uzivatele2010.txt Prvnı́ parametr je název nové skupiny, druhý parametr je název souboru se seznamem uživatelů. Vytvořı́me tedy dávkový soubor pridejuziv.bat s tı́mto obsahem: @echo off REM vytvorime skupinu uzivatelu s nazvem, ktery vezmeme z prvniho parametru: net localgroup %1 /add if errorlevel 1 goto :chyba REM bereme v uvahu existenci tri ”sloupcu”, REM na zpracovavanem radku je vzdy prvek z prvniho sloupce %%a, z druheho %%b, z tretiho %%c: for /F ”tokens=1-3” %%a in (%2) do ( REM prvni prvek je prihlasovaci jmeno -- id. cislo, druhe prijmeni, treti krestni jmeno: net user %%a %%a /add /fullname:”%%c %%b” net localgroup %1 %%a /add ) goto :konec :chyba Echo Chyba při zpracovánı́ :konec Ve skutečnosti bychom nové uživatele přidávali spı́še na serveru do domény (přı́kaz net group apod.), zde pro zjednodušenı́ použijeme lokálnı́ skupinu. Vytvořený dávkový soubor pak můžeme použı́vat každoročně, stačı́ jen zaměnit soubor s uživateli za nový a v parametru napsat název jiné skupiny. Studenti majı́ nastaveno heslo totožné se svým přihlašovacı́m jménem (to je identifikačnı́ čı́slo). Dále bychom měli správně přiřadit vhodná M 2.3 HROMADNÉ ZPRACOVÁNÍ DAT 57 přı́stupová oprávněnı́ (nové skupině, nenı́ třeba je přidělovat zvlášt’ všem novým uživatelům). To by také mohlo být součástı́ skriptu. Pokud budeme chtı́t pro kontrolu vypsat všechna jména a přı́jmenı́ (jen na Přı́kazovém řádku, ne v dávkovém souboru), zadáme: for /F ”tokens=2,3” %a in (uzivatele2010.txt) do @echo %b %a Přı́klad 2.32 Textové soubory s uživateli přidanými v jednotlivých letech si můžeme archivovat a po uplynutı́ maximálnı́ doby studia pomocı́ obsahu souboru všechny uživatele z daného roku odstranit: for /F ”tokens=1-3” %a in (uzivatele2010.txt) do net user %a /delete net localgroup studenti2010 /delete Je zřejmé, že tyto přı́kazy jsme zadávali přı́mo na Přı́kazovém řádku, nenı́ nutné k tomu tvořit dávkový soubor (i když i to by šlo). Na přı́kladech vidı́me syntaxi – za parametrem /F je řı́dicı́ řetězec, který řı́ká, co konkrétně ze souboru máme použı́t. Následuje vnitřnı́ proměnná, do které bude dosazen prvnı́ „oznámený“ prvek na každém řádku (většinou chápán jako prvek v prvnı́m sloupci, resp. v tom, který zadáme v rozsahu tokens). Dále zadáme název souboru, který se má zpracovávat, a zbytek už známe (přı́kaz). P Podle počtu deklarovaných sloupců (v části tokens) jsou vytvořeny dalšı́ vnitřnı́ proměnné (následujı́cı́ podle abecedy za tou prvnı́), přes ně pak přistupujeme k dalšı́m prvkům na řádku. Prvnı́ je dostupný přes %a nebo %%a, druhý přes %b nebo %%b, atd. Velmi důležitý je řı́dicı́ řetězec. V přı́kladech je ”tokens=1-3”, to znamená, že zpracováváme prvnı́ až třetı́ sloupec. Sloupce mohou být zadány také výčtem, některý můžeme i přeskočit (to má vliv na „přidělovánı́“ položek řádku k vnitřnı́m proměnným přı́kazu). Řı́dicı́ řetězec může vypadat i takto: for /F ”delims=: tokens=1,3-5” %%a ... (oddělovačem položek na řádku je dvojtečka, zpracováváme pouze prvnı́ a třetı́ až pátou položku na řádku, druhou a přı́padně šestou přeskočı́me). Všimněte si, že celý řı́dicı́ řetězec musı́ být v uvozovkách. Možnostı́ je vı́ce, podrobnosti zı́skáme zadánı́m for /? na Přı́kazovém řádku. Úkoly 1. Projděte si pořádně přı́klady 2.28–2.32. 2. Podle prvnı́ho z těchto přı́kladů sestavte postup, kterým vytvořı́te obdobné soubory pro celou sérii objednávek z rozsahu 140000–160000 (čı́slo objednávky bude součástı́ názvu souboru). Použijte jednu z forem přı́kazu for, která je blı́zká pojetı́ přı́kazu v klasickém programovánı́ (najdete v předchozı́m textu). C R 2.5 POWERSHELL 58 3. Nynı́ trochu rozvineme přı́klad 2.30. Pokuste se zautomatizovat volánı́ dávkového souboru pro seznam čı́sel otázek daného testu. R Vytvořte dávkový soubor, jehož parametrem bude čı́slo testu, v dávkovém souboru pak pomocı́ cyklu for /F vytáhněte ze souboru tests.csv posloupnost čı́sel otázek tohoto testu (můžete ji prozatı́mně uložit do proměnné) a pak zavolejte již vytvořený dávkový soubor testy.bat s přı́slušnými parametry (druhý parametr je posloupnost, kterou jste zjistili předchozı́m přı́kazem, prvnı́ parametr – název cı́lového souboru – vytvořte zřetězenı́m s parametrem souboru, který právě tvořı́te, což je čı́slo testu). Vzpomeňte si, jak je třeba volat dávkový soubor uvnitř jiného dávkového souboru! (viz str. 1.4) 2.4 Odlišnosti v nástrojı́ch Přı́kazového řádku Různé verze (ale i varianty v rámci jedné verze) se lišı́ svým vybavenı́m nástroji pro Přı́kazový řádek. Odlišnosti jsou také mezi desktopovými a serverovými variantami. Obecně se dá řı́ct, že se stoupajı́cı́ verzı́ sice některé staršı́ nástroje zmizı́, ale pokaždé jich vı́ce přibývá, tedy množstvı́ nástrojů má stoupajı́cı́ tendendci. Ve Windows Server od verze 2008 je velmi doporučována instalace tzv. Server Core (tj. nenı́ nainstalováno grafické rozhranı́, pracujeme pouze a jenom v textovém rozhranı́ podobně jako v nejstaršı́ch unixových systémech). Hlavnı́m důvodem je zvýšenı́ bezpečnosti (moduly grafického rozhranı́ běžı́ v kontextu jádra, a cokoliv běžı́ v kontextu jádra a je napadnutelné, to znamená bezpečnostnı́ riziko), dalšı́ důvod by mohl být zvýšenı́ propustnosti a snı́ženı́ zátěže serveru (grafické rozhranı́ je výpočetně náročné). Zřejmě proto zvláště ve verzı́ch XP a Vista (zároveň se Server 2003 a 2008) přibylo množstvı́ nových přı́kazů. V tomto dokumentu nenı́ ani zdaleka uvedeno vše, co lze na Přı́kazovém řádku použı́t. Základnı́ přehled o nových přı́kazech (obecně přes všechny verze) zı́skáme bud’ na internetu a nebo v nápovědě, když zadáme nové nástroje přı́kazového řádku . Někdy nepomůže ani to (ve variantách Home je nápověda neskutečně osekaná, až na hranici použitelnosti). Úkoly 1. Zjistěte, jak funguje přı́kaz ipseccmd (od verze XP). Pomocı́ tohoto přı́kazu vypište statistiky (většinou chybová hlášenı́) protokolu IPSec, filtrů, zásad, atd. 2. Zjistěte, jak funguje a k čemu sloužı́ přı́kaz driverquery (taktéž od verze XP). 3. Najděte seznam přı́kazů, který byl nově přidán do verze Windows, kterou právě použı́váte. Vyberte si několik přı́kazů a zjistěte, k čemu sloužı́ a jaká je jejich syntaxe. C 2.5 POWERSHELL 2.5 59 PowerShell PowerShell je obdoba Přı́kazového řádku ve Windows Vista (Přı́kazový řádek však zůstává zachován, obě řešenı́ existujı́ vedle sebe). Je součástı́ Windows 7 a Windows Server 2008, lze ho doinstalovat i do Windows XP SP2 a SP3 a Windows Vista. Momentálně existujı́ verze 1.0 a 2.0. 2.5.1 Jak na PowerShell PowerShell je postaven na technologii .NET (později se o této technologii dovı́me vı́ce). Vzhledově se velmi podobá Přı́kazovému řádku, rozdı́l je v možnosti použı́vánı́ myši a samozřejmě také v přı́kazech. Existujı́ také grafická prostředı́. Použı́váme tyto typy přı́kazů: P • přı́kazy typu CMDLET – jde o nativnı́ přı́kazy PowerShellu, jiným způsobem se k nim nedostaneme, jsou uloženy v dynamických knihovnách dodávaných s PowerShellem, • aplikace, tedy spustitelné soubory (třeba .EXE) – stačı́ napsat název souboru (přı́padně s cestou), stejně jako v Přı́kazovém řádku, protože mnohé z dřı́ve probı́raných přı́kazů jsou vlastně spustitelné soubory, • aliasy – zastupujı́ přı́kazy jiných typů (obvykle s dlouhým či hůře zapamatovatelným názvem), také existujı́ některé aliasy s názvem vnitřnı́ho přı́kazu Přı́kazového řádku, které vnitřně volajı́ přı́kaz typu CMDLET (napřı́klad dir), • funkce – pojmenované skupiny přı́kazů (podobně jako v jazyce C). Obvyklá syntaxe přı́kazů CMDLET je sloveso-podstatné_jméno parametry. Parametry typu přepı́načů začı́najı́ pomlčkou, stejně jako v unixových systémech. Uvedeme si několik přı́kazů pro ukázku: Přı́kaz Význam GET-PROCESS seznam spuštěných procesů včetně základnı́ch informacı́ (jako parametr můžeme použı́t regulárnı́ výraz pro masku názvu procesů) bez dalšı́ch parametrů zobrazı́ seznam aliasů zastavı́ spuštěný proces (název dodáme jako parametr) nastavı́ proměnnou na danou hodnotu bez dalšı́ch parametrů vypı́še seznam přı́kazů GET-ALIAS STOP-PROCESS SET-VARIABLE GET-COMMAND Tabulka 2.2: Některé přı́kazy PowerShellu Přı́klad 2.33 Ukážeme si vyvolánı́ výpisu seznamu přı́kazů v PowerShellu. Pokud nemáme PowerShell k dispozici (v XP nebo Vistě), najdeme si instalačnı́ soubor na webu Microsoftu, vybereme pro náš operačnı́ systém (XP nebo Vista, pozor, u Visty je důležité vědět, zda máme 32bitový nebo 64bitový systém). Po spuštěnı́ (Start ï Programy ï Windows PowerShell, přı́padně může být v Přı́slušenstvı́) se objevı́ úvodnı́ hlášenı́ a prompt: Windows PowerShell Copyright (C) 2009 Microsoft Corporation. All rights reserved. PS C:\Documents and Settings\Šárka> M 2.5 POWERSHELL 60 Skutečnou podobu okna (Windows XP) vidı́me na obrázku 2.2. Všimněte si, že se rozhranı́ sice trochu podobá Přı́kazovému řádku, ale poznáme, že máme spuštěný PowerShell. Obrázek 2.2: Okno PowerShellu Zadáme přı́kaz, který by měl vypsat seznam přı́kazů typu CMDLET a přı́padně nadefinovaných aliasů a funkcı́: PS C:\Users\Šárka> get-command CommandType ----------Alias Alias Cmdlet Cmdlet Cmdlet Cmdlet Alias Alias Function Function Cmdlet Cmdlet Cmdlet Cmdlet Cmdlet Cmdlet Cmdlet Cmdlet Cmdlet Cmdlet Cmdlet Cmdlet Cmdlet Cmdlet Cmdlet Cmdlet ... Name ---% ? Add-Content Add-History Add-Member Add-PSSnapin cat cd cd.. cd\ Clear-Content Clear-Item Clear-ItemProperty Clear-Variable Compare-Object ConvertFrom-SecureString Convert-Path ConvertTo-Html ConvertTo-SecureString Copy-Item Copy-ItemProperty Export-Alias Export-Clixml ForEach-Object Format-List Get-Acl Definition ---------ForEach-Object Where-Object Add-Content [-Path] <String[]> [-Value] <Object[... Add-History [[-InputObject] <PSObject[]>] [-Pass... Add-Member [-MemberType] <PSMemberTypes> [-Name]... Add-PSSnapin [-Name] <String[]> [-PassThru] [-Ve... Get-Content Set-Location Set-Location .. Set-Location \ Clear-Content [-Path] <String[]> [-Filter <Strin... Clear-Item [-Path] <String[]> [-Force] [-Filter ... Clear-ItemProperty [-Path] <String[]> [-Name] <S... Clear-Variable [-Name] <String[]> [-Include <Str... Compare-Object [-ReferenceObject] <PSObject[]> [... ConvertFrom-SecureString [-SecureString] <Secure... Convert-Path [-Path] <String[]> [-Verbose] [-Deb... ConvertTo-Html [[-Property] <Object[]>] [-InputO... ConvertTo-SecureString [-String] <String> [[-Sec... Copy-Item [-Path] <String[]> [[-Destination] <St... Copy-ItemProperty [-Path] <String[]> [-Destinati... Export-Alias [-Path] <String> [[-Name] <String[]... Export-Clixml [-Path] <String> [-Depth <Int32>] ... ForEach-Object [-Process] <ScriptBlock[]> [-Inpu... Format-List [[-Property] <Object[]>] [-GroupBy <... Get-Acl [[-Path] <String[]>] [-Audit] [-Filter <... (skutečný výpis je velmi dlouhý). Je to pouze orientačnı́ seznam přı́kazů, který pomůže, když si nemůžeme vzpomenout na název přı́kazu. M 2.5 POWERSHELL 61 Často je použı́ván „pomocný“ přı́kaz FORMAT-LIST, zkráceně FL, který vhodně zformátuje výstup. Výstup zformátovaný pomocı́ FL bývá u většiny přı́kazů mnohem širšı́, tj. mnohé položky zobrazenı́ nejsou ignorovány. Napřı́klad GET_SERVICE | FORMAT-LIST vypı́še mnohem obsáhlejšı́ výstup než bez směrovánı́ přes formátovacı́ přı́kaz (výstupem jsou podrobné informace o službách). Přı́kazy lze spojovat rourou, napřı́klad pro GET_SERVICE | GET_MEMBER část před rourou vrátı́ seznam .NET objektů služeb, přı́kaz za rourou zobrazı́ vlastnosti a metody těchto objektů. Oproti Přı́kazovému řádku se lišı́ syntaxe použı́vánı́ proměnných. Když k proměnné přistupujeme, neobklopujeme jejı́ název symboly %, ale před název dáme symbol $ (to je ostatně syntaxe obvyklá v unixových systémech), také je někdy nutné přidat řetězec env:. Napřı́klad: $env:path += ”;novy_adresar” (na konec proměnné path přidá dalšı́ adresář, jak vidı́me, adresáře jsou odděleny střednı́kem). V PowerShellu můžeme bez problémů využı́vat i přı́kazy, které známe z Přı́kazového řádku. Na výchozı́m promptu ostatně jistou podobnost vidı́me. Taktéž existuje pracovnı́ adresář (složka) a mezi adresáři (složkami) se můžeme pohybovat jak pomocı́ CMDLETu set-location, tak i pomocı́ „staršı́ho“ přı́kazu cd (pokud je nadefinován alias cd, což obvykle je). Můžeme napřı́klad vypsat sı́t’ové adresy přı́kazem ipconfig /all či vypsat seznam uživatelů přı́kazem net user a vše klidně přesměrovat do souboru. L Přı́klad 2.34 Některé původnı́ přı́kazy dávajı́ v PowerShellu stejný výstup jako na Přı́kazovém řádku, ale u jiných tomu tak nemusı́ být. Napřı́klad přı́kaz dir může být definován jako alias přı́kazu get-ChildItem, a v tom přı́padě je jeho výstup v úplně jiném formátu než na Přı́kazovém řádku: PS C:\Users\Šárka> dir Directory: C:\Users\Šárka Mode ---d---d---d-r-d-r-d-r-d-r-d-r-d-r-d---d----a---a---a--- LastWriteTime ------------15.8.2011 11:52 14.1.2012 23:04 29.7.2011 22:05 7.2.2012 17:05 15.8.2011 11:49 29.7.2011 22:05 29.7.2011 22:05 23.1.2012 18:17 14.8.2011 3:01 18.12.2011 16:34 22.12.2011 20:23 1.2.2012 17:59 16.8.2011 16:18 Length Name ------ ---.gimp-2.6 .VirtualBox Contacts Desktop Documents Favorites Links Pictures programy VirtualBox VMs 218 .recently-used.xbel 11165 gsview64.ini 0 Sti_Trace.log Výstup vám určitě připomene výstup linuxového přı́kazu ls, jen je zde poněkud méně informacı́. V prvnı́m sloupci najdeme řetězec obsahujı́cı́ nastavené atributy (pı́smeno „d“ znamená directory, tedy adresář, dále u některých položek máme „r“ (read-only), „a“ (archivate), přı́padně by zde mohly být atributy „h“ nebo „s“ (hidden, system), ale nenı́ zapnuto zobrazovánı́ těchto typů souborů. M 2.5 POWERSHELL 2.5.2 62 Pár typických úloh v PowerShellu Nápovědu zı́skáme takto: • • • • vypı́še seznam přı́kazů GET-COMMAND | FL navı́c vhodně zformátuje jako seznam položek GET-HELP vypı́še obecnou nápovědu GET-HELP přı́kaz vypı́še nápovědu pro daný přı́kaz, napřı́klad GET-COMMAND GET-HELP GET-PROCESS • • • • vypı́še podrobnějšı́ nápovědu přı́kazu GET-HELP přı́kaz -full vypı́še plnou nápovědu pro daný přı́kaz GET-HELP přı́kaz -examples přı́klady použitı́ pro daný přı́kaz GET-HELP GET-* vypı́še nápovědu ke všem přı́kazům začı́najı́cı́m GET- GET-HELP přı́kaz -detailed Přı́klad 2.35 Vı́me, že existuje přı́kaz get-process, ale chceme vı́ce informacı́. Tyto informace zı́skáme takto: PS C:\Users\Šárka> get-help get-process NAME Get-Process SYNOPSIS Gets the processes that are running on the local computer. SYNTAX Get-Process [[-name] <string[]>] [<CommonParameters>] Get-Process -id <Int32[]> [<CommonParameters>] Get-Process -inputObject <Process[]> [<CommonParameters>] DETAILED DESCRIPTION The Get-Process cmdlet retrieves a process object for each process. Without parameters, ”Get-Process” gets all of the processes on the computer, as though you typed ”Get-Process *”. You can also identify a particular process by process name or process ID (PID), or pass a process object through the pipeline to Get-Process. For Get-Process, thedefault method is by process name. For Stop-Process, the default method is by process ID. RELATED LINKS Stop-Process REMARKS For more information, type: ”get-help Get-Process -detailed”. For technical information, type: ”get-help Get-Process -full”. Všimněte si podobnosti koncepce stránky s manuálovými stránkami v unixových systémech. Z výpisu zjistı́me, že tento přı́kaz vypisuje běžı́cı́ procesy, následuje popis syntaxe (tj. parametry, které lze použı́t, jejich pořadı́ a možné kombinace). V následujı́cı́m odstavci je přı́kaz popsán podrobněji. Zjistı́me, že vlastně přistupujeme k objektům typu proces a můžeme vypsat bud’ všechny procesy, M 2.5 POWERSHELL 63 nebo zadat konkrétnı́ proces, který nás zajı́má (názvem nebo jeho identifikačnı́m čı́slem PID) a nebo můžeme přı́kazu „poslat“ objekt typu proces přes rouru. Na konci výpisu nám přı́kaz poradı́, jakým způsobem zı́skat ještě podrobnějšı́ nápovědu (v podrobnějšı́ nápovědě předevšı́m najdeme seznam a vysvětlenı́ parametrů, a také ukázkové přı́klady). Přı́klad 2.36 Některé přı́kazy včetně parametrů jsou v PowerShellu zbytečně „upovı́dané“ – dlouhé, a pokud je často použı́váme, nenı́ od věci si pro ně vytvořit krátký alias nebo funkci. get-help get-alias nejdřı́v zjistı́me, jakým způsobem se aliasy vytvářejı́ get-help get-alias -examples pro jistotu se ještě podı́váme na přı́klady použitı́ přı́kazu get-alias seznam get-childitem vytvořili jsme alias seznam, můžeme ho volně použı́vat mı́sto přı́kazu get-childitem (po uzavřenı́ okna PowerShellu však přestane existovat) Aliasy majı́ jednu nevýhodu – reprezentujı́ pouze řetězce, ve kterých nesmı́ být mezera, tedy pouze jedno slovo (k zastupovanému přı́kazu také nelze přidat parametry). Tedy pokud chceme vytvořit vlastnı́ přı́kaz, a to takový, který zastupuje jiný přı́kaz včetně parametrů, vytvořı́me funkci: PS C:\Users\Šárka> function seznamx Prompt se změnı́ na >> a můžeme psát tělo funkce (jako v jazyce C, v lomených závorkách): { get-children -force } Pozor na mezery u pomlček; zatı́mco kolem prvnı́ pomlčky žádná mezera nenı́ (get-children je vlastně souvislé klı́čové slovo), před druhou pomlčkou mezera je, protože jde o vyznačenı́ přepı́nače -force. Vytvořili jsme funkci, která vypisuje všechny soubory a podadresáře včetně skrytých. Vkládánı́ funkce ukončı́me jednoduše tak, že vytvořı́me „prázdný řádek“ – dvakrát klepneme na klávesu Enter . Přı́klad 2.37 Ukážeme si pár přı́kazů (cmdlet) pro práci s procesy a službami: get-process vypı́še seznam spuštěných procesů se základnı́mi parametry takto zjistı́me údaje o procesu s názvem firefox, napřı́klad jeho PID, výstup může vypadat třeba takto: get-process firefox Handles ------262 NPM(K) -----35 PM(K) ----23312 WS(K) VM(M) ----- ----35684 145 CPU(s) -----1,73 Id ProcessName -- ----------2772 firefox vypı́še tyto údaje pouze o procesech, jejichž název začı́ná Apache (konkrétně – pokud máme nainstalován WWW server Apache, zjistı́me název jeho obslužného procesu) get-process Apache* M 2.5 POWERSHELL 64 podobně, jen je proces určen čı́slem PID mı́sto názvu (to bude zřejmě jiný proces než u předchozı́ho přı́kazu) get-process -pid 3632 podobně jako předchozı́, ale k procesu se zobrazı́ seznam modulů (dynamicky linkovaných knihoven) get-process -pid 3632 -module zajı́má nás, jaké existujı́ přı́kazy pro práci se službami (ve výpisu jeou kromě jiného nám známé programy services.exe a services.msc) get-command *service* nevı́me, jak se jmenuje služba, která se v češtině nazývá delšı́m jménem „Pracovnı́ stanice“, tak si to zjistı́me (název služby obsahuje řetězec „workstation“) get-service *workstation* chceme službu, jejı́ž název končı́ zadaným řetězcem a zároveň běžı́; všimněte si syntaxe druhé části dotazu, podobá se SQL syntaxi (vpodstatě pracujeme s databázı́), řetězec $_ představuje konkrétnı́ objekt, který k přı́kazu where-object doputoval rourou, lomené závorky jsou nutné get-service *station | where-object {$_.status -eq ”running”} zaujal nás CMDLET where-object a chtěli bychom zjistit, na které vlastnosti se můžeme ptát u objektu procesu, tı́mto způsobem zı́skáme výpis všech vlastnostı́ typu objektu, který k CMDLETu get-member dojde přes rouru (nás zajı́majı́ předevšı́m řádky obsahujı́cı́ v druhém sloupci property), výstup může obsahovat napřı́klad tyto řádky: get-process | get-member TypeName: System.Diagnostics.Process Name ---Handles Name CloseMainWindow GetType get_BasePriority get_Handle Kill Start BasePriority Handle HandleCount Id MachineName MainModule ProcessName ProcessorAffinity Responding StartTime Threads TotalProcessorTime CPU Path ... MemberType ---------AliasProperty AliasProperty Method Method Method Method Method Method Property Property Property Property Property Property Property Property Property Property Property Property ScriptProperty ScriptProperty Definition ---------Handles = Handlecount Name = ProcessName System.Boolean CloseMainWindow() System.Type GetType() System.Int32 get_BasePriority() System.IntPtr get_Handle() System.Void Kill() System.Boolean Start() System.Int32 BasePriority {get;} System.IntPtr Handle {get;} System.Int32 HandleCount {get;} System.Int32 Id {get;} System.String MachineName {get;} System.Diagnostics.ProcessModule MainModule {get;} System.String ProcessName {get;} System.IntPtr ProcessorAffinity {get;set;} System.Boolean Responding {get;} System.DateTime StartTime {get;} System.Diagnostics.ProcessThreadCollection Thre... System.TimeSpan TotalProcessorTime {get;} System.Object CPU {get=$this.TotalProcessorTime... System.Object Path {get=$this.Mainmodule.FileNa... (výstup byl značně zkrácen) chceme vypsat procesy svchost, jejichž čas na procesoru je většı́ nebo roven 2 sekundám (vlastnost cpu jsme zjistili předchozı́m přı́kazem) get-process svchost | where-object {$_.cpu -ge 2} M 2.6 SKRIPTY 65 get-process | where {$_.basepriority -gt 8} mı́sto where-object můžeme použı́t kratšı́ where (je to alias), zde vypisujeme procesy, jejichž priorita je vyššı́ než 8 get-process | select-object name,handleCount,startTime,threads tı́mto způsobem mů- žeme ke každému objektu procesu, který je nalezen prvnı́m přı́kazem v rouře, vypsat požadované vlastnosti (název, počet „držených“ objektů – napřı́klad otevřených souborů, čas spuštěnı́, seznam vláken procesu – TID) výstup bude prakticky stejný jako předchozı́, jen jinak zformátovaný (poslednı́ přı́kaz v rouře výstup zformátuje do tabulky) get-process | select-object name,handleCount,startTime,threads | ft PowerShell nabı́zı́ zajı́mavé funkce pro zpracovánı́ řetězců a také se zdá být velmi silným nástrojem pro psanı́ skriptů. Zde se těmto vlastnostem již nebudeme věnovat, dalšı́ informace najdeme napřı́klad v těchto zdrojı́ch: • • • • • http://technet.microsoft.com/en-us/library/ee692944.aspx http://msdn2.microsoft.com/en-us/library/bb905330.aspx http://microsoft.com/technet/scriptcenter/topics/winpsh/manual/start.mspx http://en.wikipedia.org/wiki/Windows PowerShell http://blogs.msdn.com/PowerShell/ Existuje jiný projekt se jménem PowerShell – emulátor X11 (základ grafického prostředı́ pro unixové systémy), dostupný na powershell.sourceforge.net. Úkoly 1. Zjistěte, jak se na vašem počı́tači spouštı́ PowerShell. Pokud nenı́ nainstalován, doinstalujte ho podle návodu v předchozı́m textu (pokud máte přı́slušná oprávněnı́). 2. Procvičte si přı́kazy pro zı́skánı́ nápovědy a vyzkoušejte podle možnostı́ přı́kazy, které jsou v přı́kladech 2.35, 2.36 a 2.37. 3. Zjistěte, jaké vlastnosti lze zjišt’ovat u služeb (stejným způsobem, jak jsme zjistili vlastnosti procesů v přı́kladu 2.37) a u souborů (připomeňme si, že seznam souborů lze zobrazit CMDLETem get-childitem). Některé z vlastnostı́ vypište podobně, jako jsme to udělali na konci přı́kladu 2.37 u procesů. 2.6 Skripty Skripty jsou textové spustitelné soubory obsahujı́cı́ přı́kazy, pro jejichž spuštěnı́ (provedenı́) je zapotřebı́ některý dalšı́ program (překladač, interpret). Jednı́m z typů skriptů jsou i dávkové soubory s přı́ponou BAT (viz kapitolu Přı́kazový řádek), v novějšı́ch verzı́ch Windows můžeme použı́vat také SCF soubory (jejich použitelnost je však omezená) a modul Windows Scripting Host. C 2.6 SKRIPTY 66 soubory: Windows od verze 98 nabı́zejı́ jistou omeze- [Shell] nou možnost psanı́ skriptů s přı́ponou SCF (Shell Command Command=2 File). Z existujı́cı́ch je to napřı́klad Zobrazit plochu.scf nebo IconFile=explorer.exe,3 explorer.scf. Máme zde možnost určit, kdo má skript in- [Taskbar] terpretovat (2=Windows, 3=Internet Explorer), jak bude vypa- Command=ToggleDesktop dat ikonka souboru skriptu (ICO soubor nebo odkaz na ikonu Obrázek 2.3: Obsah souboru v knihovně či spustitelném souboru) a dále co se má provést po Zobrazit plochu.scf spuštěnı́ skriptu. SCF Windows Scripting Host (WSH): tento modul umožňuje spouštět skripty napsané v JScriptu a VBScriptu, poskytuje také vlastnı́ skriptovacı́ jazyk umožňujı́cı́ použı́vat i prvky ActiveX (obvykle pracujeme s objekty, také WMI objekty). P P Skript pomocı́ WSH spustı́me jednı́m ze dvou přı́kazů – wscript nebo cscript. Syntaxe obou přı́kazů je jednoduchá: wscript název_souboru_skriptu spustı́ soubor skriptu v prostředı́ Windows, použı́vá se v Start ï Spustit nebo v Zástupci, bez uvedenı́ názvu souboru skriptu se spustı́ jednoduchý nástroj na konfiguraci WSH, když je spuštěný, můžeme skripty spouštět jako jiné spustitelné soubory poklepánı́m napřı́klad v Průzkumnı́kovi3 , cscript název_souboru_skriptu spustı́ soubor skriptu v Přı́kazovém řádku, můžeme použı́t také v dávkovém souboru. Mezi oběma přı́kazy je jeden podstatný rozdı́l – pokud skript spustı́me pomocı́ wscriptu, veškerá hlášenı́ programu se zobrazujı́ „v okýnkách“, která musı́me potvrzovat klepnutı́m na potvrzovacı́ tlačı́tko. To je ovšem nemyslitelné, pokud napřı́klad spouštı́me skript na jiném počı́tači, naplánovaný na určitou hodinu (třeba takovou, ve které u počı́tače nikdo nesedı́) nebo v dávkovém souboru. V takových přı́padech rozhodně použijeme cscript, který přı́padná hlášenı́ pouze zobrazı́ na přı́kazovém řádku bez nutnosti potvrzovánı́. V obou přı́padech můžeme za název skriptu přidat parametry, které řı́dı́ provedenı́ skriptu, seznam parametrů se zobrazı́ v nápovědě – wscript /? resp. cscript /?. O WSH najdeme informace na různých stránkách na internetu, napřı́klad http://www.kosek.cz/lenka/wsh/wsh.html. Skripty v Perlu: Abychom mohli spouštět skripty psané v Perlu, musı́me mı́t nainstalován modul pro jeho interpretaci, bez toho by skripty nebylo možné spustit. Modul pro Perl se jmenuje ActivePerl a je volně ke staženı́ na adrese http://www.activestate.com/ (jde o MSI soubor). Obvykle musı́me nastavit cestu ke spustitelnému souboru (standardně c:\Perl\bin). Obrázek 2.4: Skripty při spuštěnı́ a ukonSkripty definované v Zásadách skupiny: mohou zde čenı́ běhu Windows být určeny přihlašovacı́ a odhlašovacı́ skripty (pro uživatele nebo jiný objekt) a spouštěcı́ a ukončovacı́ skripty (pro počı́tač). 3 Pokud se skript po poklepánı́ nespustı́, v zobrazeném okně Otevřı́t v programu provedeme přiřazenı́ přı́pony skriptu programu Windows Based Scripting Host (wscript.exe), tedy tento program vybereme ze seznamu. P 2.6 SKRIPTY 67 Mohou být psány v jakémkoliv skriptovacı́m jazyce, které dokáže interpretovat Windows Scripting Host (JS, VBS, BAT, . . . ). Až samotný skript sestavı́me, otevřeme Zásady skupiny (gpedit.msc), najdeme uzel Skripty (bud’ ve větvi Konfigurace počı́tače ï Nastavenı́ systému Windows, pokud se majı́ spouštět při spuštěnı́ či ukončenı́ systému, a nebo ve větvi Konfigurace uživatele ï Nastavenı́ systému Windows, pokud se majı́ spouštět při přihlášenı́ či odhlášenı́ konkrétnı́ho uživatele). Úkoly 1. Najděte některý SCF soubor a prohlédněte si jeho obsah (napřı́klad v Poznámkovém bloku, jde o textový soubor). C 2. Na stránce http://www.kosek.cz/lenka/wsh/scripts.html si prohlédněte ukázkové kódy v JScriptu. 3. Podı́vejte se na mı́sto, kde bývajı́ uvedeny přihlašovacı́/odhlašovacı́ skripty uživatele a spouštěcı́/ukončovacı́ skripty pro počı́tač. Pokud máte dostačujı́cı́ přı́stupová oprávněnı́, pokuste se vytvořit skript (může to být dávkový soubor), který zobrazı́ uvı́tacı́ frázi (třeba Hello World) a počká na stisknutı́ klávesy uživatelem. Tento skript pak umı́stěte jako přihlašovacı́ skript (nejdřı́v uložte a pak v Zásadách skupiny vytvořte přı́slušnou zásadu). 4. Na stránce http://www.computerperformance.co.uk/vbscript/wmi basics.htm najdete tutoriál o propojenı́ VBScriptu a WMI. Prohlédněte si některý zde uvedený přı́klad. R R Kapitola 3 Řı́zenı́ přı́stupu V této kapitole probereme technologie, na kterých je založeno řı́zenı́ přı́stupu k objektům. Zaměřı́me se předevšı́m na Active Directory, správu uživatelů, použı́vánı́ bezpečnostnı́ch zásad a správu služeb a ovladačů. 3.1 Základnı́ pojmy Nejdřı́v několik pojmů: Důvěrnost (Confidentality) některá data jsou označena jako „důvěrná“, tj. určená pouze pro vymezený okruh uživatelů (přı́p. procesů). Dostupnost (Availability) uživatelům je zajištěn (bezproblémový) přı́stup ke všem datům, ke kterým jsou oprávněni přistupovat. Autenticita (Authenticity) je možnost ověřenı́ původu dat. Nepopiratelnost (Non-repudiation) popřenı́ původu dat. k možnosti ověřenı́ původu dat přidává vlastnost nemožnosti Integrita (Integrity) data jsou správná a úplná, nebyla pozměněna (napřı́klad při transportu přes sı́t’), integrita dat může být narušena bud’ úmyslně (při transportu, malwarem apod.) nebo neúmyslně (hardwarovou nebo softwarovou chybou). Autentizace je proces ověřovánı́ přı́stupových oprávněnı́ uživatele k datům (obecně k objektu). Autentizačnı́ protokol je protokol (tedy popis postupu) autentizace – jakým způsobem má probı́hat komunikace během autentizace, typické přı́klady autentizačnı́ch protokolů jsou Kerberos nebo RADIUS. SID (Security ID) je identifikátor zabezpečenı́, který jednoznačně (v lokálnı́ sı́ti) identifikuje uživatele, skupinu, službu nebo počı́tač v sı́ti, systém tento identifikátor přiřazuje při vytvořenı́ uživatele (skupiny, služby, připojenı́ počı́tače). Některé identifikátory SID jsou předdefinované (obvykle; nemusı́ tomu tak být na všech počı́tačı́ch v sı́ti). 1 1 Seznam obvyklých SID pro uživatele a skupiny najdeme na http://support.microsoft.com/kb/163846 68 P 3.1 ZÁKLADNÍ POJMY 69 Poznámka: V následujı́cı́m textu budeme mı́sty využı́vat nástroje, které nejsou součástı́ standardnı́ instalace Windows. Většinou se jedná o nástroje firmy Sysinternals, které najdete na adrese http://sysinternals.com, vlevo odkaz Utilities Index. Z tohoto zdroje již dobře známe napřı́klad Process Explorer. L Přı́klad 3.1 Asi nejjednoduššı́ způsob, jak zjistit SID některého uživatele nebo skupiny, je použitı́ programu PsGetSID z balı́ku programů PSTools od firmy Sysinternals. psgetsid vypı́še SID počı́tače, napřı́klad S-1-5-21-000111222-3334445555-666777888 (mı́sto sekvence 000...888 velmi pravdě- podobně budou jiné čı́slice) psgetsid uživatel vypı́še SID zadaného uživatele, napřı́klad S-1-5-21-000111222-3334445555-666777888-1005 (mı́sto sekvence 000...888 taktéž bu- dou jiné čı́slice, ale stejné, jaké bychom dostali ve výstupu předchozı́ho přı́kazu) psgetsid administrator vypı́še SID administrátora (lokálnı́ho počı́tače), napřı́klad S-1-5-21-000111222-3334445555-666777888-500 psgetsid guest vypı́še SID účtu guest (host), napřı́klad S-1-5-21-000111222-3334445555-666777888-501 (je zajı́mavé, že účty Administrator a Gu- est majı́ téměř stejné SID, lišı́ se jen v poslednı́ čı́slici) psgetsid everyone SID skupiny everyone, tj. S-1-1-0 SID účtu Local Service, tj. S-1-5-19, jedná se o účet pro služby pracujı́cı́ na počı́tači lokálně bez nutnosti autorizovaného přı́stupu na sı́t’, profil je v Documents psgetsid ”local service” and Settings\LocalService psgetsid ”network service” SID účtu Network Service, tj. S-1-5-20, pod tı́mto účtem pracujı́ sı́t’ové služby, jejich profil je v Documents and Settings\NetworkService Účet Local System má SID S-1-5-18, ale přı́kazem psgetsid ho nezjistı́me (SID na tento účet nenı́ veřejně namapován). Namapovánı́ nenı́ potřeba kromě jiného ani proto, že účet Local System nemá přiřazen žádný profil (také to lze chápat tak, že SID ve skutečnosti může souviset s profilem účtu). Přı́kaz psgetsid může být použit také naopak, pro zjištěnı́ účtu určeného čı́slem SID, lze ho také využı́vat v sı́ti (pracujeme s účty na vzdáleném počı́tači v sı́ti). Pokračujeme v pojmech: LSA (Local Security Authority, Mı́stnı́ úřad zabezpečenı́) je komponenta Windows (jedná se o soubor lsass.exe), která zajišt’uje autorizaci (napřı́klad ověřuje heslo při přihlášenı́ uživatele nebo ověřuje přı́stupová oprávněnı́ při přı́stupu k některému objektu). ACE (Access Control Entry) je položka řı́zenı́ přı́stupu, je to vlastnost, kterou lze uživateli (procesu) povolit nebo zakázat (napřı́klad čı́st, zapisovat, otevřı́t složku, atd.). P 3.1 ZÁKLADNÍ POJMY ACL (Access Control List) něnı́). 70 seznam řı́zenı́ přı́stupu, je to seznam položek ACE (přidělená opráv- DACL (Discretionary ACL) volitelný seznam řı́zenı́ přı́stupu, který má každý objekt zvlášt’ pro každého uživatele nebo skupinu, pro které byla definována oprávněnı́ k danému objektu (uživatelé a skupiny jsou zde určeni svými SID); v praxi se často mı́sto zkratky DACL pı́še jednoduše ACL, tyto pojmy jsou do určité mı́ry zaměnitelné. SACL (System Access Control List) podobně jako DACL (také seznam položek zvlášt’ pro různé uživatele a skupiny), ale určuje, co se má u daného objektu pro konkrétnı́ho uživatele či člena skupiny auditovat (zaznamenávat). Popisovač zabezpečenı́ (Security Descriptor, bezpečnostnı́ deskriptor) tuto strukturu má každý objekt, obsahuje všechny údaje důležité při přidělovánı́ oprávněnı́ (SID vlastnı́ka, SID skupiny, seznamy DACL, seznamy SACL, atd.), použı́vá se při kontrole každého pokusu o přı́stup k danému objektu. Ve Windows (obvykle na diskovém oddı́lu se souborovým systémem NTFS) má každý objekt svůj popisovač zabezpečenı́, ve kterém je určen vlastnı́k objektu, jeho skupina a přidružená přı́stupová oprávněnı́ (DACL seznamy) pro různé uživatele a skupiny. Zjednodušenou strukturu deskriptoru zabezpečenı́ vidı́me na obrázku 3.1. Deskriptor zabezpečenı́ SID vlastnı́ka objektu SID skupiny objektu seznamy DACL (SID uživ1 ; oprávněnı́ uživ1) (SID uživ2 ; oprávněnı́ uživ2) .. . seznamy SACL .. . Obrázek 3.1: Zjednodušená struktura deskriptoru zabezpečenı́ některého objektu Se seznamy DACL (ACL) lze manipulovat také v grafickém rozhranı́, a to ve vlastnostech objektu (souboru nebo jakéhokoliv jiného objektu), karta Zabezpečenı́. Pokud je zapnuto Zjednodušené sdı́lenı́ souborů (v Možnostech složky), máme silně omezenou možnost zasahovat do ACL souborů, proto alespoň pro účely procvičenı́ je dobré tuto vlastnost vypnout. Přihlašovacı́ údaje jsou ověřovány • moduly SAM (Security Accounts Manager) a LSASS, pokud jde o lokálnı́ účet, • službou Active Directory na řadiči domény, pokud jde o doménový účet v sı́ti. SAM udržuje na počı́tači mı́stnı́ databázi zabezpečenı́ obsahujı́cı́ údaje o zásadách pro účty, a to v souboru secedit.sdb ve složce ...\Windows\security\Database. 3.2 OBJEKTOVÝ MODEL VE WINDOWS ŘADY NT 71 Úkoly 1. Procvičte si to, co znáte z předchozı́ho semestru – najděte v grafickém rozhranı́ (některém správci souborů, přı́padně v Průzkumnı́ku) ACL složky Program Files. C 2. Pokuste se zjistit své SID. V registru zjistěte, čı́ SID jsou v klı́či HKU. 3.2 3.2.1 Objektový model ve Windows řady NT Objekty Windows NT nejsou čistě objektovým operačnı́m systémem, ale použı́vajı́ objekty pro reprezentaci systémových zdrojů (pozor, nenı́ to totéž co objekty v objektovém programovánı́, zde jsou vlastnosti objektů pevně stanoveny). Systému to umožňuje pracovat se všemi objekty jednotným způsobem včetně zajištěnı́ bezpečnosti. Z pohledu jádra systému se objekty dělı́ do dvou kategoriı́: P • Objekty jádra jsou jednoduché nı́zkoúrovnové objekty viditelné pouze v privilegovaném režimu (jenom pro jádro), tj. procesy běžı́cı́ v uživatelském režimu s těmito objekty nemohou přı́mo pracovat. • Objekty exekutivy (řı́dicı́ho programu jádra) jsou tvořeny obvykle jednı́m nebo vı́ce objekty jádra, dalšı́mi daty a rozhranı́m (přı́stupovými metodami), např.: – proces a podproces (vlákno procesu), – událost, párová událost (párová pro meziprocesovou komunikaci), – job (úloha) = skupina procesů sdı́lejı́cı́ch společné kvóty (stanovenı́ maximálnı́ho využı́vánı́ určitých prostředků), lze s nimi pracovat jako s celkem (napřı́klad skupina úzce spolupracujı́cı́ch procesů), – sekce (úsek) = oblast sdı́lené paměti, – soubor (přesněji struktura určujı́cı́ otevřený soubor), – port (přı́stupový bod pro volánı́ procedur jiných procesů, umožňuje informovat jiný proces o dokončenı́ I/O operace), – semafor (obecný semafor – počitadlo pro regulaci počtu procesů použı́vajı́cı́ch určitý prostředek), – mutex (pro realizaci vzájemného vyloučenı́ procesů v kritických sekcı́ch, vnitřně se nazývá mutant), – adresář objektů (jakýsi kontejner), – klı́č registru, – ukazatel na jiný objekt (symbolický odkaz, Symbolic Link), – typ objektu, atd. Všimněte si, že v seznamu objektů nenı́ uživatel ani skupina. Procesy a systém ke svým vlastnı́m objektům obvykle přistupujı́ přes manipulátor (handle), který zı́skajı́ při vytvořenı́ objektu (obvykle se jedná o návratovou hodnotu přı́slušné API funkce). Jde o nepřı́mý ukazatel, který (zjednodušeně) znamená index v tabulce manipulátorů pro daný proces. P 3.2 OBJEKTOVÝ MODEL VE WINDOWS ŘADY NT 72 Tento manipulátor (zachycený do vhodné proměnné) procesy mohou použı́vat jako parametr API funkcı́ objekt zpracovávajı́cı́ch. K objektu lze také přistupovat přes jeho název (pokud ho známe), ale je to pomalejšı́ než přes manipulátor (systém pokaždé překládá název na manipulátor). Jádro (včetně exekutivy) může k objektům přistupovat přı́mo (bez manipulátoru či názvu). Hlavička (záhlavı́) objektu obsahuje všechny důležité informace týkajı́cı́ se objektu, jako je • jméno objektu (pokud ho má přiděleno; jméno má smysl pouze u objektů sdı́lených, proces nebo systém k vlastnı́m objektům může přistupovat přes manipulátor), • adresář objektu v hierarchické struktuře objektů, • popisovač zabezpečenı́ s uvedenı́m vlastnı́ka, skupiny a přı́stupových oprávněnı́, • režim, ve kterém je objekt použı́ván (privilegovaný nebo uživatelský), • ukazatel na objekt typu (objekty určitého typu majı́ některé vlastnosti společné, nemusı́ být ukládány u každého objektu zvlášt’, tedy máme speciálnı́ objekty, které shrnujı́ společné vlastnosti, které dědı́ jejich potomci), atd. Každý objekt má svůj bázový typ a dále své atributy a metody. Napřı́klad atributem objektu typu proces může být PID procesu, jeho priorita, ukazatel na bezpečnostnı́ deskriptor, atd., k jeho metodám patřı́ napřı́klad metody open a close. Obrázek 3.2: Objekty v aplikaci WinObj P 3.2 OBJEKTOVÝ MODEL VE WINDOWS ŘADY NT 73 K objektům se lze dostat několika způsoby. Můžeme použı́t aplikaci WinObj2 od firmy Sysinternals (obrázek 3.2). Dostaneme se pouze k obecným základnı́m vlastnostem objektů (ne všech, napřı́klad u objektů zařı́zenı́ to nenı́ možné), napřı́klad počtu manipulátorů (handle) na tento objekt a přı́stupových oprávněnı́. Dále mnohé aplikace pracujı́cı́ s procesy dokážou zobrazit seznam manipulátorů vlastněných procesem. Napřı́klad v Process Exploreru se k těmto údajům dostaneme tak, že ve spodnı́m podokně zobrazı́me manipulátory (View ï Lower Pane View ï Handles), pokud ovšem toto podokno máme zobrazeno. Od firmy Sysinternals také pocházı́ program handle.exe,3 který je přı́mo určen pro různé úlohy souvisejı́cı́ s manipulátory. Mnohem sofistikovanějšı́ a úplnějšı́ přı́stup k objektům nabı́zejı́ programy pro laděnı́ jádra, napřı́klad aplikace WinDbg (tyto postupy najdeme v přı́loze). Správa objektů předevšı́m spravuje prostor jmen objektů (také obor názvů) s názvy všech pojmenovaných objektů, přes který jsou objekty přı́stupné v různých procesech, tento prostor je globálnı́ a viditelný pro všechny procesy. Objekty, které nemajı́ být viditelné pro jiné procesy, zde nesmı́ být, a proto ani nemajı́ jméno. Objekty jsou organizovány v hierarchické struktuře v paměti systému, v tzv. adresářové struktuře objektů (adresář objektů je také objekt). Tuto strukturu vidı́me (alespoň částečně) na obrázku 3.2 v aplikaci WinObj. Strukturu objektů udržuje komponenta nazvaná Správce objektů (Object Manager). Pouze objekty z adresářů \BaseNamedObjects a \GLOBAL?? jsou viditelné procesům v uživatelském režimu. Prvnı́ z nich obsahuje objekty událostı́, objekty synchronizačnı́ch mechanismů (mutexy a semafory), časovače a objekty sdı́lené paměti, tedy vše potřebné ke komunikaci procesů navzájem nebo procesů s jádrem. Druhý z nich obsahuje objekty odkazů na zařı́zenı́ (většina z nich odkazuje na objekty zařı́zenı́ v adresáři \Devices) s poněkud srozumitelnějšı́mi názvy než objekty, na které odkazujı́ (také se označujı́ jako Dos Devices). Každý pojmenovaný (viditelný) objekt je zařazen ve stromové struktuře objektů a je adresován cestou od kořene této struktury (kořen je označen \). Napřı́klad \ObjectTypes\Process je objekt typu „typ objektu“ (určuje typ objektu proces), \Registry\System\CurrentControlSet je objekt typu „klı́č registru“, a to HKLM/System/CurrentControlSet, \Device\HardDiskVolume1 je objekt reprezentujı́cı́ prvnı́ oddı́l na prvnı́m pevném disku (je typu Device, tedy zařı́zenı́), \Device\HardDisk0\Partition1 je odkaz (symlink) na předchozı́, tedy nepřı́mo odkazuje na prvnı́ oddı́l na prvnı́m pevném disku, \Device\HardDisk0\Partition0 je odkaz na objekt \Device\HardDisk0\DR0, který reprezentuje MBR sektor na prvnı́m pev- ném disku. 2 WinObj najdeme na http://technet.microsoft.com/cs-cz/sysinternals/bb896657%28en-us%29.aspx. Všechny nástroje firmy Sysinternals zı́skáme přes stránku http://sysinternals.com, jsme přesměrováni na stránky Microsoftu. 3 $ P 3.2 OBJEKTOVÝ MODEL VE WINDOWS ŘADY NT 74 Přı́klad 3.2 Vyzkoušı́me program handle.exe od Sysinternals: Zadáme handle -p winlogon.exe Zı́skáme seznam manipulátorů vlastněných zadaným procesem (přepı́nač -p umožňuje zadat název nebo PID procesu), výstup (zkrácený): Handle v3.42 Copyright (C) 1997-2008 Mark Russinovich Sysinternals - www.sysinternals.com -----------------------------------------------------------------------winlogon.exe pid: 668 NT AUTHORITY\SYSTEM C: File (RW-) C:\WINDOWS\system32 D8: File (RW-) C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Cont rols_6595b64144ccf1df_6.0.2600.5512_x-ww_35d4ce83 164: Section \BaseNamedObjects\ShimSharedMemory 1EC: File (RW-) C:\WINDOWS\system32 1F0: File (RW-) C:\WINDOWS\system32\dllcache 1F4: File (RW-) C:\WINDOWS\AppPatch 208: Section \BaseNamedObjects\NWGINA_LOGON_STATE ... 858: Section \BaseNamedObjects\mmGlobalPnpInfo 88C: Section \BaseNamedObjects\WDMAUD_Callbacks M Jak vidı́me, u souboru je vždy souhrn požadavků na typ přı́stupu (většinou pro čtenı́ a zápis). Každý řádek začı́ná čı́slem manipulátoru (hexadecimálně) a jeho typem, následuje jméno. Záhlavı́ s názvem a autorem programu handle již nebudeme do dalšı́ch výpisů zařazovat, i když ve skutečnosti se v nich objevuje. Zadáme handle -p 3092 (mı́sto názvu procesu zadáme jeho PID, toto PID je právě přiřazeno procesu notepad.exe), výstup (opět zkrácený): notepad.exe pid: 3092 SARKA\Uzivatel C: File (RW-) C:\ 10: File (RW-) C:\WINDOWS\WinSxS\x86\_Microsoft.Windows.Common-Con trols\_6595b64144ccf1df\_6.0.2600.5512\_x-ww\_35d4ce83 ... A8: Section \BaseNamedObjects\MSCTF.Shared.SFM.IKL M Oproti předchozı́mu výpisu je odlišnost také ve vypsaném uživateli (na prvnı́m řádku), vlastnı́kem je běžný uživatel. Zadáme handle -p cmd.exe Předpokládejme, že máme spuštěny dvě instance přı́kazového řádku (dvě okna), v jednom z nich právě zpracováváme jeden textový soubor. Protože jsme zadali název, který přı́slušı́ vı́ce procesům, vypı́šou se informace o obou. cmd.exe pid: 4088 SARKA\Uzivatel C: File (RW-) C:\Program Files\ProcessExplorer 6C: File (RW-) C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Con trols_6595b64144ccf1df_6.0.2600.5512_x-ww_35d4ce83 8C: Section \BaseNamedObjects\ShimSharedMemory 98: File (R--) D:\pokus.txt -----------------------------------------------------------------------cmd.exe pid: 3920 SARKA\Uzivatel M 3.2 OBJEKTOVÝ MODEL VE WINDOWS ŘADY NT 75 C: File (RW-) C:\Program Files\ProcessExplorer 6C: File (RW-) C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Con trols_6595b64144ccf1df_6.0.2600.5512_x-ww_35d4ce83 8C: Section \BaseNamedObjects\ShimSharedMemory Všimněte si, že ve výpisech jsou bud’ objekty typu soubor (což jsou typicky uživatelské objekty) a nebo objekty z adresáře \BaseNamedObjects. Pokud chceme opravdu všechny objekty, které s procesem souvisejı́, musı́me zadat parametr -a. Zadáme tedy handle -a -p cmd.exe. Zkrácený výstup: cmd.exe pid: 4088 SARKA\Uzivatel 4: KeyedEvent \KernelObjects\CritSecOutOfMemoryEvent 8: Directory \KnownDlls C: File (RW-) C:\Program Files\ProcessExplorer 10: Event 14: Directory \Windows 18: Port 1C: WindowStation \Windows\WindowStations\WinSta0 20: Event 24: WindowStation \Windows\WindowStations\WinSta0 28: Directory \BaseNamedObjects 2C: Mutant \BaseNamedObjects\SHIMLIB\_LOG\_MUTEX 30: Desktop \Default 34: Semaphore ... 7C: Key HKLM\SYSTEM\ControlSet001\Control\Nls\Language Groups 88: Mutant \BaseNamedObjects\ShimCacheMutex 8C: Section \BaseNamedObjects\ShimSharedMemory 98: File (R--) D:\pokus.txt M Ted’ jsou ve výpisu opravdu všechny objekty, které se podı́lejı́ na běhu procesu, včetně objektů jádra (mnohé z objektů nejsou pojmenované). Pokud nás zajı́má jen počet objektů jednotlivých typů (a máme spuštěný Poznámkový blok), zadáme napřı́klad handle -s -p notepad.exe, výstup: Handle type summary: Desktop : 1 Directory : 3 Event : 6 File : 4 Key : 4 KeyedEvent : 1 Mutant : 8 Port : 2 Section : 4 Semaphore : 5 WindowStation : 2 Total handles: 40 Ovšem nesmı́me zapomenout na to, že takto se počı́tajı́ pouze manipulátory, ale dva manipulátory mohou odkazovat na tentýž objekt (napřı́klad u tohoto výpisu dva manipulátory typu WindowStation ve skutečnosti odkazujı́ na tutéž stanici oken). M 3.2 OBJEKTOVÝ MODEL VE WINDOWS ŘADY NT 76 Pokud chceme vědět, který proces ve své tabulce obsahuje handle konkrétnı́ho (pojmenovaného) objektu, zadáme napřı́klad handle -a pagefile.sys (zjišt’ujeme, kdo pracuje s tı́mto souborem), výstup: System pid: 4 5AC: C:\pagefile.sys Na tentýž objekt může odkazovat vı́ce handlů v různých procesech, napřı́klad pokud chceme vědět, které procesy pracujı́ s našı́m podregistrem (větvı́ registru začı́najı́cı́ HKCU, zadáme handle -a hkcu. Výpis bývá většinou velmi dlouhý, je vhodné ho přesměrovat do souboru (mezipamět’přı́kazového řádku na delšı́ výpisy nestačı́). M Program Handle (nebo jiný program umožňujı́cı́ pracovat s manipulátory) se může hodit také napřı́klad tehdy, když chcete pracovat s některým souborem (či jiným objektem), ale tento soubor je uzamknut (vlastněn) jiným procesem. Přı́klad 3.3 Ukážeme si způsob zjištěnı́ vlastnı́ka souboru a jeho „uvolněnı́“. Předpokládejme, že někdo má v programu MS Word otevřen soubor pokus.rtf (na typu souboru ani moc nezáležı́), může být otevřen i někým ze sı́tě. Chceme s tı́mto souborem provést některou operaci, která je programem blokována. Nejdřı́v zjistı́me potřebné informace: handle -a pokus.rtf Výpis: WINWORD.EXE pid: 3960 3C8: D:\pokus.rtf Z tohoto výpisu potřebujeme dva čı́selné údaje – PID procesu a čı́slo manipulátoru objektu. Obojı́ zadáme do následujı́cı́ho přı́kazu: M handle -c 3C8 -p 3960 Budeme dotázáni, zda opravdu chceme handle uvolnit, pokud souhlası́me, bude uvolněn a při dotazu na vlastnı́ka tohoto souboru se objevı́ pouze hláška „No matching handles found.“. Postup má jeden háček – pokud se nestihneme včas stát vlastnı́kem objektu, tak v okamžiku, kdy ve Wordu znovu někdo začne se souborem pracovat (bez uzavřenı́ a znovuotevřenı́), Word znovu soubor „uzurpuje“ (ale čı́slo manipulátoru už bude jiné). Z hlediska uživatele pracujı́cı́ho se souborem ve Wordu se prakticky nic neprojevı́. Předchozı́ postup je užitečný napřı́klad tehdy, když aplikace z nějakého důvodu při svém ukončenı́ neuvolnı́ své manipulátory (napřı́klad při nekorektnı́m ukončenı́ nebo „zamrzne“). Úkoly 1. Stáhněte si a vyzkoušejte aplikaci WinObj. Projděte si názvy objektů souvisejı́cı́ s pevnými disky a souborovými systémy, podı́vejte se na objekty jádra. Projděte si adresáře pojmenovaných objektů, které jsou viditelné i v uživatelském režimu. C 3.2 OBJEKTOVÝ MODEL VE WINDOWS ŘADY NT 77 2. V aplikaci Process Explorer zapněte zobrazenı́ spodnı́ho podokna a nastavte v něm zobrazovánı́ manipulátorů (handlů). V podokně pro manipulátory zobrazte sloupec File Share Flags. 3. Podı́vejte se, jaké objekty vlastnı́ procesy system, smss.exe a některé dalšı́. U objektů typu File (soubor) si všimněte přı́znaků (sloupec Share Flags). Zjistěte, který z těchto procesů je vlastnı́kem hlavnı́ho adresáře objektů pro registr (\REGISTRY). 4. Pokud máte možnost, vyzkoušejte program handle (podle přı́kladů 3.2 a 3.3). 3.2.2 GDI objekty a stanice oken Z hlediska určenı́ můžeme objekty rozdělit do třı́ skupin – objekty jádra, GDI objekty a uživatelské objekty. GDI objekty souvisejı́ s grafickým rozhranı́m. Typickými zástupci jsou font, bitmapa, štětec, pero, paleta, oblast na obrazovce, grafická metadata. GDI objekty nejsou nativně chráněny tak jako objekty jádra. Jsou vždy soukromé pro konkrétnı́ proces (procesy nemohou použı́vat GDI objekty jiných procesů) a navı́c k jednomu GDI objektu může existovat vždy jen jeden manipulátor. Protože GDI objekty (a dalšı́ objekty na nich založené) obecně zabı́rajı́ hodně systémových zdrojů (hlavně paměti), je stanovena hornı́ hranice pro jejich počet. Tato hranice je odlišná u různých verzı́ Windows a navı́c může být změněna, najdeme ji v registru v klı́či HKLM/SOFTWARE/Microsoft/Windows NT/CurrentVersion/WindowsGDIProcessHandleQuota. Stanice oken (Window Stations) jsou objekty jádra určené k dodatečné ochraně uživatelských objektů (GDI objekty tuto ochranu nepotřebujı́, dı́ky výše uvedeným omezenı́m). Každá stanice oken má kromě jiného přiřazenu jednu schránku a jeden nebo vı́ce objektů typu plocha (desktop). Stanice oken najdeme v adresáři objektů \Windows\WindowStations, jehož obsah vidı́me na obrázku 3.3. Obrázek 3.3: Objekty stanic oken Z hlediska uživatele je nejdůležitějšı́ stanicı́ oken objekt WinSta0, která jako jediná dokáže zobrazit uživatelské prostředı́ a zajišt’ovat komunikaci s uživatelem, je určena pro interaktivnı́ procesy a služby (většina služeb je neinteraktivnı́, ale některé vyžadujı́ možnost interakce s uživatelem a tedy zařazenı́ do WinSta0). Při vytvořenı́ interaktivnı́ho procesu je tomuto procesu automaticky vytvořeno okno na výchozı́ ploše stanice WinSta0 a proces může komunikovat s jinými procesy přes schránku stanice. Dále existuje ještě několik stanic oken pojmenovaných Service-0x0-hhex čı́sloi$, které jsou určeny pro systémové neinteraktivnı́ procesy nepoužı́vajı́cı́ okno. Hexadecimálnı́ čı́slo v názvu je identifikátor přihlašovacı́ relace. Jsou určeny pro neinteraktivnı́ služby a jiné procesy se speciálnı́mi přı́stupovými oprávněnı́mi, napřı́klad Service-0x0-3e7$ je stanice oken pro neinteraktivnı́ systé- P P 3.2 OBJEKTOVÝ MODEL VE WINDOWS ŘADY NT 78 mové procesy běžı́cı́ pod účtem s vysokými přı́stupovými oprávněnı́mi na lokálnı́m počı́tači (účet Local System). Pokud služba běžı́ pod konkrétnı́m uživatelským účtem (tj. žádným ze speciálnı́ch účtů pro služby, o kterých se budeme učit dále v této kapitole), jejı́ proces je připojen do stanice oken, jejı́ž název je částečně odvozen z SID uživatelského účtu, pod kterým běžı́ (hornı́ část SID se použije jako hexadecimálnı́ čı́slo v názvu, napřı́klad Service-0x0-63a8f$). Je zřejmé, že taková služba nemůže být interaktivnı́ (protože nenı́ napojena na stanici oken WinSta0). V seznamu stanic oken se může objevit SAWinSta. Tato stanice má poněkud zvláštnı́ postavenı́ (v dokumentaci ji často ani nenajdeme). Je určena pro procesy (lépe řečeno služby), které byly spuštěny ještě dřı́v, než byly spuštěny všechny moduly správy procesů. Počet GDI objektů a stanic oken je možné v Process Exploreru zobrazit jako dalšı́ sloupec (klepneme pravým tlačı́tkem myši na záhlavı́ kteréhokoliv sloupce, zvolı́me Select Columns a na záložce Process Memory zaškrtneme volby pro tyto objekty). Seznam těchto objektů je ve spodnı́m podokně, pokud máme nastaveno zobrazovánı́ manipulátorů (handle). Také v tomto podokně můžeme vybı́rat zobrazené sloupce (v kontextovém menu některého sloupce zvolı́me Select Columns. Přı́klad 3.4 Výstup přı́kazu handle -a windowstations\winsta0 je následujı́cı́ (zkrácený, bez záhlavı́): csrss.exe csrss.exe csrss.exe winlogon.exe winlogon.exe ... thunderbird.exe thunderbird.exe FreeCommander.exe FreeCommander.exe cmd.exe cmd.exe handle.exe handle.exe pid: pid: pid: pid: pid: 654 654 654 672 672 F8: 28C: 3FC: B0: B8: \Windows\WindowStations\WinSta0 \Windows\WindowStations\WinSta0 \Windows\WindowStations\WinSta0 \Windows\WindowStations\WinSta0 \Windows\WindowStations\WinSta0 pid: pid: pid: pid: pid: pid: pid: pid: 2540 2540 2500 2500 3920 3920 1420 1420 2C: 34: 2C: 34: 1C: 24: 7E0: 7F4: \Windows\WindowStations\WinSta0 \Windows\WindowStations\WinSta0 \Windows\WindowStations\WinSta0 \Windows\WindowStations\WinSta0 \Windows\WindowStations\WinSta0 \Windows\WindowStations\WinSta0 \Windows\WindowStations\WinSta0 \Windows\WindowStations\WinSta0 M Zı́skali jsme seznam procesů, které jsou napojeny do stanice oken WinSta0 (mohli jsme zadat jen winsta0, ale tento podřetězec se vyskytuje v názvech některých dalšı́ch objektů). Podobně bychom zjistili seznam procesů napojených do kterékoliv jiné stanice oken. 3.2.3 Model COM COM (Component Object Model) je specifikace určujı́cı́ formu, vlastnosti a způsoby přı́stupu k objektům (nenı́ to programovacı́ jazyk). Tento model byl navržen, aby bylo možné vytvářenı́ binárnı́ch (tj. s přeloženým kódem) komponent (to jsou ty cı́lové objekty) napsaných v libovolném jazyce pro P 3.2 OBJEKTOVÝ MODEL VE WINDOWS ŘADY NT 79 využitı́ opět v kterémkoliv programovacı́m jazyce. Můžeme řı́ci, že jde o specifikaci binárnı́ho rozhranı́ objektových komponent přı́stupného nejen v rámci jednoho procesu, ale i v jiných procesech, než ve kterém běžı́. Účelem je také umožněnı́ relativně snadné komunikace mezi procesy. Každá komponenta má definováno nejméně jedno rozhranı́ (interface), které určuje jejı́ metody. Vnitřnı́ datové struktury komponenty nejsou přı́stupné, proto nedocházı́ k problémům běžným u klasických dynamických knihoven. Narozdı́l od běžných objektově orientovaných jazyků (v nichž jsou metody součástı́ objektu) je rozhranı́ vlastně třı́dou a objekt (komponenta) je třı́da odvozená od některého rozhranı́, která přidává konkrétnı́ hodnoty vnitřnı́ch dat (jedna komponenta může implementovat i vı́ce než jedno rozhranı́). Přı́stupnost metod definovaných rozhranı́m je fyzicky řešena jako ukazatel na tabulku virtuálnı́ch funkcı́, která obsahuje ukazatele na konkrétnı́ implementace metod dané komponenty. Všechna rozhranı́ jsou potomky (v rámci dědičnosti) rozhranı́ iUnknown (názvy rozhranı́ tradičně začı́najı́ pı́smenem „i“). rozhranı́ iUnknown @ ?@ R @ tabulka virtuálnı́ch funkcı́ .. . ? rozhranı́ iRozhrA třı́da - Třı́daA - virtuálnı́ funkce - fce1 - fce2 - fce3 Obrázek 3.4: Vztah třı́d a rozhranı́ v modelu COM Komponenty (třı́dy) jsou identifikovány podle čı́sla CLSID (Class ID), které jsme často viděli napřı́klad v registru. CLSID je vlastně typ označenı́ odpovı́dajı́cı́ označenı́m, která souhrnně nazýváme GUID (Globally Unique ID). Existuje tedy několik typů GUID – pokud se jedná o identifikaci třı́dy, je to CLSID, pokud identifikujeme rozhranı́, je to IID (Interface ID), jestliže identifikujeme knihovnu, je to LIBID (Library ID), apod. Aby GUID bylo opravdu unikátnı́ (jednoznačné), musı́ být vygenerováno programem pro tento účel určeným (můžeme stanovit nějaké GUID i ručně, ale nemáme zaručeno, že napřı́klad u zákaznı́ka takové GUID neexistuje. Programátoři obvykle použı́vajı́ program Guidgen.exe (tento nebo jiný podobný program bývá součástı́ běžných programovacı́ch prostředı́). Hodně systémových funkcı́ je implementováno jako rozhranı́ COM, na této technologii jsou založeny technologie OLE, OCX, ActiveX a částečně .NET Framework. Také z nı́ vycházı́ rozhranı́ WMI, kterému se budeme věnovat ke konci této kapitoly. Definice třı́d (typů) se vytvářı́ v jazyce MIDL (Microsoft Interface Definition Language) a dál se překládá do konkrétnı́ho jazyka, ve kterém programujeme aplikace. COM lze programovat v mnoha jazycı́ch (je důležité, aby jazyk podporoval ukazatele a aby byl objektový). Pro jazyk musı́ existovat kompilátor (snad spı́še preprocesor) jazyka MIDL. Většinou je jazyk MIDL před programátorem „skryt“ programovacı́m prostředı́m. Programujeme obvykle v jazycı́ch C++, Delphi, Visual Basic, P 3.2 OBJEKTOVÝ MODEL VE WINDOWS ŘADY NT 80 C# (a dalšı́ch .NET jazycı́ch), asi nejobvyklejšı́ programovacı́ prostředı́ pro COM je Visual Studio (resp. Visual Studio.NET). Velmi důležitou výhodou technologie COM je univerzálnost (COM komponenty lze použı́t prakticky v jakémkoliv modernı́m jazyce i po jejich přeloženı́, je definováno jejich binárnı́ rozhranı́) a dále vlastnı́ správa paměti (obvykle se nemusı́me starat o uvolněnı́ alokované paměti). Tento model ale má také nevýhody, a to P • komplikovanost návrhu a použı́vánı́, • problémy s bezpečnostı́ při programovánı́ internetových aplikacı́ (komponenty majı́ sice svá data skrytá, ale samy mohou volně přistupovat všude tam, kam má přı́stup proces, v jehož kontextu běžı́), atd. Nejen z důvodu těchto nevýhod bylo navrženo (a použı́vá se) několik rozšı́řenı́: • COM+ je rozšı́řenı́ původnı́ho COM o nové vlastnosti, napřı́klad byl vylepšen systém přı́stupových oprávněnı́ (oprávněnı́ založená na rolı́ch) a byla přidána podpora COM+ Events (událostı́, které lze využı́vat mezi procesy), • DCOM (Distributed COM) je rozšı́řenı́ možnosti komunikace mezi objekty i na různých počı́tačı́ch (podpora distribuovaných aplikacı́), toto rozšı́řenı́ bylo původně součástı́ COM+. Ve Windows se pro konfiguraci DCOM použı́vá nástroj Konfigurace modelu DCOM, který spustı́me souborem dcomcnfg.exe (je pravděpodobné, že po zadánı́ tohoto přı́kazu obdržı́me několik hlášenı́ typu „CLSID . . . nenı́ zaznamenán v registru. Chcete ji zaznamenat?“. Všechna vystornujeme (klepneme na Ne). Ve Windows od verze Vista budeme potřebovat vyššı́ přı́stupová oprávněnı́. V nástroji Konfigurace modelu DCOM (obrázek 3.5 vlevo) máme seznam aplikacı́ DCOM (dostaneme se k jejich vlastnostem (tentýž obrázek vpravo). Na záložce Výchozı́ vlastnosti můžeme povolit nebo zakázat použı́vánı́ DCOM a stanovit, zda a jak se má provádět kontrola přı́stupových oprávněnı́. Na záložce Výchozı́ zabezpečenı́ nastavujeme výchozı́ přı́stupová, spouštěcı́ a konfiguračnı́ Obrázek 3.5: Nástroj Konfigurace modelu DCOM 3.2 OBJEKTOVÝ MODEL VE WINDOWS ŘADY NT 81 oprávněnı́. Na záložce Výchozı́ protokoly lze stanovit a přı́padně i konfigurovat (u TCP/IP) protokoly použı́vané pro komunikaci mezi komponentami (také po sı́ti). Všechny tyto vlastnosti můžeme také konfigurovat zvlášt’pro jednotlivé aplikace v jejich vlastnostech. Obrázek 3.6: Nástroj Služba komponent Dalšı́m nástrojem pro konfiguraci, tentokrát modelu COM+, je Služba komponent (Component Services, soubor – konzola comexp.msc) dostupná v Nástrojı́ch pro správu. Rozhranı́ vidı́me na obrázku 3.6. V konzole najdeme podrobné informace o COM aplikacı́ch a jejich komponentách. Můžeme zde instalovat COM aplikace (také na ostatnı́ch počı́tačı́ch v sı́ti) a konfigurovat je i jejich komponenty (až na úroveň metod objektů). Zvláště v konzole běžı́cı́ na serveru si dáváme záležet na konfiguraci zabezpečenı́. K vlastnostem aplikacı́, komponent a dalšı́ch vnořených položek se dostaneme přes kontextové menu položky, v něm zvolı́me Vlastnosti (viz obrázek 3.7). Komponenty najdeme i v registru. Třı́dy jsou v klı́či HKCR/CLSID (v podklı́čı́ch nazvaných podle jejich CLSID) a rozhranı́ komponent v HKCR/interface (v podklı́čı́ch nazvaných podle jejich IID). V obou přı́padech vždy najdeme v položce (Výchozı́) název třı́dy (resp. rozhranı́). V podklı́čı́ch P Obrázek 3.7: Vlastnosti komponenty 3.2 OBJEKTOVÝ MODEL VE WINDOWS ŘADY NT 82 jsou pak dalšı́ informace. Ovšem vı́me, že klı́č HKCR je pouze odkazem jinam, tedy ve skutečnosti se nacházejı́ v klı́či HKLM. Informace o programovánı́ COM najdeme na vı́ce různých stránkách na internetu, napřı́klad na http://antonio.cz/com/index.html. Speciálnı́m typem COM objektů jsou Automation Objects, implementace potomků rozhranı́ iDispatch (to znamená, že Automation Server je COM komponenta, která implementuje rozhranı́ iDispatch). Původně byly nazývány OLE Automation, ale nejsou použı́vány pouze v technologii OLE. Účelem použı́vánı́ Automation je zjednodušenı́ přı́stupu ke komponentě. Rozhranı́ iDispatch umožňuje zjistit metody nabı́zené komponentou bez nutnosti vyhledávánı́ přes tabulku virtuálnı́ch metod. Jsou určeny k použitı́ ve skriptovacı́ch jazycı́ch pod Windows (zvláště založených na Visual Basicu). Aplikace (Automation Server) může nabı́zet (exportovat) svůj Automation Object ke sdı́lenı́, a jiná aplikace nazvaná Automation Controller (klient), s tı́mto objektem může manipulovat. Automation Objects s vizuálnı́m rozhranı́m, které vždy běžı́ uvnitř některé aplikace, nazýváme ActiveX Controls (ovládacı́ prvky ActiveX) a manipulujı́cı́ aplikace je ActiveX Client. Typické použitı́ je při distribuovaném spouštěnı́ drobných aplikacı́ či prvků grafického rozhranı́ (to jsou právě ovládacı́ prvky ActiveX) ze serveru na klientských počı́tačı́ch v sı́ti. Prvky ActiveX jsou tedy Automation objects, které kromě rozhranı́ iDispatch implementujı́ ještě některá dalšı́ rozhranı́ souvisejı́cı́ právě s grafickým rozhranı́m komponenty. P P Zkratka ADO znamená ActiveX Data Objects, technologie ADO byla původně založena na prvcı́ch ActiveX (podobně ASP – Active Server Pages). Dalšı́ známý typ objektů jsou OLE objekty, implementujı́cı́ rozhranı́ iOleObject. Konkrétnı́ rozhranı́ implementované některým OLE objektem se nazývá OLE kontejner. Úkoly 1. Podle svých možnostı́ si projděte nástroj Konfigurace modelu DCOM a konzolu Služba komponent. C 2. V klı́či HKCR/icmfile/shellex/ContextMenuHandlers zkopı́rujte název podklı́če obsahujı́cı́ CLSID (na klı́či zobrazte kontextové menu a vyberte Zkopı́rovat název klı́če). Pak se pokuste v klı́či HKCR/CLSID najı́t podklı́č se stejným názvem a zjistěte, jaké jsou v jeho podklı́či položky. Podobně můžete vyhledávat i dalšı́ klı́če nazvané podle CLSID souvisejı́cı́ch třı́d komponent (nebo IID rozhranı́). 3. Najděte v registru rozhranı́ IUnknown a zjistěte jeho IID. 3.2.4 .NET Technologie .NET vznikla roku 2000, použı́vá se od roku 2001/02. Je považována za nástupce technologie COM. Jedná se o standard pro běhové prostředı́ (ekvivalent podsystému ve Windows, ale v obecnějšı́m smyslu slova) podobně jako napřı́klad Java, s vlastnı́ správou paměti. Je definováno jakési rozhranı́, které (výlučně) sloužı́ ke komunikaci .NET aplikace se systémem. Podobně jako v Javě, .NET aplikace jsou překládány do bytecode (mezikódu), který je nezávislý na softwarové platformě (operačnı́m P 3.3 ŘÍZENÍ PŘÍSTUPU A SPRÁVA UŽIVATELŮ 83 systému) a teprve při spuštěnı́ aplikace docházı́ k překladu bytecode do kódu specifického pro daný systém (aplikace zcela přeložená pro běh v konkrétnı́m systému se nazývá assembly). S touto technologiı́ se běžně setkáváme od Windows XP SP2 a Server 2003 (do Windows 2000 a XP bez SP2 ji lze doinstalovat) pod názvem .NET Framework, od verze Vista je dokonce velmi úzce spojena s grafickým rozhranı́m systému (nový podsystém WinFX pro .NET aplikace, pod nı́m běžı́ napřı́klad PowerShell). .NET technologie je prezentována jako multiplatformnı́, tedy dostupná pro kterýkoliv operačnı́ systém, i když ze začátku tı́m „kterýkoliv“ byl mı́něn kterýkoliv systém typu Windows. Dnes již existujı́ porty pro dalšı́ operačnı́ systémy. Přı́mo na MSDN4 jsou už nějakou dobu dostupné porty pro FreeBSD a MacOS X, na internetu je několik řešenı́ pro Linux (MONO, dotGNU – Portable.NET). Programujeme v tzv. .NET jazycı́ch, což je předevšı́m C#, ale také Visual Basic.NET, Delphi.NET, J#, IronPython, IronRuby, atd. Od .NET jsou odvozeny technologie ADO.NET (potomek staršı́ technologie ADO, pro přı́stup k databázı́m) a ASP.NET (pro programovánı́ webových aplikacı́). Ve Windows můžeme prostředı́ .NET Framework konfigurovat v snap-in modulu .NET Framework Configuration. Konzolu s tı́mto snap-in modulem vytvořı́me snadno – spustı́me MMC (mmc.exe) a běžným způsobem přidáme snap-in modul. Fyzicky se jedná o soubor (konzoli) msCorCfg.msc (je „zanořen“ ve složce ...\windows\Microsoft.NET\Framework\verze). Tento nástroj použı́váme předevšı́m k řı́zenı́ prostředı́, ve kterém běžı́ .NET aplikace (assemblies), napřı́klad můžeme zde nastavovat bezpečnostnı́ zóny, ve kterých běžı́ aplikace s různými oprávněnı́mi. Seznam všech nástrojů od Microsoftu pro práci s .NET je na http://msdn.microsoft.com/en-us/library/d9kh6s92%28VS.80%29.aspx. 3.3 3.3.1 Řı́zenı́ přı́stupu a správa uživatelů Uživatelské profily a uživatelské účty Uživatelský profil (User Profile) ve Windows je souhrn prostředků přidělených uživateli a nastavenı́ systému (většinou prostředı́) typických pro tohoto uživatele. Obvykle zde bývá řazen datový prostor přidělený uživateli (standardně složka Dokumenty) a dále nastavenı́ plochy, nabı́dky Start, individuálnı́ch položek kontextového menu Nový a Odeslat, Cookies, apod. Celý uživatelský profil je ve Windows řady NT načten ve složce Documents and Settings (od verze Vista Users), v podsložce každého uživatele, ve Windows s DOS jádrem je to bud’ systémová složka (část je přı́mo na systémovém disku) a nebo složka Profiles (pokud je nadefinován vı́ce než jeden uživatelský profil). Uživatelský účet (User Account) je fyzicky implementován v registru (narozdı́l od profilu, který je vlastně adresářem/složkou), je to záznam obsahujı́cı́ převážně bezpečnostnı́ informace určujı́cı́ konkrétnı́ho uživatele v operačnı́m systému. Tyto informace jsou obvykle uživatelské jméno, heslo, členstvı́ ve skupinách a oprávněnı́ k přı́stupu ke zdrojům systému (přı́stupová práva). 4 $ MSDN (Microsoft Developer Network) je část serveru Microsoftu dostupná na jeho stránkách, obsahuje nástroje a dokumenty pro podporu programátorů. P P 3.3 ŘÍZENÍ PŘÍSTUPU A SPRÁVA UŽIVATELŮ 84 Skupina je definována svým názvem, seznamem členů a také oprávněnı́mi k přı́stupu ke zdrojům pro členy skupiny. Jeden uživatel může být členem vı́ce skupin. Uživatelské účty se ve Windows použı́vajı́ pouze v řadě NT, profily jsou v obou větvı́ch Windows. Ve Windows řady NT existuje mezi profily a účty úzký vztah (obvykle k účtu přı́slušı́ konkrétnı́ profil, včetně procesů služeb), po přihlášenı́ uživatele s určitým účtem je načten jeho profil. Obrázek 3.8: Přesunutı́ složky Dokumenty Přesměrovánı́ složek: Složky patřı́cı́ do profilu uživatele lze přesměrovat pomocı́ Zásad skupiny nebo Systémových zásad (viz dále), přı́padně v registru, ale složku Dokumenty můžeme přesměrovat na jiné mı́sto (na lokálnı́m disku) s použitı́m Vlastnostı́ (na složce Dokumenty vyvoláme kontextové menu, zvolı́me Vlastnosti) – z důvodu bezpečnosti systému a dat je výhodnějšı́ mı́t data na jiném logickém disku než systém a programy (Windows je vhodné občas přeinstalovat, ale přece si kvůli tomu nebudeme mazat data). Zkopı́rovánı́ profilu použijeme napřı́klad tehdy, když chceme profil uživatele přenést na jiný počı́tač (včetně všech nastavenı́ a dat). Tuto operaci provádı́me v nástroji Systém (Vlastnosti v kontextovém menu ikony Tento počı́tač, záložka Profily uživatelů), a to vybránı́m profilu a klepnutı́m na tlačı́tko Kopı́rovat. Zobrazı́ se okno, ve kterém zadáme umı́stěnı́ kopie (třeba USB flash disk, na kterém profil přeneseme). Upozorněnı́: profil můžeme kopı́rovat jen tehdy, pokud zrovna nenı́ použı́ván, tedy nelze zkopı́rovat profil patřı́cı́ „kopı́rujı́cı́mu“. Když chceme zkopı́rovat svůj vlastnı́ profil, přihlásı́me se jako jiný uživatel s administrátorskými oprávněnı́mi. Cestovnı́ profily (Roaming Profiles) umožňujı́ uživatelům použı́vat tentýž profil na vı́ce různých počı́tačı́ch v téže sı́ti. Veškerá data profilu jsou uložena na serveru. Po přihlášenı́ k tomuto serveru (tj. přihlášenı́ do sı́tě) je celý profil načten do počı́tače podobně, jakoby byl profil nadefinován na samotném počı́tači, po odhlášenı́ se profil opět uložı́ na server. Cestovnı́ profily se využı́vajı́ napřı́klad ve školstvı́, aby žáci – studenti nemuseli být vázáni na konkrétnı́ počı́tač, a měli by ke svým datům přı́stup z kteréhokoliv počı́tače v každé učebně, ale také napřı́klad u mobilnı́ch zaměstnanců. Ti svůj profil mohou použı́vat i na pracovnı́ cestě (notebook připojı́ k internetu, přihlásı́ se, automaticky se načte profil, . . . ) – implementuje se pomocı́ VPN $ $ P 3.3 ŘÍZENÍ PŘÍSTUPU A SPRÁVA UŽIVATELŮ 85 (Virtual Private Network), připojenı́ by mělo být vhodně zabezpečené. Cestovnı́ profily mohou být výhodné i tehdy, když uživatel použı́vá pořád tentýž počı́tač – svůj profil má zálohován na serveru a neztratı́ data, pokud počı́tač odejde do „věčných lovišt’“. Jistou nevýhodou je rozsáhlost dat, která takto při každém přihlášenı́ a odhlášenı́ putujı́ po sı́ti, může zpomalovat přihlašovánı́ a odhlašovánı́ a za určitých okolnostı́ může dojı́t k problémům při přenášenı́ dat na server. To lze řešit přesunutı́m některých druhů dat profilu na sı́t’ové disky a jejich přı́padným zpřı́stupněnı́m offline, pokud uživatel nechce být neustále připojen k sı́ti. Je nutné hlı́dat, zda se na počı́tačı́ch nehromadı́ profily uživatelů (občas je třeba je mazat). Dále může nastat situace, kdy po odhlášenı́ uživatele některé služby nebo aplikace neukončı́ práci s částmi registru patřı́cı́mi do profilu uživatele, a tı́m znemožnı́ přenesenı́ profilu na server (a samozřejmě profil se na lokálnı́m počı́tači nevymaže). Tyto je problémy se týkajı́ předevšı́m klientských počı́tačů s Windows 2000, ve Windows XP jsou již řešeny. Cestovnı́ profil bud’ vytvořı́me přı́mo na serveru, a nebo můžeme lokálnı́ profil změnit na cestovnı́. To se provede tak, že $ • v nástroji pro správu uživatelů (Uživatelé a hesla nebo Uživatelské účty, podle verze Windows) najdeme vlastnosti uživatele, jehož profil chceme změnit na cestovnı́, najdeme záložku pro profil a zadáme sı́t’ovou cestu k budoucı́mu profilu (začı́najı́cı́ dvěma opačnými lomı́tky, povede do vhodného adresáře na serveru, který ještě neexistuje), napřı́klad \\serverXXX\lide\novak, • zkopı́rujeme profil na server (při kopı́rovánı́ zadáme stejnou cestu jako v předchozı́m bodu). Služby se nemusı́ přihlašovat s přı́stupovými právy přihlášeného uživatele, většinou využı́vajı́ účty LocalSystem, LocalService a NetworkService. Službám a jejich přı́stupovým oprávněnı́m se budeme věnovat později. Nastavenı́ souvisejı́cı́ s uživateli, skupinami a přı́stupovými oprávněnı́mi provádı́me v těchto nástrojı́ch: $ • v nástroji Uživatelé a hesla/Uživatelské účty (v Ovládacı́ch panelech) – vytvořenı́ a zrušenı́ uživatelského účtu, • v konzole Správa počı́tače ï Mı́stnı́ uživatelé a skupiny (konzola lusrmgr.msc) – vytvářenı́ a rušenı́ skupin, přidávánı́ a odstraňovánı́ uživatelů ze skupin, také některá z nastavenı́ prováděných přı́kazy net user a net localgroup, • v Mı́stnı́ch zásadách zabezpečenı́ (v Nástrojı́ch pro správu), • v Zásadách skupiny (některé aspekty), • v Přı́kazovém řádku pomocı́ cacls.exe a dalšı́ch. Ne všechny tyto možnosti jsou dostupné ve všech verzı́ch Windows, mimořádně osekané jsou napřı́klad Windows XP Home, kde nenajdeme konzolu Mı́stnı́ uživatelé a skupiny ani Zásady skupiny. Úkoly 1. Najděte svůj profil a zjistěte, jak jsou k němu nastavena přı́stupová oprávněnı́ pro vás a pro administrátora. Porovnejte s nastavenı́m oprávněnı́ u profilu All Users a Default User. Ověřte si, ve které systémové proměnné je uložen název profilu právě přihlášeného uživatele. C 3.3 ŘÍZENÍ PŘÍSTUPU A SPRÁVA UŽIVATELŮ 86 2. Najděte svůj uživatelský účet v registru. Dále si vzpomeňte, kde v grafickém rozhranı́ lze konfigurovat uživatelské účty a kde může uživatel nastavit své heslo. Vzpomeňte si, jak se to dělá v Přı́kazovém řádku. 3. Pro účty Local Service a Network Service najděte uživatelské účty v registru (hodnoty SID zjistı́te na začátku této kapitoly) a profily v adresářové struktuře. 4. Pokuste se přesměrovat svou složku Dokumenty na jiný diskový oddı́l. 5. Zjistěte, zda váš profil je lokálnı́ nebo cestovnı́. Projděte si postup, kterým byste změnili lokálnı́ profil na cestovnı́. 3.3.2 Přı́stupová oprávněnı́ V souborovém systému NTFS je u každého objektu (také složky a souboru) evidován seznam DACL (resp. zjednodušeně ACL) s přı́stupovými právy. Je zde stanoveno, kdo (třeba člen konkrétnı́ skupiny nebo uživatel) může provádět kterou akci s tı́mto objektem. O přı́stupových oprávněnı́ch už něco vı́me z předchozı́ho semestru. Základnı́ symboly pro přı́stupová oprávněnı́ jsou • • • • • O f (full) – všechna práva, r (read) – právo čtenı́, w (write) – právo zápisu, c (change) – právo modifikace (změny), n (none) – žádná práva. U složek navı́c můžeme určit, kterých vnořených objektů se nastavená práva budou týkat (aktuálnı́ složky, podsložek, souborů). Dědičnost práv se určuje jako kombinace voleb P • (OI) – pro tuto složku a soubory v nı́ • (CI) – pro tuto složku a jejı́ podsložky • (IO) – neplatı́ pro tuto složku (tato volba „odebı́rá“ oblast platnosti) Možné kombinace voleb pro ACL jsou v tabulce 3.1. V grafickém rozhranı́ je nastavujeme ve vlastnostech souboru na kartě Zabezpečenı́. Po klepnutı́ na tlačı́tko Upřesnit můžeme nastavovat speciálnı́ oprávněnı́ specifická pro určitý typ objektu. Přı́kaz CACLS sloužı́ k nastavenı́ přı́stupových práv souborového systému NTFS (pracuje pouze na logickém disku formátovaném jako NTFS), je součástı́ Windows od verze 2000. cacls soubor výpis nadefinovaných přı́stupových práv souboru (ACL listy) totéž, ale postupně pro všechny adresáře a soubory v pracovnı́m adresáři (můžeme zadat také složitějšı́ výraz) cacls * k zadanému souboru přidělı́ uživateli s názvem patrik práva pro čtenı́ (jakákoliv původnı́ oprávněnı́ budou přepsána) cacls soubor /g patrik:r $ 3.3 ŘÍZENÍ PŘÍSTUPU A SPRÁVA UŽIVATELŮ Řetězec Význam prázdný řetězec jen pro tuto složku, nedědı́ se pro tuto složku a soubory v nı́ pro tuto složku a jejı́ podsložky platı́ pro tuto složku, soubory v nı́ i jejı́ podsložky (plné děděnı́) platı́ pro soubory ve složce a jejı́ podsložky, ale ne pro samotnou složku platı́ jen pro soubory ve složce, ne pro složku ani podsložky platı́ jen pro podsložky, ne pro složku ani soubory v nı́ (OI) (CI) (OI)(CI) (OI)(CI)(IO) (OI)(IO) (CI)(IO) 87 Tabulka 3.1: Děděnı́ přı́stupových oprávněnı́ v ACL ke všem souborům v pracovnı́ složce přidá uživateli patrik právo zápisu (ostatnı́ práva zůstanou zachována) cacls * /e /g patrik:w cacls *.doc /t /e /g patrik:w ke všem DOC souborům z pracovnı́ složky i z jejı́ch podsložek (parametr /t, rekurze) přidá uživateli patrik práva pro zápis (ostatnı́ práva zůstanou zachována) odebere uživateli patrik všechna přı́stupová práva k souboru abc.doc, která měl navı́c oproti právům skupiny apod. cacls abc.doc /r patrik cacls abc.doc /d patrik zakáže uživateli patrik přı́stup k danému souboru Ve výpisu přı́stupových práv (přı́kaz bez parametrů, napřı́klad v kořenovém adresáři systémového disku) vidı́me řetězce, které určujı́ způsob rekurzivnı́ho přenášenı́ práv na vnořené objekty (třeba podsložky). Přı́klad 3.5 Pohrajeme si s přı́stupovými oprávněnı́mi. Přesuneme se na disk, na kterém máme právo zápisu a vytvořı́me dva vnořené adresáře. Také vytvořı́me nového uživatele a budeme mu přidávat nebo odebı́rat přı́stupová oprávněnı́. md pokus vytvořı́me prvnı́ adresář cd pokus přesuneme se do něj md vnitrni cd.. vytvořı́me podadresář přesuneme se o úroveň výše (všechny předchozı́ přı́kazy včetně tohoto lze provést jediným přı́kazem md pokus\vnoreny) vytvořı́me nového testovacı́ho uživatele (jeho heslo je stejné jako jméno), po vytvořenı́ by měl mı́t přı́stupová oprávněnı́ spı́še nižšı́ (pravděpodobně skupina Users, záležı́ na verzi Windows) net user novy novy /add pro jistotu si ověřı́me vlastnosti nově vytvořeného uživatele, všimněte si, do kterých skupin patřı́ (tato informace je ve výpisu) net user novy zobrazı́me přı́stupová oprávněnı́ nového adresáře, měl by tam být záznam pro skupinu everyone s právy f (full, vše) cacls pokus cacls pokus /e /d novy novému uživateli zakážeme přı́stup k adresáři (pozor, nesmı́me zapomenout parametr /e, aby se nepřepsal celý ACL – seznam řı́zenı́ přı́stupu) 3.3 ŘÍZENÍ PŘÍSTUPU A SPRÁVA UŽIVATELŮ cacls pokus /e /g novy:r cacls pokus 88 ale přidělı́me mu právo čtenı́ ověřı́me ve výpisu, měl by tam být řádek pro nového uživatele s oprávněnı́m „n“ podı́váme se, jestli to nastavenı́ mělo nějaký vliv na oprávněnı́ u vnořeného adresáře – zjistı́me, že ne, protože jsme nepoužili parametr pro rekurzi cacls pokus /e /r novy ted’ pozor – mohlo by se stát, že práva ještě ubı́ráme, ale ve skutečnosti jsme ze seznamu oprávněnı́ ACL zadaného adresáře vymazali údaje o novém uživateli, tedy v našem přı́padě jsme vlastně odstranili záznam o zákazu přı́stupu cacls pokus\vnoreny cacls pokus ověřı́me si výsledek předchozı́ho přı́kazu tento přı́kaz je podobný jako ten, který jsme použili pro zákaz přı́stupu novému uživateli, ale dı́ky parametru /t je rekurzı́vnı́ cacls pokus /t /e /d novy cacls pokus /t /e /g novy:r cacls pokus rekurzı́vně mu povolı́me čtenı́ ověřı́me si, ted’ by měl mı́t stejná oprávněnı́ i v podadresáři aha, zapomněli jsme parametr /e, takže tı́mto přı́kazem jsme přepsali ACL, můžeme si to ověřit zadánı́m cacls pokus cd pokus ted’ by se mělo objevit hlášenı́ „Přı́stup byl odepřen“, protože pro nás nejsou definována žádná oprávněnı́ (je definováno pouze jedno, a to „Nepustit dovnitř uživatele novy“), do adresáře se nedostaneme cacls pokus /d novy napravı́me chybu, kterou jsme provedli v předchozı́m přı́kazu, jinak bychom tento adresář nemohli ani smazat5 cacls pokus /e /g everyone:f rd /s pokus uklidı́me v adresářı́ch – rekurzı́vně smažeme adresář i jeho podadresář net user novy /delete uklidı́me po sobě také v seznamu uživatelů Ve skutečnosti lze s přı́stupovými oprávněnı́mi pracovat i pomocı́ jiných přı́kazů, některé jsou součástı́ novějšı́ch verzı́ Windows, jiné musı́me sehnat na internetu. Jedná se předevšı́m o přı́kaz, který je velmi užitečný a také využı́vaný na serverech, ICACLS. Najdeme ho ve Windows Vista a Windows Server od verze 2003 SP2. Některé parametry jsou podobné jako u cacls (napřı́klad /t použı́váme pro rekurzi), ale obecně má odlišnou syntaxi. Napřı́klad $ icacls adresar /grant:r novy:r /t přidá uživateli novy právo ke čtenı́ (pozor – „r“ za /grant znamená přidánı́ práv bez přepsánı́ již definovaných, až druhé „r“ za uživatelem je právo čtenı́), poslednı́ parametr znamená rekurzı́vnı́ děděnı́. Uživatele (vlastně i skupiny) je možné zadat nejen názvem, ale také řetězcem SID. Tento přı́pad odlišujeme použitı́m hvězdičky před SID, napřı́klad icacls adresar /grant:r *S-1-5-27-697:r /t Podobně se použı́vá parametr /deny, kterým se práva odebı́rajı́. Kromě běžných oprávněnı́ lze pracovat také se speciálnı́mi oprávněnı́mi: icacls soubor /grant *S-1-1-0:(d,wdac) 5 Uvědomte si, že se sice do adresáře nedostaneme, ale můžeme k němu definovat přı́stupová oprávněnı́. 3.3 ŘÍZENÍ PŘÍSTUPU A SPRÁVA UŽIVATELŮ 89 Skupině Everyone (ve výchozı́m nastavenı́ má SID S-1-1-0) přiřazuje speciálnı́ práva pro mazánı́ (právo D, delete) a dále možnost zapisovat do seznamů určujı́cı́ch přı́stupová oprávněnı́ k zadanému objektu (souboru) – WDAC.6 Také můžeme podrobně určovat dědičnost: icacls adresář /grant:r uzivatel:(OI)(CI)r /T (určili jsme plnou dědičnost, můžeme použı́vat jakoukoliv kombinaci z tabulky 3.1. Řetězec (NP) znamená, že se nemá použı́t žádné děděnı́ (do not propagate inherit). Tento přı́kaz má ještě dalšı́ důležitou funkci – můžeme seznamy přı́stupových práv ukládat do souboru (textového) a nebo ze souboru načı́tat: icacls * /save souborACL.txt /t icacls * /restore souborACL.txt /t (prvnı́ přı́kaz uložı́ nastavená oprávněnı́ z pracovnı́ho adresáře a rekurzı́vně z celého jeho obsahu do zadaného souboru, druhý přı́kaz je opětovně načte). Dalšı́ přı́kaz, který lze použı́vat k práci s přı́stupovými oprávněnı́mi, je XCACLS (s dodatkem xcacls.vbs). Je součástı́ Windows Server od verze 2003.7 Má syntaxi velmi podobnou přı́kazu cacls, ale umožňuje pracovat také se speciálnı́mi oprávněnı́mi.8 Z nástrojů „třetı́ch stran“ může být zajı́mavý také program SetACL šı́řený pod licencemi GPL a LGPL.9 Je dostupný ve dvou formách – bud’ jako nástroj pro Přı́kazový řádek (bez grafického rozhranı́) a nebo jako komponenta ActiveX. Úkoly 1. Pokud na to budou stačit vaše přı́stupová oprávněnı́, vyzkoušejte si postupně všechny přı́kazy z přı́kladu 3.5. Dbejte na bezpečnost – pokus provádějte na adresáři, který nenı́ důležitý (nejlépe nově vytvořený), a to s jiným uživatelským jménem, než pod kterým pracujete (nejlépe nově vytvořeným, stejně jako v přı́kladu). Nezapomeňte po sobě uklidit. C 2. Vypište si nápovědu přı́kazu cacls. Projděte si všechny možné přepı́nače tohoto přı́kazu. 3. Sestavte přı́kaz (s použitı́m cacls), kterým uživateli honza přidáte právo pro zápis k adresáři d:\faktury, a to rekurzı́vně i pro podadresáře. Potom tentýž přı́kaz sestavte s použitı́m icacls. 4. Na adrese uvedené v jedné z poznámek pod čarou najděte seznam zkratek pro speciálnı́ přı́stupová oprávněnı́. 5. Pokuste se najı́t na internetu seznam programů, které jsou součástı́ Windows Server 2003 Resource Kit (pozor, nemá jı́t o knihu, ale o souhrn nástrojů, které si lze stáhnout). Všimněte si, že zatı́mco v Resource Kitu pro Windows 2000 je přı́kaz icacls, v Resource Kitu pro verzi 2003 už nenı́. Proč? 6 Seznam všech zkratek pro speciálnı́ oprávněnı́ včetně WDAC najdeme na http://technet.microsoft.com/en-us/library/cc753525%28WS.10%29.aspx. 7 Nástroj xcacls lze také stáhnout napřı́klad ze stránek http://support.microsoft.com/kb/927229. 8 Přı́klady na přı́kaz xcacls včetně jejich výstupů najdeme napřı́klad na stránce http://technet.microsoft.com/en-us/library/cc728458%28WS.10%29.aspx. 9 Najdeme ho na http://setacl.sourceforge.net/. R 3.4 JMENNÉ A ADRESÁŘOVÉ SLUŽBY 3.3.3 90 Navyšovánı́ přı́stupových oprávněnı́ Přı́kaz RUNAS sloužı́ ke spuštěnı́ procesu s právy jiného uživatele, většinou administrátora (to znamená, že přı́kaz umožňuje navýšenı́ přı́stupových oprávněnı́). Základnı́ syntaxe přı́kazu je runas [/profile | /noprofile] /user:uživatel program $ Napřı́klad: runas /user:administrator ”net user novy heslo /add” nebo runas /user:pocitac\administrator ”net user novy heslo /add” runas /user:administrator@pocitac ”net user novy heslo /add” nebo Všimněte si, že přı́kaz obsahujı́cı́ mezery musı́ být uzavřen do uvozovek. Totéž platı́ o uživateli, pokud jeho název obsahuje mezery (bohužel to je možné, a někteřı́ OEM prodejci toho zneužı́vajı́). Tento přı́kaz spustı́ zadaný program s právy zadaného uživatele (zeptá se na heslo – pozor, uživatel musı́ mı́t definováno heslo, nesmı́ být prázdné!). Je určen předevšı́m pro administrátory, kteřı́ (zcela podle doporučenı́ odbornı́ků) obvykle pracujı́ s nižšı́mi přı́stupovými oprávněnı́mi, ale někdy potřebujı́ ke své práci většı́ oprávněnı́. E Přepı́nač /profile nebo /noprofile použijeme, pokud chceme či nechceme načı́st profil přihlašovaného uživatele (nenačtenı́ profilu sice zrychlı́ start programu, ale některé aplikace nemusı́ správně fungovat). Program může být jakýkoliv spustitelný soubor nebo nástroj včetně nástrojů Windows (také textový skript nebo jiný přı́kaz). Ekvivalentem v grafickém rozhranı́ je zobrazenı́ položky Spustit jako (v anglické verzi Run as) v kontextovém menu objektu (spustitelného souboru, to může být i skript). Pokud tato položka v kontextovém menu nenı́ (což je obvyklé v některých verzı́ch Windows), zobrazı́me ji takto: • stiskneme a dále držı́me klávesu Shift , • zároveň obvyklým způsobem vyvoláme kontextové menu spustitelného souboru. Od verze Vista je v kontextovém menu pouze položka Spustit jako správce (mı́něno administrátor). Pokud nám chybı́ původnı́ možnost spouštět programy s přı́stupovými oprávněnı́mi různých uživatelů, nejen administrátora, můžeme si nainstalovat program ShellRunAs, který najdeme na stránkách http://sysinternals.com. $ L Takže v grafickém režimu použı́váme položku Spustit jako, v textovém režimu (i pro programy s oknem) přı́kaz runas. Úkoly 1. Pomocı́ přı́kazu runas můžete spustit jakýkoliv program jako jakýkoliv uživatel (dokonce i ten samý uživatel, který je právě přihlášen – vy). Pokud nemáte administrátorské heslo, můžete tento přı́kaz vyzkoušet se zadánı́m svého vlastnı́ho přihlašovacı́ho jména. Spust’te tı́mto způsobem kalkulačku (je to program calc.exe) nebo Poznámkový blok (notepad.exe). 2. Vyberte si některý z programů v nabı́dce Start a vyzkoušejte, zda se při klepnutı́ pravým tlačı́tkem na položku programu objevı́ v kontextovém menu položka Spustit jako. Pokud ne, vyzkoušejte zobrazenı́ kontextového menu zároveň se stisknutou klávesou Shift . C 3.4 3.4 JMENNÉ A ADRESÁŘOVÉ SLUŽBY 91 Jmenné a adresářové služby Jmenné služby jsou obecným principem překladu jmenných názvů (textových řetězců) na čı́selné adresy, se kterými snadněji pracujı́ počı́tače. Typickým představitelem je DNS, jehož hlavnı́m účelem je překlad slovnı́ch adres, kterým rozumı́me (třeba www.google.com) na čı́selné IP adresy. Ke jmenným službám můžeme řadit také WINS (Windows Internet Name Service, sloužı́ k překladu názvů NetBIOS na IP adresy). Ovšem WINS se již moc nepoužı́vá (zejména z důvodu značných omezenı́, napřı́klad délka názvu je nejvýše 15 znaků). Oproti tomu adresářové služby sloužı́ k uspořádánı́, zabezpečenı́ a správě prostředků (často reprezentovaných objekty ve struktuře). Typickým představitelem je napřı́klad Active Directory. 3.4.1 P P Úvod do DNS DNS (Domain Name System) je, jak bylo výše uvedeno, jmenná služba, a to distribuovaná. Sı́t’ je organizována v hierarchickém systému domén, kde každá doména má své jméno, a adresace pomocı́ jména se vytvářı́ podle hierarchie. Můžeme si to představit jako řadu stromů, kde každý strom má jeden kořen nazývaný doména prvnı́ úrovně (TLD, Top Level Domain, napřı́klad .cz nebo .org) a dále se větvı́ v dalšı́ch úrovnı́ch (domény druhé, třetı́ a přı́p. dalšı́ úrovně). Napřı́klad adresa mail.seznam.cz obsahuje celkem tři úrovně, z nichž prvnı́ úroveň je zcela vpravo. Ve skutečnosti i tyto „stromy“ majı́ společný kořen (tzv. kořenovou doménu), která se označuje pouze samotnou tečkou (bez dalšı́ch znaků). P Překlad názvů probı́há pomocı́ DNS serverů (jmenných – name – serverů). Překládá se ze jmenné adresy na čı́selnou IP adresu (napřı́klad 127.89.125.8 podle protokolu IPv4), a nebo naopak. Protože nenı́ technicky realizovatelné mı́t jeden jediný DNS server se všemi potřebnými záznamy, a ani mı́t vı́ce takových DNS serverů, probı́há dotazovánı́ u DNS serverů distribuovaně. To znamená, že záznamy o vztahu jmenných a IP adres jsou rozprostřeny mezi mnoho DNS serverů. Každý DNS server má záznamy o své zóně (oblasti, kterou spravuje). Každá doména prvnı́ úrovně má určité množstvı́ tzv. kořenových serverů. Dotazovánı́ (máme jmennou adresu a chceme IP adresu) probı́há distribuovaně – DNS server často nedokáže na dotaz odpovědět okamžitě podle svých záznamů, proto se obracı́ na některý z kořenových serverů zadané domény prvnı́ úrovně. Napřı́klad pokud potřebujeme zjistit IP adresu počı́tače www.firma.cz, DNS server se obrátı́ na některý z kořenových serverů domény .cz. Dotazovaný kořenový server bud’ adresu dohledá ve svých záznamech a nebo se obrátı́ na některý se svých podřı́zených serverů. Takto distribuovaně probı́há vyhodnocovánı́ dotazu (postupně podle vnořovánı́ domén různých úrovnı́) a zpět je odeslána zjištěná IP adresa. Systémy Windows Server bývajı́ vybaveny DNS serverem, a nebo můžeme zvolit jiné řešenı́ (BIND, MyDNS, PowerDNS, atd.). DNS servery komunikujı́ pomocı́ protokolu TCP/IP, tedy tento protokol musı́ být správně nakonfigurován na všech počı́tačı́ch, které jsou v sı́ti adresovány. DNS server od Microsoftu dále vyžaduje, aby počı́tače v sı́ti měly systémový disk naformátován souborovým systémem NTFS (alespoň verze 5.0). 3.4 JMENNÉ A ADRESÁŘOVÉ SLUŽBY 92 Instalace DNS serveru od Microsoftu se provádı́ klasicky přes Přidat nebo odebrat programy, na serverovém systému ve Správci serveru (Server Manager), kde instalujeme roli „DNS server“. Na serveru konfigurujeme DNS pomocı́ konzole DNS Management (Správa DNS, dnsmgmt.msc), což je klasická konzola se stromovou strukturou položek v levém podokně. V tomto nástroji provádı́me běžnou konfiguraci DNS. Dále existuje nástroj určený pro řešenı́ problémů s DNS, přı́kaz dnscmd.exe. Jde o textovou interaktivnı́ konzolu podobně jako třeba NetShell. Firma (nebo osoba) vlastnı́cı́ doménu určité úrovně může (napřı́klad ve své organizaci) vytvářet podstrom domén nižšı́ch úrovnı́. Na tyto DNS domény lze pak napojit domény služby Active Directory. V prvnı́ kapitole jsme se s konfiguracı́ DNS již trochu setkali v nástroji NetShell. Nástroj NSLookUp (spouštěný přı́kazem nslookup) sloužı́ ke komunikaci s DNS serverem a je ve skutečnosti textová konzola podobně jako NetShell. Také se může použı́vat jak v interaktivnı́m, tak i v neinteraktivnı́m režimu. $ Napřı́klad bez nutnosti přechodu do režimu textové konzoly můžeme zjistit IP adresu počı́tače v doméně, pokud známe jeho název v této doméně: nslookup název_počı́tače DNS_server (DNS server můžeme zadat jeho názvem nebo IP adresou, také ho nemusı́me vůbec zadat, pokud jeho název neznáme). Přı́klad 3.6 Chceme zjistit IP adresy domény www.google.com a pak naopak zjistit doménové jméno pro IP adresu 74.125.87.105. Nejdřı́v bez přechodu do interaktivnı́ho režimu – zadáme přı́kazy: nslookup www.google.com (vypı́še požadované informace) nslookup 74.125.87.105 (opět vypı́še požadované informace) Ted’ provedeme totéž, ale v interaktivnı́m režimu: nslookup (přejdeme do interaktivnı́ho režimu, změnı́ se prompt) www.google.com (vypı́še požadované informace) 74.125.87.105 (opět vypı́še požadované informace) exit (ukončı́me interaktivnı́ režim, zobrazı́ se prompt Přı́kazového řádku) Úkoly 1. Zjistěte IP adresu serveru www.seznam.cz. C 2. Zjistěte doménové jméno pro IP adresu 90.183.38.60. 3.4.2 Active Directory Active Directory je implementace protokolu LDAP (Lightweight Directory Access Protocol) pro Windows od verze 2000. Je závislá na DNS (můžeme ji chápat jako nástavbu nad doménami DNS), P 3.4 JMENNÉ A ADRESÁŘOVÉ SLUŽBY 93 napřı́klad přejı́má názvy domén DNS a využı́vá DNS při vyhledávánı́ v doménách. Musı́ existovat alespoň jeden server DNS, na klientských počı́tačı́ch musı́ být nakonfigurován klient DNS třeba přes DHCP. Domény Active Directory však nejsou totožné s doménami DNS, i když majı́ stejný název, jsou jinak reprezentovány, ukládajı́ se jiné typy informacı́. Použı́váme tyto pojmy: • adresářová databáze (adresář) je databáze objektů, které jsou v systému spravovány, je hierarchicky uspořádaná (takže adresář je vlastně o objektech a vztazı́ch mezi nimi, to vše je uloženo v souborech), • objekty mohou být napřı́klad uživatelé, skupiny, počı́tače, domény, apod., každý objekt má své vlastnosti (napřı́klad přı́stupová práva), tyto vlastnosti se v hierarchické struktuře mohou dědit, • kontejner je objekt, který může obsahovat dalšı́ objekty (obdoba složek na disku), • AD schéma popisuje objekty, které mohou být uloženy v adresáři Active Directory (jaké mohou mı́t atributy, co v nich může být uloženo), • doména je skupina počı́tačů sdı́lejı́cı́ch společnou adresářovou databázi, • organizačnı́ jednotka (OU) je podskupina domény (ale ne jakékoliv) oddělená za určitým účelem (napřı́klad firma může mı́t jedinou doménu a tu rozčlenı́ na organizačnı́ jednotky podle svých oddělenı́). OU mohou být i vnořené. V sı́ti je Active Directory provozován na doménových řadičı́ch (domain controller, vpodstatě jde o doménové servery), musı́ existovat alespoň jeden (primárnı́ řadič domény) a přı́padně dalšı́ (doporučuje se mı́t alespoň dva). V každé sı́ti je nejméně jeden Globálnı́ katalog (prvnı́ globálnı́ katalog se vytvořı́ na primárnı́m řadiči domény). V Globálnı́m katalogu jsou předevšı́m souhrny informacı́ obsažených v dalšı́ch doménových serverech sı́tě (ne všechny parametry, jen nejdůležitějšı́), hovořı́me také o replikaci (dynamickém vytvářenı́ kopiı́). Globálnı́ katalogy sloužı́ při vyhledávánı́ informacı́ v sı́ti a také k autentizaci (uživatel se vlastně z technického hlediska přihlašuje ke globálnı́mu katalogu) a autorizaci. Takže přes doménové řadiče s globálnı́mi katalogy přistupujeme k objektům a také se na nich provádı́ autentizace (kontrola při přihlašovánı́) a autorizace (při přı́stupu k objektům). dc=firma,dc=cz ou=pocitace ou=zamestnanci cn=novak V Active Directory (také ve jmenných službách včetně DNS) se použı́vá několik druhů názvů podle typu zanořenı́ v doménách. Jsou to předevšı́m Domain Component (DC, uzel domény), Obrázek 3.9: Názvy v doménách Organization Unit (OU, organizačnı́ jednotka, to je Active Directory Container, obdoba složky) a Common Name (CN, objekt). Adresace (popis cesty k objektu) podle struktury na obrázku 3.9 je cn=novak,ou=zamestnanci,dc=firma,dc=cz Tento způsob adresace objektu se označuje DN (Distinguished Name). Dalšı́ způsob adresace, UNC, známe z DNS názvů: firma.cz/zamestnanci/novak 3.5 ZÁSADY A ŠABLONY 94 V serverových verzı́ch Windows máme k dispozici nástroje pro práci s Active Directory několik nástrojů. Nebudeme je zde probı́rat, je to spı́še záležitost počı́tačových sı́tı́. Tyto nástroje majı́ obvykle ve svém názvu podřetězec „Active Directory“ či zkratku „AD“, napřı́klad pro správu uživatelů, skupin, počı́tačů a organizačnı́ch jednotek použı́váme nástroj Uživatelé a počı́tače služby AD (Active Directory Users and Computers). Dalšı́ nástroje jsou dostupné na instalačnı́m CD Windows Server a také na internetu. Zajı́mavý a užitečný nástroj je napřı́klad Active Directory Explorer od Sysinternals. Na desktopu obvykle služba Active Directory nenı́ nainstalována, pracujeme zde pouze se zásadami (politikami), a to v nástrojı́ch Mı́stnı́ zásady zabezpečenı́ a Zásady skupiny (Group Policies Editor gpedit.msc). Pod pojmem zásada (politika, policy) obvykle rozumı́me konkrétnı́ nastavenı́ (obvyke týkajı́cı́ se zabezpečenı́) pro danou komponentu či vlastnost. Dnes jsou běžné heterogennı́ sı́tě (tj. na počı́tačı́ch v sı́ti jsou různé typy operačnı́ch systémů. Může se zdát, že použı́vánı́ mechanismu Active Directory v heterogennı́ sı́ti je problém, ale řešenı́ existuje, spočı́vá v použitı́ jakýchsi „překladatelů“ – protokolů, které zprostředkujı́ komunikaci mezi počı́tači s různými operačnı́mi systémy. V přı́padě použitı́ Active Directory jde předevšı́m o protokol LDAP implementovaný také na jiných operačnı́ch systémech včetně Linuxu, dále pro přı́stup k datům se použı́vá protokol SMB. Informace o základnı́ch principech a postupech v Active Directory najdeme na • • • • http://www.samuraj-cz.com/clanek/active-directory-komponenty-domain-tree-forest-site/ http://www.mcmcse.com/microsoft/guides/ad.shtml http://www.petri.co.il/ad.htm http://www.learnthat.com/Software/learn/1295/Introduction-to-Active-Directory/ Úkoly V Active Directory (firma Obláček, s.r.o.) jsou dány DN názvy C • agenda.oblacek.cz/uctarna/mzdove • agenda.oblacek.cz/uctarna/vedouci • agenda.oblacek.cz/administrativa/sekretarka Vytvořte k nim graf podobně jako na obrázku 3.9 a převed’te je na UNC adresy. 3.5 Zásady a šablony 3.5.1 Systémové zásady Systémové zásady sloužı́ ke konfiguraci objektů (uživatelů, počı́tačů apod.) v sı́ti řı́zené serverem Windows NT 4.x. V současné době se s nimi proto již moc nesetkáváme. Obsahujı́ nastavenı́ ukládaná do registru, která platı́ pro daného uživatele, skupinu nebo počı́tač. 3.5 ZÁSADY A ŠABLONY 95 K jejich editaci sloužı́ program Editor systémových zásad (poledit.exe), soubory majı́ přı́ponu POL. Tento nástroj je dostupný také v systémech, které byly původně zamýšleny jako klienty sı́tě se serverem Windows NT 4.x, tedy ve Windows 9x (najdeme ho na instalačnı́m CD). Se Systémovými zásadami neumı́ pracovat klienty s instalovanými Windows XP, tam je nutné použı́t Zásady skupiny nebo vhodným způsobem doplnit programové vybavenı́. Systémové zásady nejsou postaveny na službě Active Directory, použı́vá se jen DNS. 3.5.2 Zásady skupiny Obrázek 3.10: Nástroj Editor systémových zásad ve Windows 98 Zásady skupiny ve Windows od v. 2000 (včetně serverů) sloužı́ k podrobnějšı́ konfiguraci pracovnı́ho prostředı́ uživatele, pro své fungovánı́ v sı́ti potřebuje službu Active Directory. V některých přı́padech mohou být zároveň použı́vány Systémové zásady i Zásady skupiny, a to napřı́klad tehdy, když v sı́ti s klienty Windows 2000/XP přecházı́me na serveru z Windows NT 4.x na Windows 2000. P Oproti Systémovým zásadám jsou zde také zásady pro skripty, instalaci a údržbu softwaru, nastavenı́ zabezpečenı́ apod. Určujeme napřı́klad, které nástroje se objevı́ v Ovládacı́ch panelech, které programy budou uživateli přı́stupné, co se objevı́ na pracovnı́ ploše, skripty, které se spustı́ při přihlášenı́ nebo odhlášenı́ uživatele při zapnutı́ a vypnutı́ počı́tače, apod. Lze tady také spravovat aplikace (jejich instalaci a aktualizaci tak, aby se o tyto úkoly musel uživatel starat co nejméně). Se Zásadami skupiny lze pracovat lokálně pomocı́ konzoly Zásady skupiny (spustı́me v menu Start ï Spustit, zadáme gpedit.msc , obrázek 3.11), ale i v sı́ti. Obvyklé použitı́ je v kombinaci se službou Active Directory, kdy k jednotlivým objektům této služby (sı́tı́m, doménám, uživatelům, apod.) přidružujeme objekty Zásad skupiny. Pro určenı́, kterého počı́tače se majı́ nastavenı́ Zásad skupiny týkat, použijeme menu tohoto nástroje, a pokud chceme zásady přiřadit určitému objektu Active Directory, použijeme nástroje poskytované touto službou na serveru. Nástroj je rozdělen do dvou částı́ – Konfigurace počı́tače a Konfigurace uživatele. Nastavenı́ provedená v prvnı́ části platı́ obecně pro počı́tač a všechny uživatele, v druhé již konkrétně pro určitého uživatele. Obrazem těchto dvou částı́ jsou některé podklı́če klı́čů HKLM a HKCU v registru. Pokud jsou stejné typy položek v obou, pak přednost majı́ nastavenı́ v druhé části. Pokud jsou stejné položky v Mı́stnı́ch zásadách, majı́ přednost nastavenı́ v Zásadách skupiny. K práci se Zásadami skupiny sloužı́ také programy gpupdate.exe (změny provedené v gpedit.msc se někdy neprojevı́ okamžitě, pokud chceme, aby se změny provedly, spustı́me gpupdate.exe) a gpresult.exe (tento program prověřı́, zda nastavenı́ provedená v Zásadách skupiny platı́). Ve $ 3.5 ZÁSADY A ŠABLONY 96 Obrázek 3.11: Nástroj Editor zásad skupiny gpedit.msc Windows 2000 se mı́sto programu gpupdate.exe použı́val program secedit.exe s přepı́načem /refreshpolicy. Úkoly Pokud máte možnost, projděte si konzoly Zásady skupiny a Mı́stnı́ nastavenı́ zabezpečenı́. 3.5.3 C Šablony pro správu Šablony pro správu jsou soubory s přı́ponou ADM s přı́mou vazbou na registr, které obsahujı́ konfiguraci různých částı́ systému a prostředı́. Nedoporučuje se přı́mo zasahovat do těchto souborů, ani to nenı́ nutné. Ve Windows NT 4.x se s nimi pracovalo prostřednictvı́m programu poledit.exe (Systémové zásady), ve Windows 2000 (včetně serverových variant) a XP jsou to rozšı́řenı́ Zásad pro správu (některé šablony jsou v nich standardně zahrnuty, jiné lze přidat v kontextovém menu položky „Šablony pro správu“) – viz obrázek 3.11. Soubory se šablonami jsou většinou ve složce ...\System32\GroupPolicy\Adm. K nejdůležitějšı́m šablonám patřı́ napřı́klad system.adm, který obsahuje nastavenı́ operačnı́ho systému, windows.adm s konfiguracı́ pro klientské počı́tače se systémem Windows 9x nebo conf.adm s nastavenı́mi pro NetMeeting. P 3.5 ZÁSADY A ŠABLONY 97 To, co je uloženo v souborech ADM, je také uloženo v registru. Význam šablon spočı́vá předevšı́m v zabezpečenı́ údajů registru proti neoprávněným změnám (změny na některých klı́čı́ch nenı́ dovoleno provádět, když je to nastaveno v ADM souboru), a dále v přı́padě změn provedených v Zásadách skupiny (ty se projevı́ v ADM) se větve registru odpovı́dajı́cı́ změněným údajům vyčistı́ a naplnı́ novými údaji. Nástroj Obrázek 3.12: Seznam právě zobrazovaných ADM Zásady skupiny použı́vá soubory ADM předevšı́m souborů v uživatelské části k tomu, aby určil, co má zobrazit a které zásady může editovat uživatel, pod kterým byl nástroj spuštěn. Úkoly 1. Projděte si nastavenı́ šablon pro správu v grafickém rozhranı́ (v Zásadách pro správu). $ C 2. Najděte ADM soubory na systémovém disku. Zjistěte, které jsou namapovány do Zásad pro správu. 3.5.4 Šablony zabezpečenı́ Šablony zabezpečenı́ jsou některé soubory s přı́ponou INF obsahujı́cı́ konfiguraci zabezpečenı́ (napřı́klad zásady definovánı́ hesel, zabezpečenı́ registru, systému souborů, služeb), jsou v adresáři %WINNT%\SECURITY\TEMPLATES (...\Windows\Zabezpečenı́\Šablony). Pracujeme s nimi bud’ lokálně na jednom počı́tači (spustı́me MMC a přidáme modul snap-in Šablony zabezpečenı́ – viz obrázek 3.13) nebo v sı́ti. Můžeme je importovat do objektu Zásad skupiny přidruženého k objektu služby Active Directory (po importu se přenastavı́ přı́stupová práva objektu služby Active Directory). P $ S některými šablonami zabezpečenı́ můžeme pracovat na lokálnı́m počı́tači v grafickém rozhranı́ (napřı́klad zásady definovánı́ hesel jsou v Mı́stnı́ch zásadách zabezpečenı́ (v Nástrojı́ch pro správu). Lepšı́ nástroj (zvláště z hlediska automatizace a plného přı́stupu k možnostem) je Konfigurace a analýza zabezpečenı́ – secedit.exe. Po spuštěnı́ bez parametrů se spustı́ aplikace nápovědy (v grafickém rozhranı́), samotný přı́kaz se vždy použı́vá s parametry, napřı́klad provede analýzu zabezpečenı́ systému, je také nutné zadat název souboru, do kterého se uložı́ výsledek analýzy, secedit /analyze (s dalšı́mi parametry) provede konfiguraci pro určitý objekt, tedy načte soubor INF šablony zabezpečenı́, secedit /configure (s dalšı́mi přı́padnými parametry) exportuje nastavenı́ zabezpečenı́ z objektu do souboru šablony zabezpečenı́ (toho, jehož název jsme zadali, měl by to být nejlépe dosud neexistujı́cı́ soubor). secedit /export /cfg d:\vysledek.inf $ 3.5 ZÁSADY A ŠABLONY 98 Obrázek 3.13: Šablony zabezpečenı́ jako samostatná konzola (vytvořeno) Úkoly 1. Projděte si konzolu Šablony zabezpečenı́ a zjistěte, co vše je v nı́ nastaveno. 2. Exportujte celou databázi zabezpečenı́ do souboru seced.inf, umı́stěte soubor na disku, ke kterému máte přı́stup k zápisu. Tento soubor si prohlédněte. Všimněte si množstvı́ SID. Proč je před nimi vždy hvězdička? Vzpomeňte si na přı́kazy, ve kterých se SID zadává jako parametr. 3. Zjistěte, co vše umı́ přı́kaz secedit. Prohlédněte si syntaxi tohoto přı́kazu. 4. Projděte si složku ...\Windows\security včetně jejı́ch podsložek. V podsložce Logs otevřete soubor winlogon.log a najděte záznamy z současného data (na konci souboru). Všimněte si pořadı́ záznamů pro daný den (jde o posloupnost zaváděnı́ a konfigurace zásad při startu procesu winlogon). Projděte i dalšı́ logy v této složce. C Kapitola 4 Služby a procesy 4.1 4.1.1 Správa služeb Jak služby fungujı́ Služba je proces, který sloužı́ k podpoře funkcı́ jiných procesů a obvykle pracuje na pozadı́ systému (tj. nejde o interaktivnı́ procesy, uživatel do jejich činnosti většinou nezasahuje). Od běžných procesů se lišı́ v několika aspektech: P • běžı́ na pozadı́ systému, • přı́stupová oprávněnı́ služeb bývajı́ odlišná od přı́stupových oprávněnı́ běžných procesů, • běh služeb je většinou nezávislý na přihlašovánı́ a odhlašovánı́ uživatelů (služby mohou běžet i tehdy, když žádný uživatel nenı́ přihlášen), • existujı́ nástroje určené speciálně pro mı́stnı́ a vzdálenou správu služeb, také v registu najdeme služby na specifických mı́stech. Ke službám se ve skutečnosti řadı́ také ovladače, tedy ovladač je vlastně speciálnı́ druh služby sloužı́cı́ jako rozhranı́ k zařı́zenı́ (včetně virtuálnı́ch zařı́zenı́). K ovladačům můžeme přistupovat stejným způsobem jako ke službám. Služby použı́vajı́ tyto účty pro stanovenı́ svých přı́stupových oprávněnı́: • Local System – účet pro systémové procesy, služba má plný přı́stup k čemukoliv, v seznamech se také může zobrazovat jako System, • Local Service – pro služby, které nepotřebujı́ zvýšená přı́stupová oprávněnı́, k mı́stnı́m prostředkům majı́ stejný typ přı́stupu jako běžný uživatel, k sı́ti použı́vajı́ jen omezený anonymnı́ přı́stup, • Network Service – pro služby, které potřebujı́ autorizovaně pracovat na sı́ti (podobně jako předchozı́ účet), ale k mı́stnı́m prostředkům počı́tače majı́ stejný typ přı́stupu (omezený) jako běžný uživatel, • Doménový nebo lokálnı́ účet – podobně jako u kteréhokoliv jiného procesu, lze nastavovat oprávněnı́. 99 P 4.1 SPRÁVA SLUŽEB 100 Služby (a všechny dalšı́ procesy) pracujı́cı́ pod účtem Local System majı́ velmi rozsáhlá oprávněnı́, s určitým omezenı́m: použı́vajı́ uživatelský profil uložený ve větvi registru HKU/.Default ( nı́ v následujı́cı́ kapitole na straně 6.1.4), a nemohou přistupovat do uživatelských profilů jiných uživatelů v dalšı́ch podklı́čı́ch klı́če HKU. Na obrázku 4.1 je znázorněna architektura služeb. Veškerá komunikace se službami (včetně jejich konfigurace) probı́há přes modul SCM (Service Control Manager – správce služeb), který je fyzicky představován souborem services.exe. Programy Služba 1 services.msc msconfig.exe sc.exe .. . SCM (Service Control Manager) Služba 2 .. . Obrázek 4.1: Architektura služeb SCM tedy spravuje databázi služeb a ovladačů a zprostředkovává k nim přı́stup. Databáze je zpřı́stupněna také přes registr, najdeme ji v klı́či HKLM/System/CurrentControlSet/Services. V tomto klı́či jsou podklı́če nazvané podle krátkých jmen služeb a ovladačů (každá služba má dlouhé a krátké jméno). V podklı́čı́ch pak jsou všechny údaje souvisejı́cı́ s danou službou či ovladačem. Najdeme zde obvykle tyto položky: • DisplayName – dlouhé jméno (krátké jméno známe z názvu klı́če, dlouhé může být v jiném jazyce než v angličtině), • Description – popis služby či ovladače, • ImagePath – cesta k souboru (spustitelný soubor, soubor ovladače, dynamická knihovna apod.), • Tag – pořadové čı́slo, které určuje pořadı́ spouštěnı́ služeb (je jen u těch služeb, které závisejı́ na jiných službách a je tedy důležité, v jakém pořadı́ jsou spouštěny), • ObjectName – název účtu, pod kterým se má služba spustit (u ovladačů tuto položku nenajdeme, protože jsou vždy spouštěny s vysokými přı́stupovými oprávněnı́mi, pracujı́ v režimu jádra), pokud u služby nenı́ tento klı́č uveden, jde o účet LocalSystem, • Type – typ služby nebo ovladače (je to čı́selná hodnota), napřı́klad – 1 (Service Kernel Driver) je ovladač zařı́zenı́ pracujı́cı́ v režimu jádra, – 2 (Service File System Driver) je ovladač souborového systému (napřı́klad NTFS), – 16 (Service Win32 Own Process) je služba, která má vlastnı́ proces (žádná jiná služba v tomto procesu neběžı́), může být spuštěna z vlastnı́ho spustitelného souboru nebo může jı́t o modul spouštěný procesem svchost.exe, – 32 (Service Win32 Share Process) je služba, která je součástı́ procesu hostujı́cı́ho vı́ce služeb, P 4.1 SPRÁVA SLUŽEB 101 – 272 (Service Win32 Own Process Interactive) podobně jako 16, ale může pracovat interaktivně (lze k němu za určitých okolnostı́ přistupovat přı́mo, napřı́klad v konfiguračnı́m okně), – 288 (Service Win32 Share Process Interactive) podobně jako 32, ale může pracovat interaktivně, o řešenı́ uživatelského rozhranı́ pro interaktivnı́ služby jsme se učili v sekci o objektech na straně 77, všechny interaktivnı́ služby musı́ být spuštěny pod účtem Local System, • Start – kdy má být služba načtena, napřı́klad – – – – – 0: služba či ovladač se načı́tá při zaváděnı́ systému (se zavaděčem systému), 1: při inicializaci jádra (tj. po všech službách s hodnotou 0), 2: spouštı́ se automaticky hned po startu systému, 3: lze ji spustit, ale jen ručně (služba nenı́ spuštěna automaticky), 4: služba je zakázána (nelze ji spustit ani ručně), • Group – služba může patřit do některé skupiny služeb, • DependOnService, DependOnGroup – služba může být závislá na službě nebo skupině služeb, • atd. Většina služeb a ovladačů má ve svém klı́či podklı́če s dalšı́mi, specifickými informacemi vztahujı́cı́mi se k zabezpečenı́ nebo konfiguraci. Podrobnosti o dalšı́ch možných položkách zjistı́me napřı́klad na adrese http://technet.microsoft.com/en-us/library/cc778056%28WS.10%29.aspx. Úkoly Spust’te konzolu Služby. Vyberte si kteroukoliv službu (napřı́klad Klient DHCP) a zobrazte jejı́ vlastnosti. Zjistěte, jestli běžı́, zda se spouštı́ automaticky, pod jakým účtem se přihlašuje, na kterých službách závisı́ a které služby závisejı́ na nı́ pak tyto údaje najděte v registru. 4.1.2 C Sdı́lené procesy služeb, Service Host Jak bylo výše uvedeno, několik služeb může běžet v jediném procesu. Je to předevšı́m z důvodu šetřenı́ systémovými prostředky (každý proces zabere poměrně hodně paměti a času procesoru, služba jako taková však moc prostředků nepotřebuje, zvláště když nenı́ interaktivnı́). Seznam služeb, které hostı́ zadaný proces, zjistı́me napřı́klad v Process Exploreru, a to hned dvěma možnými způsoby – bud’ podržı́me myš nad názvem procesu (žluté okno na obrázku 4.2) a nebo zobrazı́me vlastnosti procesu (poklepánı́m), služby najdeme na kartě Services (podokno na tomtéž obrázku). Procesy služeb s vlastnı́m procesem (obvykle typu 16 podle výše uvedeného výčtu) jsou obvykle potomky (ve stromové struktuře) procesu services.exe, napřı́klad proces spoolsv.exe pro službu Zařazovánı́ tisku. Stejně je tomu i u procesů, které hostı́ vı́ce služeb. $ 4.1 SPRÁVA SLUŽEB 102 Obrázek 4.2: Zobrazenı́ služeb v procesu Služby mohou běžet v některém systémovém procesu, napřı́klad některé služby najdeme v procesu SCM (services.exe) nebo LSASS (lsass.exe). Nejběžnějšı́m „kontejnerem“ pro služby je však proces Service Host (svchost.exe). Služby takto spouštěné jsou uloženy v DLL knihovnách. V Process Exploreru (také na obrázku 4.2) vidı́me, že je spuštěno vı́ce instancı́ procesu Service Host. Lišı́ se předevšı́m ve dvou vlastnostech: • účet, pod kterým proces běžı́ (sloupec User Name), obvykle System (Local System), Network Service nebo Local Service, • Command Line (přı́kaz včetně parametrů, kterým byl proces spuštěn), žádné dvě instance by neměly mı́t tuto položku stejnou. Přı́klad 4.1 To, ve které instanci programu Service Host bude služba spuštěna, záležı́ na řetězci uvedeném v registru v klı́či HKLM/SYSTEM/CurrentControlSet/Services/hslužbai v položce ImagePath (tedy cesta ke spustitelnému souboru pro službu). Napřı́klad služby AppMgmt (Správa aplikacı́), CryptSvc (Šifrovánı́), Dhcp (Klient DHCP) a dalšı́ majı́ tento řetězec %SystemRoot%\system32\svchost.exe -k netsvcs to znamená, že všechny budou běžet ve stejném procesu s touto přı́kazovou řádkou (můžeme si ověřit v Process Explorerovi nebo Správci úloh, když necháme zobrazit sloupec Command Line). 4.1 SPRÁVA SLUŽEB 103 Úkoly 1. V registru najděte klı́č obsahujı́cı́ podklı́če služeb (a ovladačů). Najděte následujı́cı́ podklı́če: appmgmt cdfs cdrom cisvc EventSystem ipsec MountMgr netlogon null PlugPlay RemoteAccess SamSs C spooler tcpip wmi wuauserv Tyto služby roztřid’te podle jejich typu. U každé zjistěte, jaké je jejı́ dlouhé jméno, kdy a jak se spouštı́, ve kterém souboru je uložena, pod jakým účtem se spouštı́ (tj. jaká má přı́stupová oprávněnı́). 2. Ze seznamu v předchozı́m bodu si vyberte některou interaktivnı́ službu, která je spuštěna. Spust’te Process Explorer a zobrazte ve spodnı́m podokně manipulátory (handle). Najděte v něm proces vybrané služby a zjistěte, v jaké stanici oken je napojen (záznam bude zřejmě někde ke konci seznamu handlů procesu). 3. V Process Exploreru zjistěte, které služby jsou spouštěny řetězci svchost -k rpcss svchost -k netsvcs Prohlédněte si vlastnosti těchto procesů, ve vlastnostech projděte všechny karty. 4.1.3 Program sc.exe Program sc.exe je součástı́ Windows od verze XP (Server 2003). Jeho účelem je pokročilá konfigurace služeb a dostaneme se prakticky k jakýmkoliv nastavenı́m, která pro služby (obecně) platı́. Podobně jako přı́kaz net, i zde máme sadu podpřı́kazů, které upřesňujı́ chovánı́ přı́kazu samotného. sc query zobrazı́ informace (podáváme dotaz) sc query zobrazı́ informace o všech službách (hodně dlouhý výpis) sc query webclient zobrazı́ informace o službě WebClient (zadáváme vždy jen krátký název služby) vypı́šeme všechny interaktivnı́ služby (pozor, před rovnı́tkem nenı́ mezera, za nı́m naopak musı́ být) sc query type= filesys vypı́šeme všechny ovladače souborových systémů (je jich poměrně hodně) sc \\počı́tač query lmhosts vypı́še informaci o zadané službě běžı́cı́ na vzdáleném (zadaném) počı́tači sc query type= interact sc qc, sc queryex zobrazı́ podrobnějšı́ informace zaměřené spı́še na umı́stěnı́ a přı́stupová oprávněnı́ nebo na proces sc qc rpcss zobrazı́ tento typ informacı́ o službě Vzdálené volánı́ procedur sc queryex rpcss z tohoto výpisu zjistı́me napřı́klad PID procesu, ve kterém služba běžı́ $ 4.1 SPRÁVA SLUŽEB 104 sc create, sc delete vytvořı́ pro zadanou (novou) službu položku v registru, aby mohla být spouštěna; tento přı́kaz sloužı́ ke zprovozněnı́ služby a ovladače, je součástı́ instalace sc create novaSluzba binpath= c:\windows\system32\soubor.exe type= own start= auto vytvářı́me novou službu, zadali jsme jejı́ spustitelný sou- bor, typ služby (služba s vlastnı́m spustitelným souborem) a požadavek na automatické spouštěnı́ při startu systému; můžeme zadat také dalšı́ položky včetně závislostı́ na jiných službách či jejich skupinách, uživatelský účet, zobrazované jméno, atd., prakticky cokoliv bývá v přı́slušných položkách registru sc delete novaSluzba odinstalujeme službu (ve smyslu odstraněnı́ údajů z registru) sc config upravı́ konfiguraci služby či ovladače (konkrétně hodnoty v registru) změnı́ konfiguraci spuštěnı́ zadané služby Zařazovánı́ tisku na automatické spouštěnı́ při startu systému sc config spooler start= auto sc enumdepend zjišt’ujeme, které dalšı́ služby závisejı́ na zadané službě (chceme vědět, které služby by nefungovaly, kdybychom zadanou službu ukončili) sc enumdepend samss sc enumdepend rpcss zjišt’ujeme závislosti na službě Správce zabezpečenı́ účtů Zjišt’ujeme totéž pro službu Vzdálené volánı́ procedur Možných podpřı́kazů je vı́ce (zjistı́me je v nápovědě). Můžeme napřı́klad službu pozastavit a pak ji kdykoliv odblokovat, nastavit akce při selhánı́ služby, přinutit správu služeb k aktualizaci stavu služby, pokud byly provedeny změny a neprojevujı́ se. Lze také pracovat s popisovači zabezpečenı́ a také zamykat nebo odemykat databázi služeb na zadaném počı́tači.1 Přı́klad 4.2 Budeme pracovat se službou Klient DHCP. V konzole services.msc lze zjistit, že krátký název služby je dhcp, spouštı́ se přı́kazem svchost.exe -k netsvcs, tedy běžı́ v hostitelském procesu služeb a nemá svůj vlastnı́ proces, spouštı́ se automaticky, je spuštěna, proces má přı́stupová oprávněnı́ „mı́stnı́ systémový účet“ (tj. Local System), závisı́ na třech dalšı́ch službách (AFD, Ovladač protokolu TCP/IP, Rozhranı́ NetBios nad protokolem TCP/IP). Údaje jsou z Windows XP, v jiných verzı́ch mohou být odlišné. Podı́váme se na výstupy přı́kazu sc: C:\> sc query dhcp SERVICE_NAME: dhcp TYPE STATE WIN32_EXIT_CODE SERVICE_EXIT_CODE CHECKPOINT WAIT_HINT 1 : 20 WIN32_SHARE_PROCESS : 4 RUNNING (STOPPABLE,NOT_PAUSABLE,ACCEPTS_SHUTDOWN) : 0 (0x0) : 0 (0x0) : 0x0 : 0x0 Důsledkem zamknutı́ databáze služeb je napřı́klad to, že SCM nemůže od té chvı́le na daném počı́tači spustit žádnou službu, tedy můžeme tento postup použı́t při synchronizaci – pokud chceme provést konfiguraci služeb (třeba i vzdáleně) na daném počı́tači, zamkneme databázi služeb, provedeme konfiguraci a pak databázi odemkneme. M 4.1 SPRÁVA SLUŽEB 105 C:\> sc queryex dhcp SERVICE_NAME: dhcp TYPE STATE WIN32_EXIT_CODE SERVICE_EXIT_CODE CHECKPOINT WAIT_HINT PID FLAGS : 20 WIN32_SHARE_PROCESS : 4 RUNNING (STOPPABLE,NOT_PAUSABLE,ACCEPTS_SHUTDOWN) : 0 (0x0) : 0 (0x0) : 0x0 : 0x0 : 1260 : M C:\> sc qc dhcp [SC] GetServiceConfig SUCCESS SERVICE_NAME: dhcp TYPE START_TYPE ERROR_CONTROL BINARY_PATH_NAME LOAD_ORDER_GROUP TAG DISPLAY_NAME DEPENDENCIES : : : : : : : : : : SERVICE_START_NAME : M 20 WIN32_SHARE_PROCESS 2 AUTO_START 1 NORMAL C:\WINDOWS\system32\svchost.exe -k netsvcs TDI 0 Klient DHCP Tcpip Afd NetBT LocalSystem Jak vidı́me, mezi prvnı́mi dvěma výpisy nenı́ velký rozdı́l, v druhém máme navı́c dva poslednı́ řádky (PID procesu, ve kterém služba běžı́, a pak přı́znaky, ale tato služba žádné nemá). Oproti tomu třetı́ výpis již odlišný je. Dozvı́me se v něm tak důležité věci jako je třeba typ spuštěnı́ služby (automaticky), přı́kaz, kterým je spuštěna, skupina, pořadı́ při spouštěnı́, zobrazované jméno (česky), závislosti a účet, pod kterým je služba přihlášena. Závislosti „opačným směrem“ – tedy které služby závisejı́ na této službě – zjistı́me takto: C:\> sc enumdepend dhcp Enum: entriesRead = 0 Na této službě tedy žádná jiná služba nezávisı́. Jinak je tomu napřı́klad u služby Správce zabezpečenı́ účtů (samss): M C:\> sc enumdepend samss Enum: entriesRead = 1 SERVICE_NAME: MSDTC DISPLAY_NAME: Koordinátor DTC TYPE : 10 WIN32_OWN_PROCESS STATE : 1 STOPPED (NOT_STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN) WIN32_EXIT_CODE : 1077 (0x435) SERVICE_EXIT_CODE : 0 (0x0) CHECKPOINT : 0x0 WAIT_HINT : 0x0 M 4.2 WBEM 106 Úkoly 1. Vyzkoušejte dotazovou variantu přı́kazu sc, podle výše uvedených ukázek použitı́. C 2. Najděte v nápovědě celkovou syntaxi přı́kazu sc. Zjistěte, jak lze některou běžı́cı́ službu pozastavit a pak znovu odblokovat. 4.2 4.2.1 WBEM Princip a implementace WBEM WBEM (Web-Based Enterprise Management) je skupina technologiı́ a postupů vytvořená za účelem sjednotit správu distribuovaných počı́tačových prostředı́ (tj. včetně vzdálené správy, ale také lokálně na jednom počı́tači). Správa se provádı́ bud’ přes webové rozhranı́ nebo pomocı́ specializovaných shellů. P Data jsou organizována v modelu CIM (Common Information Model), což je vlastně objektově orientovaná databáze, kde jednotlivé objekty jsou zapouzdřeny a přistupuje se k nim přes unifikované rozhranı́. CIM je otevřený standard, tedy je možné ho jakkoliv využı́vat a dále upravovat. Rozlišujeme WBEM server (ukládá a poskytuje informace, provádı́ přı́kazy) a WBEM klienta (reprezentován předevšı́m rozhranı́m, se kterým pracuje administrátor, a přı́slušným API). Klient odesı́lá žádosti, server konfrontuje se skutečným stavem a provádı́ je (přı́padně zajišt’uje proces autentifikace a autorizace). Spolu komunikujı́ přes protokol HTTP nebo HTTPS. Právě podle těchto protokolů je v názvu „web-based“. Architektura je postavena na vzoru model–obraz. Klient čte data z „obrazu“, server přistupuje k „modelu“ reprezentovanému skutečným stavem hardwaru a softwaru v sı́ti a při jakékoliv změně modelu aktualizuje obraz. WBEM má vı́ce různých implementacı́, napřı́klad: WMI (Windows Management Instrumentation) je implementace Microsoftu pro Windows. Umožňuje (i vzdáleně) spravovat počı́tače s Windows v sı́ti, je předinstalována na všech verzı́ch od Win 2000 (resp. Win ME). Je postavena na VBScriptu a PowerShellu, WMI těmto skriptovacı́m jazykům poskytuje přı́stup prakticky k čemukoliv ve Windows. Některé dalšı́ nástroje, které nejsou instalovány se systémem, je možné stáhnout ze stránek Microsoftu http://www.microsoft.com/downloads/details.aspx?familyid=6430F853-1120-48DB-8CC5 -F2ABDC3ED314&displaylang=en. OpenWBEM od Novellu je implementace určená pro Novell Netware, Linux a některé jiné Unixové systémy (včetně Solarisu a MacOSX). Je použı́vána v komerčnı́ i nekomerčnı́ sféře a stejně jako WMI nabı́zı́ rozsáhlé možnosti zásahů do konfigurace sı́tě a monitorovánı́. Je ke staženı́ na http://www.openwbem.org/. OpenPegasus je dalšı́ otevřená implementace pro různé Unixové systémy včetně Linuxu, a Windows. Je ke staženı́ na http://www.openpegasus.org/. 4.2 WBEM 4.2.2 107 WMI Jak bylo výše uvedeno, WMI je implementace modelu WBEM pro správu Windows. Databáze CIM je taktéž objektová, oproti poměrně primitivnı́m objektům, o kterých jsme se učili dřı́ve, jde o objekty plnohodnotné s implementacı́ třı́d, vlastnostı́, metod, událostı́, využı́vajı́cı́ dědičnost a kompozici. Třı́dy jsou psány v objektovém jazyce MOF (Managed Object Format), který je interpretovaný (dá se řı́ct skriptovacı́). Většina komponent WMI (včetně třı́d) je v adresáři ...\System32\Wbem. Najdeme tam hodně souborů s přı́ponou MOF. Pokud nás zajı́má, jak vlastně vypadajı́ třı́dy WMI, můžeme se na ně podı́vat v nástroji, který je součástı́ Windows od verze XP. WbemTest se spouštı́ přı́kazem wbemtest a má grafické rozhranı́. Po spuštěnı́ se objevı́ základnı́ okno, které vidı́me na obrázku 4.3. Obrázek 4.3: Úvodnı́ okno aplikace WbemTest Nejdřı́v je nutné se připojit k určitému oboru názvů (zobrazuje se v levém hornı́m rohu okna), na obrázku 4.3 jsme připojeni k oboru názvů CIMV2 (k oboru názvů se jednoduše připojı́me tak, že klepneme na tlačı́tko Připojit a zadáme název). Pak můžeme volně pracovat se třı́dami, které do zvoleného oboru názvu patřı́ (také vytvářet nové). Pokud si chceme prohlédnout (nebo upravit) vlastnosti některé třı́dy daného oboru názvů, klepneme v hlavnı́m Obrázek 4.4: Stanovenı́ třı́dy okně na tlačı́tko Výčet třı́d. Zobrazı́ se dialogové okno (obrázek 4.4), do kterého bud’ zadáme přı́mo název třı́dy, a nebo zvolı́me „rekurzivnı́ “ výčet (to znamená, že budou vypsány všechny třı́dy z oboru názvů). V seznamu pak poklepeme na vybranou třı́du a zobrazı́ se okno se všemi jejı́mi vlastnostmi a metodami (obrázek 4.5). Kromě výše uvedeného nástroje WbemTest lze ke službě WMI přistupovat přes konzolu Řı́zenı́ P 4.2 WBEM 108 Obrázek 4.5: Vlastnosti zvolené třı́dy Win32_Process ve WbemTest služby WMI. Spouštı́me ji souborem wmimgmt.msc, ale je dostupná také v konzole Správa počı́tače, jak vidı́me na obrázku 4.6. V kontextovém menu položky Řı́zenı́ služby WMI zvolı́me Vlastnosti a zı́skáme okno, které vidı́me na obrázku 4.6 vpravo. Nastavujeme obecné vlastnosti řı́zenı́ WMI jako je způsob protokolovánı́ a umı́stěnı́ protokolu, zálohovánı́ (máme možnost obnovit databázi WMI ze zálohy) a určujeme zabezpečenı́ prvků databáze. $ Dalšı́m velmi užitečným nástrojem pro řı́zenı́ WMI je program wmic.exe, kterému se budeme podrobněji věnovat dále. Pomocı́ tohoto nástroje můžeme přistupovat k databázi WMI a zı́skávat z nı́ nejrůznějšı́ informace. Na webu Microsoftu lze zı́skat WMI Administrative Tools,2 což je balı́k několika nástrojů pro práci s WMI objekty. Je užitečný zejména pro programátory služeb, v nástrojı́ch balı́ku se dostaneme prakticky k jakýmkoliv informacı́m, navı́c přehledně a srozumitelně členěným. Rozhranı́ WMI se velmi často použı́vá ve skriptech (pomocı́ VB skriptu se takto dostaneme prakticky k čemukoliv, co na počı́tači potřebujeme, i přes sı́t’). Skripty můžeme vytvářet bud’ ručně, a nebo v některém nástroji pro generovánı́ WMI skriptů. Hodně použı́vané jsou napřı́klad • WMI Code Creator3 generuje skripty v jazycı́ch VB Script, Visual Basic.NET a C#, • Scriptomatic.4 2 WMI Administrative Tools zı́skáme na adrese http://www.microsoft.com/downloads/details.aspx?FamilyID=6430f 853-1120-48db-8cc5-f2abdc3ed314&DisplayLang=en. V balı́ku najdeme nástroje WMI Object Browser (zobrazuje objekty v hierarchické struktuře i jejich metody, metody můžeme i spouštět), WMI CIM Studio (pro práci s třı́dami), WMI Event Registration Tool a WMI Event Viewer (pro práci s událostmi objektů). 3 WMI Code Creator je dostupný na stránce http://www.microsoft.com/downloads/details.aspx?familyid=2CC30A 64-EA15-4661-8DA4-55BBC145C30E&displaylang=en. 4 Scriptomatic zı́skáme na adrese http://www.microsoft.com/downloads/details.aspx?familyid=09DFC342-648B-4119B7EB-783B0F7D1178&displaylang=en. 4.2 WBEM 109 Obrázek 4.6: Vlastnosti v konzole Řı́zenı́ služby WMI Zatı́mco ve Windows 2000 se rozhranı́ WMI spouštělo jako služba s vlastnı́m procesem, od verze XP (Server 2003) jde o službu spouštěnou v rámci procesu svchost.exe. Kdykoliv se spouštı́ něco souvisejı́cı́ho s WMI (napřı́klad požadavek na data z databáze CIM), kód je spouštěn v procesu wmiprvse.exe, který je potomkem procesu hostı́cı́ho službu RPC. Úkoly 1. V adresáři ...\System32\Wbem si vyberte některý MOF soubor (raději vı́ce) a prozkoumejte syntaxi jazyka – jak se deklarujı́ třı́dy, instance a metody. C 2. Spust’te WbemTest a připojte se k oboru názvů CIMV2. Prohlédněte si některou ze třı́d, které jsou takto přı́stupné. 3. V konzole Řı́zenı́ služby WMI zjistěte, jak je momentálně nastaveno protokolovánı́ a zálohovánı́ této služby. 4.2.3 Program wmic Program wmic (WMI Console) je dostupný od verze Windows XP/Server 2003. Umožňuje využı́vat rozhranı́ WMI na přı́kazovém řádku. pracuje ve dvou režimech – klasickém (externı́m) a interaktivnı́m. Při použitı́ v klasickém režimu zadáváme přı́kaz začı́najı́cı́ názvem programu (wmic) následovaný parametry, do interaktivnı́ho režimu se dostaneme zadánı́m přı́kazu wmic bez dalšı́ch parametrů (prompt se změnı́ na wmic:root\cli> a zadáváme internı́ přı́kazy). Nápovědu zı́skáme bud’ v grafickém režimu, nebo přı́kazem wmic /?, a nebo v interaktivnı́m režimu této konzoly přı́kazem /?. Ještě podrobnějšı́ nápovědu zobrazı́me přı́kazem /?:FULL. $ 4.2 WBEM 110 Přı́kaz wmic je velmi komplexnı́. Má tuto syntaxi: WMIC přepı́nače předmět sloveso parametry, kde • přepı́nače nastavujı́ obecné chovánı́ přı́kazu, mohou být napřı́klad /node:počı́tač – přı́kaz bude proveden na zadaném počı́tači (před názvem počı́tače nebu- deme dávat opačná lomı́tka) /user:uživatel – při vyhodnocovánı́ bude použit zadaný uživatel s jeho přı́stupovými oprávněnı́mi (budeme dotázáni na heslo) /output:soubor – výpis bude směrován do zadaného souboru • předmět (také alias) určuje to, s čı́m chceme manipulovat nebo na co se dotazujeme, následuje zkrácený seznam (všechny možnosti zjistı́me v nápovědě): bios bootconfig cpu dcomApp desktop diskdrive fsdir irq job memLogical memPhysical netuse NIC NICConfig NTEvent onBoardDevice OS pageFile printer process registry service share temperature useraccount • sloveso určuje požadovanou akci, která má být provedena s předmětem: – LIST – toto sloveso lze použı́t na všechny předměty, zobrazı́ obecnou informaci o předmětu, můžeme upřesnit, jak podrobné informace chceme (full – všechny, brief – základnı́ v tabulce, writeable – které lze měnit, atd.), – GET – zı́skánı́ podrobnějšı́ch informacı́ o všech nebo vybraných vlastnostech předmětu, – SET – změna vlastnostı́ předmětu, – ASSOC – vrátı́ instance zadaného objektu (tedy s nı́m asociované), – CREATE, DELETE – vytvořenı́ nové instance, odstraněnı́ instance nebo třı́dy, – CALL – spuštěnı́ metody zadané třı́dy WMI. Přı́kaz v neinteraktivnı́m režimu použı́váme takto: wmic bios list vypı́še se informace o BIOSu (úplná) wmic os list brief stručná informace o operačnı́m systému ve formě tabulky úplná informace o operačnı́m systému ve formě seznamu, výstup (zkrácený) bude vypadat nějak takto: wmic os list full BootDevice=\ Device\ HarddiskVolume1 BuildNumber=2600 BuildType=Multiprocessor Free CodeSet=1250 CountryCode=420 CSDVersion=Service Pack 3 CSName=nazevpocitace CurrentTimeZone=60 Debug=FALSE ... FreePhysicalMemory=49996 M 4.2 WBEM 111 FreeSpaceInPagingFiles=490728 FreeVirtualMemory=2054164 ... MaxNumberOfProcesses=-1 MaxProcessMemorySize=2097024 Name=Microsoft Windows XP Professional|C:\ WINDOWS|\ Device\ Harddisk0\ Partition1 ... SystemDevice=\ Device\ HarddiskVolume1 SystemDirectory=C:\ WINDOWS\ system32 SystemDrive=C: TotalSwapSpaceSize= TotalVirtualMemorySize=2097024 TotalVisibleMemorySize=515516 Version=5.1.2600 WindowsDirectory=C:\ WINDOWS Z výstupu se dá vyčı́st poměrně hodně o nastavenı́ch operačnı́ho systému (ve skutečnosti by tam bylo mnohem vı́ce řádků, z bezpečnostnı́ch a kapacitnı́ch důvodů je výstup značně zkrácen). Všimněte si řádku MaxNumberOfProcesses=-1. To znamená, že nenı́ omezen počet spouštěných procesů (napřı́klad u Vista Starter by tady bylo jiné čı́slo). přı́kaz zobrazı́ seznam všech pamět’ových zařı́zenı́ (i výměnných), a to vlastnosti z výčtu oddělené čárkou, výstup: wmic diskdrive get model,size,interfacetype,mediatype InterfaceType IDE MediaType Fixed hard disk media wmic /output:D:\procinfo.txt cpu get Model ST3160812AS Size 160039272960 informace o procesoru (v tabulce) budou uloženy do zadaného souboru wmic cpu get > D:\procinfo.txt totéž vypı́še seznam běžı́cı́ch služeb (pouze ty vlastnosti, které byly specifikovány), všimněte si syntaxe podobné SQL (ostatně pracujeme s databázı́) wmic service where state=”running” get caption, name wmic process call create notepad.exe process pro vytvořenı́ procesu) spustı́ zadaný proces (zavolá proceduru create třı́dy wmic /node:počı́tač process call create notepad.exe totéž, ale na jiném počı́tači (to přı́kaz start neumı́), název počı́tače se zadává bez úvodnı́ch opačných lomı́tek wmic os call reboot restart systému wmic /node:počı́tač os call shutdown vzdálené vypnutı́ systému wmic service ”spooler” call startservice spustı́ zadanou službu (Zařazovánı́ tisku) wmic /node:ucetni process where name=”explorer.exe” call terminate zadaný proces bude ukončen, a to na uvedeném počı́tači (vypadá to, že účetnı́mu bude ukončeno grafické prostředı́, ale tento proces se obvykle po ukončenı́ znovu spustı́, tedy jde vlastně o restart grafického prostředı́) wmic /node:ucetni /user:dadmin process where name=”explorer.exe” call terminate totéž jako předchozı́, ale v přı́kazu na zadaném počı́tači vystupujeme s přı́stupovými oprávněnı́mi zadaného uživatele M 4.2 WBEM 112 Vidı́me, že můžeme použı́vat i dotazy filtrované podle vlastnostı́ (where) podobně jako v SQL. Pokud se jedná o řetězcovou hodnotu, musı́me ji uzavřı́t do uvozovek (napřı́klad name=”explorer.exe”, ale čı́sla nebo hodnoty true/false do uvozovek neuzavı́ráme. Přı́klad 4.3 Ukážeme si práci v interaktivnı́m módu. spustı́me interaktivnı́ režim, prompt je wmic:root\cli> wmic os /? dotážeme se, co lze použı́t na předmět os (operačnı́ systém) os list /? chceme upřesnit parametry pro sloveso list os list brief os list full zı́skáme tabulku s několika základnı́mi informacemi zı́skáme seznam (už ne tabulku) s dvojicemi vlastnost=hodnota tabulka s hodnotami volného mı́sta (ve fyzické paměti, v stránkovacı́ch souborech, ve virtuálnı́ paměti) os list free /output:D:\procinfo.txt cpu get do souboru se uložı́ hodně široká tabulka vlastnostı́ pro- cesoru totéž, ale mı́sto široké tabulky máme v souboru seznam položek vlastnost=hodnota (při takovém množstvı́ je to poněkud přehlednějšı́) /output:D:\procinfo.txt cpu list full cpu get /? zeptáme se, co se dá zjistit o procesoru zı́skáme údaj o počtu logických procesorů (počet jader nebo jeho dvojnásobek, pokud procesor podporuje hyperthreading) cpu get NumberOfLogicalProcessors cpu get AddressWidth,Caption,CurrentClockSpeed,DataWidth,Description,ExtClock vy- pı́še se tabulka s vybranými sloupci vypı́še se seznam běžı́cı́ch procesů, u každého je přı́kaz, kterým byl spuštěn (všimněte si, že v seznamu je i wmiprvse.exe, který zajišt’uje vyhodnocovánı́ dotazů na WMI) process get process list brief zı́skáme tabulku procesů s některými informacemi process where ThreadCount>8 list brief podobný výstup, ale vypı́šou se pouze procesy, které majı́ vı́ce než 8 vláken service get name,state,serviceType vypı́še se tabulka s názvy, stavy a typy služeb service where desktopInteract=true get name,state zı́skáme seznam interaktivnı́ch slu- žeb (všimněte si, že u neběžı́cı́ch služeb je PID=0) service where (desktopInteract=true and startMode=”auto”) get name,processid výběrová kritéria můžeme kombinovat (jako v SQL), ale v tom přı́padě je uzavřeme do závorky service where desktopinteract=true get name,processid,status /every:5 takto zajistı́me, že dotaz bude automaticky opakován v intervalu 5 sekund (stisknutı́m některé klávesy opakovánı́ přerušı́me) quit konec, ukončı́me interaktivnı́ režim, změnı́ se prompt a přesuneme se do Přı́kazového řádku (funguje také přı́kaz exit) 4.3 SPRÁVA PROCESŮ 113 Úkoly 1. Vyzkoušejte práci v interaktivnı́m módu přı́kazu podle přı́kladu 4.3. C 2. Najděte seznam všech předmětů (aliasů) pro přı́kaz wmic. V nápovědě v grafickém rozhranı́ jsou témata pro wmic značně rozházená, můžete použı́t napřı́klad wmic /?. 3. Zjistěte, co vše lze zjistit v předmětech (aliasech) csproduct, datafile, memphysical, netprotocol, recoveros, registry, voltage. 4. Pomocı́ wmic zjistěte veškeré informace o řadičı́ch sı́t’ového rozhranı́ (plný výpis), přesměrujte do souboru a ten potom prostudujte. 5. Vypište všechny běžı́cı́ procesy, jejichž PID je většı́ než 1000. 4.3 Správa procesů Z předchozı́ho semestru vı́me, že k úlohám můžeme přistupovat pomocı́ Správce úloh a nebo jiného nástroje, který si doinstalujeme (napřı́klad Process Explorer). Nástrojů s grafickým rozhranı́m pro práci s procesy existuje poměrně hodně. 4.3.1 Procesy ve Windows NT Proces je instance programu, aplikace nebo služby systému (což je ostatně obvykle také nějaký program), která má přiděleny určité zdroje (pamět’, čas procesoru apod.). V 32bitových verzı́ch Windows jádro nepracuje přı́mo s procesy, ale s jejich vlákny. Každý proces má minimálně jedno vlákno, vlákna samotná provádějı́ výpočty. Každý proces má • • • • tabulku deskriptorů objektů, což je vlastně odkaz na zdroje, které má k dispozici, vlastnı́ adresový prostor, který byl přidělen správcem paměti (správcem virtuálnı́ch počı́tačů), spustitelný program (kód a globálnı́ data), přı́stupový token pro určenı́ jeho přı́stupových oprávněnı́. Každé vlákno má • 2 zásobnı́ky (pro uživatelský a privilegovaný mód), • sadu registrů, které obsahujı́ stav procesoru, • soukromou ukládacı́ oblast v paměti použı́vanou podsystémy a knihovnami DLL. Ve Windows NT vlákna pracujı́ v preemptivnı́m multitaskingu. Nový proces může být vytvořen spuštěnı́m programu nebo volánı́m API funkce CreateProcess(). Pokud to nenı́ proces typu Win32, je spuštěn odpovı́dajı́cı́ podsystém, pokud se tak ještě nestalo (POSIX, OS/2, . . . ). Spouštěný proces pak tomuto podsystému předá. U DOS a Win16 procesů je vytvořen virtuálnı́ stroj. P 4.3 SPRÁVA PROCESŮ 114 Hlavnı́ vlákno procesu je spuštěno podle hlavnı́ho kódu procesu hned po vytvořenı́ procesu, ale všechna ostatnı́ vlákna jsou spuštěna API funkcı́ CreateThread() s kódem některé k tomu účelu naprogramované funkce. Může to být funkce uvnitř spustitelného souboru procesu a nebo funkce z některé dynamicky linkované knihovny. Adresu funkce spuštěného vlákna zjistı́me napřı́klad v Process Exploreru ve vlastnostech procesu na kartě Threads. Na této kartě je kromě jiného pro každé vlákno čı́slo TID (Thread ID, čı́slo vlákna) a adresa funkce vlákna (obvykle název souboru s čı́slem označujı́cı́m vzdálenost funkce v kódu od začátku souboru). Na této kartě se také nacházı́ tlačı́tko Stack, přes které se dostaneme k zásobnı́ku vlákna. Tlačı́tko Kill umožňuje násilně ukončit vlákno nebo proces a tlačı́tko Suspend vlákno či proces uspı́. Podsystém SMSS (Session Manager Subsystem) je správce relacı́ uživatelů. Jeho souborem je Obrázek 4.7: Vlastnosti vlákna procesu v Process Exploreru smss.exe. Jako jeden z mála procesů nenı́ napojen na žádnou stanici oken. Tento proces řı́dı́ všechny relace na počı́tači. LSASS (Local Security Authority Subsystem) je podsystém, který udržuje informace o všem, co se týká zabezpečenı́ systému a právě zde běžı́ všechny procesy ověřovánı́ přı́stupu, také spravuje Mı́stnı́ zásady zabezpečenı́ a některé dalšı́ zásady. Tento podsystém použı́vá databáze SAM (Security Account Manager), ve kterých jsou uloženy informace o uživatelských účtech a účtech skupin, a to bud’ databázi SAM na lokálnı́m počı́tači(součást registru, v samostatném souboru) nebo v doméně. V podsystému Win32 běžı́ i některé systémové procesy (všechny, které jsou interaktivnı́). Je fyzicky uložen ve dvou souborech – část běžı́cı́ v uživatelském režimu je v souboru csrss.exe, část běžı́cı́ v režimu jádra je v souboru win32k.sys (je trochu zvláštnı́, že handle souboru win32k.sys nikdo nevlastnı́). Velmi důležitý proces, který se však ve Správci úloh neobjevı́, je ntldr (NT Loader, soubor bez přı́pony). Po spuštěnı́ počı́tače je spuštěn jako prvnı́ proces a jeho úkolem je načı́st (load) celý operačnı́ systém. Spouštı́ také proces smss (Session Manager, smss.exe), který pak má na starosti dalšı́ provoz systému (viz kapitolu 6.2 Start systému). Proces, který se ve většině nástrojů zobrazuje jako System, nás v zobrazenı́ procesů může překvapit. V Process Exploreru vidı́me, že v hierarchické struktuře je předkem prakticky všech systémových procesů. Pokud si zobrazı́me vlastnosti tohoto procesu, zjistı́me, že nemá žádný spustitelný soubor, ale přesto v něm běžı́ hodně vláken. Vlákna majı́ svůj kód bud’ v souboru ntoskrnl.exe (to je hlavnı́ soubor jádra) nebo v různých souborech s přı́ponou SYS (to znamená ovladače). Tento proces je hostitelem vláken mnoha ovladačů – ovladače běžı́cı́ v režimu jádra totiž většinou (ne vždy) nemajı́ žádný vlastnı́ proces. P 4.3 SPRÁVA PROCESŮ 115 Dalšı́ „záhadné“ procesy, které vidı́me v Process Exploreru, jsou označeny jako Interrupts a DPCs. Ve skutečnosti vůbec nejde o procesy (ostatně, nejen že nemajı́ žádný spustitelný soubor, ale dokonce ani vlákna ani přidělené prostředky), sloužı́ k informovánı́ o čase, který systém strávı́ obsluhou hardwarových přerušenı́ a volánı́ procedur DPC (Deferred Procedure Call, což je pozdržené volánı́ procedur – obvykle pro prováděnı́ té části kódu obsluhy přerušenı́, která „moc nespěchá“). Pokud v těchto dvou položkách najdeme vyššı́ hodnoty než obvykle, znamená to obvykle nějaký problém s hardwarem nebo ovladačem. Úkoly 1. Spust’te Process Explorer a prohlédněte si vlastnosti položek Interrupts, DPCs, System, dále všech zbylých systémových procesů a některého uživatelského procesu. Všı́mejte si zejména vláken procesu, přidělených prostředků (včetně paměti) a uživatelského účtu, pod kterým běžı́ (včetně SID). Všimněte si, že položky Interrupts a DPCs majı́ také SID. Jaké? Komu asi patřı́? C 2. U některého procesu s vı́ce vlákny (napřı́klad services.exe) ve vlastnostech na kartě Threads si vyberte některé vlákno a zobrazte jeho zásobnı́k. 3. Spust’te některý jednoduchý program, třeba Poznámkový blok nebo Kalkulačku. Pak najděte jeho záznam v Process Exploreru a uspěte ho (nápověda: uspánı́ je zde myšleno jako suspendovánı́, hledejte na kartě Performance). Pokuste se proces ukončit standardnı́m způsobem, když to nepůjde, tak ho v Process Exploreru „zabijte“ (násilně ukončete). 4.3.2 Úlohy a procesy Úloha je přesně vzato abstraktnı́ zadánı́, které je třeba provést, ale tento pojem se v praxi použı́vá i pro sadu procesů, které definovaným způsobem spolupracujı́ na řešenı́ tohoto zadánı́. Úlohu můžeme prostě brát jako zobecněnı́ činnosti a reprezentace procesů. Vztah mezi procesy patřı́cı́mi do jedné úlohy bývá často typu rodič–potomek (ale pokud mezi dvěma procesy je vztah rodič–potomek, neznamená to automaticky, že patřı́ do stejné úlohy). V angličtině se poněkud chaoticky použı́vajı́ dva pojmy – job a task. Obojı́ znamená úloha, jen v trochu jiném kontextu. Pojem task souvisı́ většinou s plánovánı́m, zatı́mco job použı́váme v souvislosti s tiskovými úlohami a také s úlohami coby abstrakcı́ procesů (nebo skupin procesů). Ve většině přı́padů platı́, že v jedné úloze je pouze jeden proces. Nemusı́ tomu tak být vždy, ukázku vytvořenı́ vı́ce procesů sdı́lejı́cı́ch jednu úlohu máme v přı́kladu 4.5 na straně 121 (ve Windows XP). Tam je popsán jeden z mála způsobů, jak vytvořit proces, jehož úlohu lze nějakým způsobem ovlivňovat (napřı́klad přidávat do úlohy dalšı́ procesy). Podpora úloh v tomto smyslu je však ve Windows zabudována až od verze XP/Server 2003. Ve Windows do verze 2000 sice najdeme nástroj Správce úloh (mstask.exe, těžko řı́ct, proč vlastně má ve svém názvu pojem „úloha“), který, jak vı́me, spouštı́me bud’ z přihlašovacı́ho okna, nebo z kontextového menu hlavnı́ho panelu a nebo klávesovou zkratkou Ctrl+Shift+Esc , ale nenı́ tam prakticky nic dalšı́ho, co s úlohami souvisı́. Pojem úloha se také použı́vá v souvislosti s tiskem nebo plánovánı́m spouštěnı́ procesů. P 4.3 SPRÁVA PROCESŮ 116 Alternativ ke Správci úloh je mnoho. Kromě nám již známého Process Exploreru můžeme použı́vat napřı́klad tyto správce procesů: $ • Task Patrol (http://www.asmdev.net/products/taskpatrol/index.html), • Ultimate Process Manager (http://www.lodusweb.net/index.php?option=com content&task=view&id=13&Itemid=45), • Process Lasso, (http://www.bitsum.com/prolasso.php), • DTaskManager (spolu s dalšı́mi aplikacemi na http://www.dimio.altervista.org/eng/), • Security Process Explorer (http://www.glarysoft.com/spe.html), • Daphne (http://www.drk.com.ar/daphne.php), • System Explorer (http://systemexplorer.mistergroup.org/) – pozor, hned za „Download“ jsou odkazy Google a až pak odkaz na stránku pro stahovánı́. Výše uvedené aplikace nejsou všechny stejné. Vždy nabı́zejı́ alespoň takovou funkčnost jako má správce úloh (plus mı́nus), dalšı́ majı́ vylepšené bezpečnostnı́ funkce, rozšı́řenou podporu sı́tě, třı́děnı́ procesů, rozsáhlost informacı́, které lze zjistit o procesech, některé se nemusejı́ instalovat (portable, přenosná, varianta) atd. Všechny jsou bud’ volně šiřitelné nebo majı́ volně dostupnou verzi. S úlohami můžeme pracovat pomocı́ nástroje tasklist. Sloužı́ k výpisu úloh (také podle vybraných kritériı́), a to na mı́stnı́m nebo vzdáleném počı́tači. $ zobrazı́ seznam běžı́cı́ch procesů (úloh) na mı́stnı́m počı́tači (název, PID, relaci, přidělenou pamět’) tasklist totéž, ale pracujeme s procesy na zadaném počı́tači tasklist /S počı́tač zobrazené informace jsou podrobnějšı́ – přidajı́ se sloupce pro stav procesu, jeho vlastnı́ka (uživatelský účet), čas procesoru a titulek tasklist /V tasklist /SVC tasklist /M k procesům se vypı́šou i služby, které v nich běžı́ ke každému procesu zjistı́me dynamicky linkované knihovny, které použı́vá tasklist /M icmp.dll takto zjistı́me, které procesy použı́vajı́ zadanou knihovnu tasklist /fi ”imagename eq svchost.exe” použı́váme filtr – chceme pouze procesy, u nichž je název spustitelného souboru svchost.exe (spustitelný soubor se nazývá image) tasklist /fi ”username eq NT AUTHORITY\SYSTEM” chceme všechny procesy běžı́cı́ pod sys- témovým účtem tasklist /fi ”memusage le 98000” chceme procesy, které zabı́rajı́ maximálně 98 000 kB paměti (le znamená less or equal, menšı́ nebo rovno), kromě eq a le máme k dispozici operátory ne (nenı́ rovno), gt (většı́), lt (menšı́), ge (většı́ nebo rovno) tasklist /FO list výstup nebude mı́st formu tabulky, ale seznamu výstup je ve formátu CSV, který lze importovat do běžných tabulkových editorů včetně Excelu (výstup v tomto formátu obvykle směrujeme do souboru) tasklist /FO csv >> proc.csv Procesy a úlohy nemusı́me pouze zobrazovat, můžeme je i ukončovat. K tomu sloužı́ přı́kaz taskkill („zabı́jenı́ “ úloh). ukončı́ proces se zadaným PID, jde o řádné ukončenı́ podobně jako bychom klepli myšı́ na křı́žek v pravém hornı́m rohu okna taskkill /pid 5810 $ 4.3 SPRÁVA PROCESŮ 117 zabije proces se zadaným PID (F jako Force, silný), použijeme, pokud proces nereaguje a odmı́tá se nechat ukončit běžným způsobem taskkill /F /pid 5810 taskkill /T /pid 5810 ukončı́me nejen zadaný proces, ale i všechny jeho potomky (rekurzı́vnı́ ukončenı́) taskkill /IM firefox.exe proces nemusı́me zadávat jeho PID, ale pomocı́ tohoto přepı́nače i jeho názvem můžeme použı́vat stejné filtry jako u přı́kazu tasklist, zde ukončı́me všechny procesy pracujı́cı́ pod zadaným uživatelským účtem taskkill /fi ”username eq uživatel” ukončı́me všechny procesy, které „neodpovı́dajı́ “, tedy pravděpodobně zamrzly (pozor – pravděpodobně, ale ne zcela jistě) taskkill /F /fi ”status eq not responding” Přı́klad 4.4 Výstup přı́kazu vypisujı́cı́ho základnı́ informace o procesech (zkrácený, na mı́stě řádku se třemi tečkami): C:\> tasklist Název procesu PID Název relace Cı́slo re Využitı́ pame ========================= ====== ================ ======== ============ System Idle Process 0 Console 0 16 kB System 4 Console 0 112 kB smss.exe 520 Console 0 124 kB csrss.exe 780 Console 0 3 952 kB winlogon.exe 804 Console 0 4 024 kB services.exe 848 Console 0 1 536 kB lsass.exe 860 Console 0 2 452 kB svchost.exe 1028 Console 0 1 592 kB ... thunderbird.exe 2560 Console 0 23 144 kB FreeCommander.exe 2452 Console 0 5 600 kB cmd.exe 4020 Console 0 3 092 kB procexp.exe 156 Console 0 28 656 kB firefox.exe 3060 Console 0 86 488 kB cmd.exe 2252 Console 0 4 248 kB PDFXCview.exe 1152 Console 0 45 684 kB tasklist.exe 244 Console 0 5 004 kB M Když budeme chtı́t podrobnějšı́ výpis, použijeme přepı́nač /v. Záhlavı́ výpisu je následujı́cı́ (samotný výpis je dlouhý, a navı́c dost do šı́řky): C:\> tasklist /v Název procesu PID Název rel Cı́slo re Využitı́ pame Stav Uživatelské jméno Cas CPU Titulek okna ============= ===== ========= ======== ============ ======== =================== ======== =============== M Nechceme všechno, ale zajı́majı́ nás pouze procesy svchost.exe, tedy budeme filtrovat: C:\> tasklist /v | findstr /i ”svchost.exe” svchost.exe svchost.exe svchost.exe svchost.exe svchost.exe svchost.exe 1028 1112 1260 1336 1452 768 Console Console Console Console Console Console 0 0 0 0 0 0 1 1 14 1 600 736 196 220 200 144 kB kB kB kB kB kB Spušteno Spušteno Spušteno Spušteno Spušteno Spušteno NT NT NT NT NT NT AUTHORITY\SYSTEM AUTHORITY\NETWORK SERVICE AUTHORITY\SYSTEM AUTHORITY\NETWORK SERVICE AUTHORITY\LOCAL SERVICE AUTHORITY\LOCAL SERVICE 0:00:00 0:00:01 0:00:30 0:00:00 0:00:00 0:00:00 Nenı́ Nenı́ Nenı́ Nenı́ Nenı́ Nenı́ k k k k k k dispozici dispozici dispozici dispozici dispozici dispozici M 4.3 SPRÁVA PROCESŮ 118 Oproti předchozı́mu výpisu máme navı́c předevšı́m účet, pod kterým služba pracuje, což už může být cenná informace. Pokud chceme zjistit, které služby běžı́ v různých procesech, zadáme (výstup je zkrácený o procesy, ve kterých žádná služba neběžı́): C:\> tasklist /svc Název procesu PID Služby ========================= ====== ==================================================== ... services.exe 848 Eventlog, PlugPlay lsass.exe 860 PolicyAgent, ProtectedStorage, SamSs svchost.exe 1028 DcomLaunch, TermService svchost.exe 1112 RpcSs svchost.exe 1260 AudioSrv, Browser, CryptSvc, Dhcp, dmserver, ERSvc, EventSystem, FastUserSwitchingCompatibility, helpsvc, HidServ, lanmanserver, lanmanworkstation, Netman, RasMan, Schedule, seclogon, SENS, SharedAccess, ShellHWDetection, srservice, TapiSrv, Themes, TrkWks, W32Time, winmgmt, wscsvc, wuauserv, WZCSVC svchost.exe 1336 Dnscache svchost.exe 1452 LmHosts, SSDPSRV AvastSvc.exe 1560 avast! Antivirus spoolsv.exe 2012 Spooler svchost.exe 768 WebClient jqs.exe 1060 JavaQuickStarterService LSSrvc.exe 1424 LightScribeService sqlservr.exe 1380 MSSQL$SQLEXPRESS SMAgent.exe 256 SoundMAX Agent Service (default) sqlwriter.exe 264 SQLWriter wmiapsrv.exe 1352 WmiApSrv alg.exe 2080 ALG ... M Jednotlivé procesy svchost.exe lze bohužel rozlišit jen podle jejich PID. Zjištěné PID můžeme využı́t také k výpisu všech modulů (předevšı́m dynamicky linkovaných knihoven, ale i dalšı́ch namapovaných souborů) daného procesu: C:\> tasklist /m /fi ”pid eq 848” Název procesu PID Moduly ========================= ====== =================================================== services.exe 848 ntdll.dll, kernel32.dll, snxhk.dll, ADVAPI32.dll, RPCRT4.dll, Secur32.dll, msvcrt.dll, NCObjAPI.DLL, MSVCP60.dll, SCESRV.dll, AUTHZ.dll, USER32.dll, GDI32.dll, USERENV.dll, umpnpmgr.dll, WINSTA.dll, NETAPI32.dll, ShimEng.dll, AcAdProc.dll, IMM32.DLL, Apphelp.dll, VERSION.dll, eventlog.dll, PSAPI.DLL, WS2_32.dll, WS2HELP.dll, wtsapi32.dll Jde o seznam modulů procesu services.exe, což je systémový proces, který zajišt’uje běh služeb. Uživatelský proces by měl zřejmě modulů ještě vı́ce. M 4.3 SPRÁVA PROCESŮ 119 Zvláštnı́, a ne zrovna populárnı́, skupinou procesů jsou rootkity. Rootkit je program, který dokáže skrýt sebe a přı́padně i jiné soubory a procesy před běžnými metodami zviditelněnı́ (tj. v rozhranı́ Windows nebo v souborovém systému). Pro odhalovánı́ rootkitů v současné době existuje vı́c nástrojů, všechny obvykle pracujı́ takto: nejdřı́v sestavı́ výpis souborů, procesů a klı́čů registru běžným způsobem přes knihovny Windows, a pak provedou totéž, ale oklikou přes vlastnı́ knihovny (které mimochodem skrývajı́ před rootkity podobným způsobem jako se rootkity skrývajı́ samy). Potom oba výpisy porovnajı́ a vypı́šou položky, které na prvnı́m výpisu nejsou. P Obrázek 4.8: Rootkit Revealer Takto pracuje napřı́klad Rootkit Revealer od Sysinternals, který je volně ke staženı́ na webu http://www.sysinternals.com, jeho výstup je na obrázku 4.8. V seznamu najdeme hodně „planých poplachů“, protože ve skutečnosti se skrývajı́ i nevinné soubory, jako napřı́klad některé soubory antivirového programu, internetových prohlı́žečů, ale také některé dočasné soubory. Správa úloh jako takových nenı́ pro Windows moc dobře zdokumentována ani využı́vána, ale výjimky lze najı́t. Napřı́klad na http://www.informit.com/articles/article.aspx?p=362660&seqNum=14 najdeme zajı́mavý článek o naprogramovánı́ skutečné správy úloh pod Windows tak, jak běžně funguje v unixových systémech. Úkoly 1. Projděte si nejméně dva správce procesů, se kterými jste zatı́m nepracovali (stačı́ projı́t jejich WWW stránky). Zaměřte se předevšı́m na odlišnosti v nabı́zených funkcı́ch oproti Správci úloh a Process Exploreru. 2. Vypište seznam procesů pomocı́ přı́kazu tasklist a porovnejte výstup s tı́m, co zobrazuje Správce úloh. Pak vyzkoušejte různé možnosti formátovánı́ výstupu, výstup ve formě CSV (směrujte do souboru) pak otevřete (importujte) v některém tabulkovém editoru. 3. Vyzkoušejte u přı́kazu tasklist nejrůznějšı́ filtry, které je možné použı́t (celý seznam najdete v nápovědě přı́kazu nebo na internetu). Bohužel je možné, že v české verzi Windows se u filtrů setkáte s problémy. C 4.3 SPRÁVA PROCESŮ 120 4. Spust’te některý jednoduchý program (Poznámkový blok, Kalkulačku apod.). Pomocı́ přı́kazu tasklist si prohlédněte vlastnosti této úlohy a pak ji ukončete přı́kazem taskkill. 4.3.3 Vztahy mezi procesy Procesy bývajı́ ve většině operačnı́ch systémů zařazeny ve stromové struktuře podle vztahu rodič– potomek (potomek je proces, který byl spuštěn rodičovským procesem). Každý proces má přiděleno své identifikačnı́ čı́slo PID (Process ID) a zná také PID svého rodiče (PPID, Parent PID). Windows XP: Windows 98: Obrázek 4.9: Process Explorer ve Windows XP a 98 P 4.3 SPRÁVA PROCESŮ 121 Podobně to funguje i ve Windows. Pokud však už rodičovský proces neexistuje (ukončil svou činnost) a potomci pořád ještě existujı́, jsou tito potomci „zarovnáni“ doleva, tedy už nemajı́ žádného rodiče. Tı́m se pojetı́ struktury procesů lišı́ od unixových systémů, ve Windows mohou existovat i procesy bez rodiče (rodič byl ukončen). Na obrázku 4.9 (v hornı́ části pro Windows XP) vidı́me takto zarovnaný proces explorer.exe. Pokud se podı́váme na vlastnosti (Properties v kontextovém menu) tohoto procesu, zjistı́me, že údaj Rodičovský proces je nastaven na „<Non-existent process>(936)“ (neexistujı́cı́ proces, čı́slo v závorce znamená PPID před ukončenı́m rodiče). Přı́klad 4.5 Vyzkoušı́me „ztrácenı́“ rodičů. Postupně provedeme tyto kroky: • Spustı́me Process Explorer, v něm budeme sledovat vztahy mezi procesy. Zavřeme všechna okna Přı́kazového řádku, která momentálně máme spuštěna, aby nás nemátla. • Do Start ï Spustit zadáme runas /user:uživatel cmd (zadejte své uživatelské jméno). • Budeme dotázáni na heslo, ale než ho zadáme, podı́váme se do Process Exploreru. Měl by se tam objevit řádek procesu runas.exe. Zjistı́me jeho předka – explorer.exe (to lze zjistit ve vlastnostech procesu na kartě Image). • Až ted’ zadáme heslo a potvrdı́me. Co se stalo v Process Exploreru? Řádek runas.exe zmizel, ale zato se objevil řádek cmd.exe (pravděpodobně v hnědé barvě), a to pod procesem svchost.exe spouštěným s řetězcem -k netsvcs. Proč? Protože při spouštěnı́ programu došlo k autorizaci. Podle očekávánı́ je rodičem nového procesu onen proces svchost.exe. V hlavnı́m menu Process Exploreru, položce Options ï Configure Highlighting zjistı́me, že hnědá barva řádku znamená úlohu, tedy nic nebezpečného. Ve vlastnostech procesu zjistı́me, že je navı́c jedna záložka, která u většiny ostatnı́ch procesů nenı́ – Jobs (Úlohy). • V okně přı́kazového řádku, který jsme takto spustili, zadáme přı́kaz cmd (nebo cmd.exe). Zřejmě zůstaneme v tomtéž okně (pravděpodobně nevznikne nové okno), ale v Process Exploreru se objevı́ nový proces – potomek původnı́ho procesu cmd. • Ted’ v přı́kazovém řádku spustı́me dalšı́ program – zadáme přı́kaz notepad. Měl by se spustit Poznámkový blok. Podı́váme se do Process Explorera, kam byl zařazen. Můžeme si ověřit u všech třı́ procesů, že v jejich vlastnostech má karta Jobs stejný obsah. • V Process Exploreru klepneme pravým tlačı́tkem na nejvrchnějšı́ proces cmd.exe (tj. prvnı́, který jsme spustili, je zarovnaný nejvı́c k levému okraji) a v kontextovém menu zvolı́me Kill process. Touto volbou proces násilně ukončı́me (jsme dotázáni, jestli to myslı́me vážně, tedy potvrdı́me, že to opravdu myslı́me vážně). Odstranili jsme hlavnı́ho rodiče celé úlohy (skupiny procesů). Co se stalo? V Process Exploreru ted’ najdeme oba zbývajı́cı́ procesy dole. • Ověřı́me rodiče procesu. Zobrazı́me vlastnosti zbylého procesu cmd.exe, karta Image. Údaj o rodiči bývá aktualizován s velkým zpožděnı́m, takže pokud tam je uveden již ukončený proces, stačı́ uzavřı́t a znovu spustit Process Explorer. Správně by mı́sto údaje o rodičovském procesu mělo být <Non-existent Process>(2628), čı́slo zřejmě bude na vašem počı́tači jiné. Na obrázku 4.10 na straně 122 je pozice vytvořených procesů ve struktuře, a to nahoře před ukončenı́m prvnı́ho procesu cmd a dole po jeho ukončenı́. 4.3 SPRÁVA PROCESŮ 122 Obrázek 4.10: Vztahy mezi procesy PID se použı́vá pouze ve Windows řady NT. Ve Windows s DOS jádrem (včetně Windows 98) nic takového neexistuje (což komplikuje práci programátorům). Na obrázku 4.9 (ve spodnı́ části pro Windows 98) si všimněte ve sloupci s PID procesu poněkud dlouhého údaje – mı́sto PID (které neexistuje) se zobrazuje hodnota manipulátoru (handle) hlavnı́ho okna. 4.3.4 Priority procesů Ve Windows se úrovně priorit (celkem 32) dělı́ na dvě části. Úrovně 1–15 jsou dynamické pro běžné procesy, úrovně 16–31 jsou pro procesy reálného času: • 0 – systémová úroveň, použı́vá se pro vlákno nulové stránky (to je pomocný mechanismus probı́hajı́cı́ při uvolňovánı́ stránek ve fyzické paměti) • 1 – dynamická nečinná (Idle) • kolem 4 – Nečinná (Lowest) • kolem 6 – Nižšı́ než normálnı́ (Below-normal) • kolem 8 – Normálnı́ (Normal) • kolem 10 – Vyššı́ než normálnı́ (Above-normal) • kolem 13 (max. 15) – Vysoká priorita (Highest) • 16 – nečinná reálného času • kolem 24 – Reálného času (Time-critical) • 31 – časově kritická reálného času Obvyklé hodnoty priorit jsou následujı́cı́: 1. Pro uživatelské procesy je obvyklá priorita 8, normálnı́. 2. Pro systémové procesy je obvyklá priorita: • 9 – Proces řı́zenı́ služeb SCM (services.exe), proces zabezpečenı́ (lsass.exe) • 11 – napřı́klad Správce relacı́ (smss.exe) • 13 – většina systémových procesů spouštěných ještě před přihlášenı́m kteréhokoliv uživatele, včetně hlavnı́ho Podsystému Win32 (csrss.exe) nebo procesu přihlášenı́ uživatele (winogon.exe) • 8 – ostatnı́ systémové procesy, obvykle ty, které se spouštějı́ po přihlášenı́ uživatele, a také služby P 4.3 SPRÁVA PROCESŮ 123 Prioritu procesu můžeme zjistit v těchto nástrojı́ch: 1. Správce úloh (Task Manager) – na kartě Procesy je seznam procesů, sloupec Základnı́ priorita (pokud nenı́ tento sloupec zobrazen, v menu zvolı́me Zobrazit ï Vybrat sloupce, zatrhneme přı́slušnou položku) – je zde pouze slovnı́ určenı́ priority, $ 2. Process Explorer – zobrazuje také čı́selnou hodnotu priority, na obrázku 4.9 ji vidı́me ve sloupci Priority (v okně Select Columns na záložce Process Performance, položka Base Priority). V obou těchto nástrojı́ch můžeme změnit prioritu procesu (kontextové menu), ale pouze mezi „slovnı́mi“ úrovněmi, napřı́klad „Normálnı́“ (Normal), „Vysoká“ (High), „Nı́zká“ (Low) apod. (v kontextovém menu procesu). Ve skutečnosti rozlišujeme výchozı́ a dynamickou čı́selnou prioritu procesu. Výchozı́ priorita je nastavena při startu procesu a obvykle se už neměnı́. Dynamická (momentálnı́) priorita se ve své hodnotě pohybuje kolem výchozı́ priority (plus mı́nus několik bodů) a použı́vá se k dynamickému řešenı́ přı́lišného zvýhodněnı́ nebo naopak znevýhodněnı́ procesu při jeho běhu (napřı́klad když proces vyčerpá hodnotu času, po který mohl využı́vat procesor při vyššı́ prioritě, jeho priorita je snı́žena, dále se měnı́ priority při práci s I/O prostředky). Výchozı́ prioritu procesu při jeho spuštěnı́ můžeme určit při spuštěnı́ z přı́kazového řádku (přı́padně ze skriptu) pomocı́ přı́kazu START (který už známe), napřı́klad pokud chceme spustit aplikaci Poznámkový blok s nižšı́ výchozı́ prioritou, zadáme P $ start /LOW notepad.exe Úkoly 1. Spust’te Poznámkový blok s nižšı́ prioritou tak, jak bylo výše popsáno, a pak v programu Process Explorer zjistěte čı́selnou hodnotu priority tohoto procesu. C 2. V Process Exploreru nebo Správci úloh snižte prioritu procesu Poznámkového bloku o jeden „slovnı́“ stupeň. V Process Exploreru se pak podı́vejte na čı́selné vyjádřenı́ výchozı́ priority (mı́sto 8 by mělo být 6). 3. V Process Exploreru seřad’te procesy podle priorit (stačı́ klepnout na záhlavı́ sloupce s prioritami) a zkontrolujte, které procesy majı́ nejvyššı́ prioritu. 4.3.5 Plánovánı́ Spouštěnı́ procesů můžeme plánovat v grafickém režimu v nástroji Naplánované úlohy (soubor mstask.exe). Ve skutečnosti jde o interaktivnı́ službu (je napojena na stanici oken WinSta0), jejı́m rozhranı́m je právě uvedený nástroj. V prostředı́ Přı́kazového řádku (a ve skriptu) použı́váme pro plánovánı́ spouštěnı́ programů přı́kaz AT (od verze Windows 2000). Tento přı́kaz vyžaduje spuštěnou službu plánovánı́ procesů. Přı́kaz umožňuje naplánovat přı́kazy jednorázově či pravidelně na určité dny v měsı́ci. Naplánovaný přı́kaz zı́ská identifikačnı́ čı́slo, které použijeme, když chceme naplánovánı́ zrušit. AT (bez parametrů) vypı́še seznam naplánovaných přı́kazů, a to včetně jejich identifikačnı́ch čı́sel $ $ 4.3 SPRÁVA PROCESŮ 124 AT 6:00 zalohuj.exe v 6:00 ráno (přı́štı́ho dne, pokud dnes je už po této hodině) se spustı́ soubor zalohuj.exe AT 16:00 /every:1 make_report.exe každý měcı́c prvnı́ho v 16:00 spustı́ program make_report.exe každý pátek v 5 odpoledne se spustı́ zadaný program (v některých verzı́ch se použı́vá anglické značenı́ dnů v týdnu, to zjistı́me v nápovědě) AT 17:00 /every:pá zalohuj.exe AT \\počı́tač 6:00 zalohuj.exe v 6:00 ráno spustı́ zadaný přı́kaz na daném počı́tači (vzdá- leně) pokud chceme naplánovat spuštěnı́ něčeho jiného než jednoduchého exe souboru bez parametrů, musı́me použı́t přı́kaz cmd /c (to znamená, že se zadaný přı́kaz spustı́ v nově vytvořeném přı́kazovém řádku, ale hned po provedenı́ přı́kazu se přı́kazový řádek uzavře; když chceme, aby okno přı́kazového řádku zůstalo, použijeme mı́sto /c přepı́nač /k) AT 10:30 cmd /c ”net statistics server > report.txt” AT 3 /delete zrušı́ naplánovánı́ přı́kazu s daným čı́slem Přı́klad 4.6 Ukážeme si postup při plánovánı́ spouštěnı́ přı́kazů. AT 6:00 zalohuj.exe vytvořı́me prvnı́ plánovánı́, a to jednorázové dalšı́ plánovánı́ se má provádět každý měsı́c, a to v zadaných dnech (prvnı́, osmý, atd. den měsı́ce) AT 10:00 /every:1,8,17,26 report.exe třetı́ naplánovánı́ znamená spuštěnı́ přı́kazu pro rychlou kontrolu disku, a to každé pondělı́ a středu (všimněte si přepı́nače u přı́kazu cmd) AT 17:30 /every:po,st cmd /k chkdsk AT vypı́šeme všechny naplánované přı́kazy, výstup: ID stavu Den Cas Přı́kazový řádek ----------------------------------------------------------------1 Zı́tra 6:00 AM zalohuj.exe 2 Každý den 1 8 17 26 10:00 AM report.exe 3 Každý den Po St 17:30 PM cmd /k chkdsk M Takto zobrazı́me naplánované přı́kazy na tomto počı́tači. Kdybychom chtěli zobrazit plán z jiného počı́tače (třeba na zde oblı́beném počı́tači účetnı́ho), použili bychom přı́kaz AT \\ucetni AT 2 /delete odstranı́me druhou položku, prvnı́ a třetı́ zůstanou naplánovány Komplexnějšı́m přı́kazem (ve Windows od verze XP/Server 2003) je přı́kaz schtasks (Scheduled Tasks, naplánované úlohy). Jak název napovı́dá, nepracujeme pouze s přı́kazy a programy, ale s úlohami. Pomocı́ tohoto nástroje můžeme (nejen) plánovat spouštěnı́ zadaných úloh, procesů a přı́kazů bud’ jednorázově nebo pravidelně v zadaný čas a jakkoliv řı́dit jejich naplánovánı́, a to i na vzdáleném počı́tači. naplánujeme spouštěnı́ úlohy denně vždy v 16 hodin, úloha se jmenuje Název a je spuštěna ze zadaného souboru schtasks /CREATE /SC daily /ST 16:00 /TN Název /TR soubor.exe zobrazı́me nápovědu k podpřı́kazu CREATE (to můžeme provést s kterýmkoliv podpřı́kazem) schtasks /CREATE /? $ 4.3 SPRÁVA PROCESŮ schtasks /QUERY 125 zı́skáme tabulku všech naplánovaných úloh na našem počı́tači schtasks /QUERY /S počı́tač totéž, ale na zadaném počı́tači výpis nebude ve formě tabulky, ale jako seznam (oproti tabulce zı́skáme některé informace navı́c – způsob spouštěnı́ a název hostitelského počı́tače) schtasks /QUERY /FO list schtasks /QUERY /TN Název /FO list vypı́še se informace o zadané úloze schtasks /CHANGE /TN ”Antivirová kontrola” /TR C:\antivir.exe zadaná úlo- ha už exis- tuje, ale chceme ji pozměnit – změnı́me program, který se má v dané úloze spustit zadaná úloha bude spuštěna okamžitě, bez ohledu na nastavenı́ plánovánı́ úloh (mohli bychom spustit přı́mo spustitelný soubor, ale zde můžeme využı́t vytvořené definice úloh) schtasks /RUN /TN ”Antivirová kontrola” schtasks /END /TN ”Antivirová kontrola” okamžité ukončenı́ běžı́cı́ úlohy (ale napláno- vaná zůstane) schtasks /DELETE /TN Úloha /S počı́tač odstranı́ naplánovánı́ úlohy na zadaném počı́tači Přı́klad 4.7 Vytvořı́me novou úlohu nejdřı́v tak, aby při jejı́m spouštěnı́m musel uživatel zadávat heslo (pokud se jedná o úlohu s potřebou vyššı́ch oprávněnı́), a pak podobnou úlohu tak, aby uživatel heslo zadávat nemusel (úloha poběžı́ na pozadı́). schtasks /CREATE /S ucetni /SC daily /ST 16:00 /TN Monitorovani /TR c:\prog\monitoring.exe vytvořı́me novou naplánovanou úlohu s názvem Monitorovani, která se má provést na počı́tači s názvem ucetni, a to denně vždy v 16 hodin, uživatel bude pokaždé dotázán na heslo. Zı́skáme hlášenı́: Úspěch: Naplánovaná úloha Monitorovana byla úspěšně vytvořena. schtasks /QUERY /S ucetni zobrazı́ se tabulka naplánovaných úloh na zadaném počı́tači, něco podobného: ... Složka: \ Název úkolu Čas přı́štı́ho spuštěnı́ Stav ========================================================================= Monitorovani 10.2.2010 16:00:00 Připraveno ... Složka: \Microsoft\Windows\Defrag Název úkolu Čas přı́štı́ho spuštěnı́ Stav ========================================================================= ScheduledDefrag 10.2.2010 1:00:00 Připraveno Složka: \Microsoft\Windows\DiskDiagnostic Název úkolu Čas přı́štı́ho spuštěnı́ Stav ========================================================================= Microsoft-Windows-DiskDiagnosticDataColl 21.2.2010 1:00:00 Připraveno Microsoft-Windows-DiskDiagnosticResolver Zakázáno ... M 4.3 SPRÁVA PROCESŮ 126 zobrazı́ informaci o zadané úloze, a to na počı́tači účetnı́ho a navı́c ve formátu „seznam“ (výchozı́ formát je tabulka, kterou jsme viděli v předchozı́m výpisu). Výsledek: schtasks /query /S ucetni /FO list /tn Monitorovani Složka: \ Název hostitele: Název úkolu: Čas přı́štı́ho spuštěnı́: Stav: Režim přihlášenı́: M UCETNI \Monitorovani 10.2.2010 16:00:00 Připraveno Pouze interaktivně schtasks /CREATE /SC daily /ST 16:00 /RU uživatel /RP /TN Monitorovani2 /TR c:\prog\monitoring.exe vytvořı́me úlohu Monitorovani2 ten- tokrát na lokálnı́m počı́tači spouštěnou ve stejném čase jako předchozı́ (také má stejný spustitelný soubor), ale úloha bude spouštěna s přı́stupovými oprávněnı́mi zadaného uživatele, heslo zadáváme pouze nynı́ (uživatel nenı́ pravidelně obtěžován žádostı́ o heslo, které ani nemusı́ znát) schtasks /query /FO list /tn Monitorovani2 zobrazı́me informaci o zadané úloze ve for- mátu „seznam“. Výsledek: Složka: \ Název hostitele: Název úkolu: Čas přı́štı́ho spuštěnı́: Stav: Režim přihlášenı́: NOTEBOOK \Monitorovani2 10.2.2010 16:00:00 Připraveno Interaktivně nebo na pozadı́ Podrobné informace o přı́kazu schtasks zı́skáme bud’ z nápovědy přı́kazu (běžným způsobem, který známe od jiných přı́kazů) a nebo na adrese http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/ schtasks.mspx?mfr=true Naplánovat se dá také vypnutı́, restart či uspánı́ počı́tače (také vzdáleně) a nebo odhlášenı́ uživatele. K tomuto účelu můžeme použı́t přı́kaz shutdown, který najdeme v různých verzı́ch Windows (kromě variant Home pro Windows do verze XP včetně). shutdown /L odhlášenı́ právě přihlášeného uživatele vypne zadaný počı́tač (parametr /s určuje vypnutı́, dalšı́ parametr umožňuje zadat cı́lový počı́tač) shutdown /s /m \\počı́tač shutdown /r restart shutdown /h hibernace (pouze ve verzı́ch, které hibernaci umožňujı́) shutdown /s /t 5 je nastaven časový limit 5 sekund, po něm se počı́tač automaticky vypne M $ 4.4 KOMUNIKACE MEZI PROCESY 127 Úkoly 1. Naplánujte spuštěnı́ programu kontrola.exe tak, aby se spouštěl každý pátek ve 4 hodiny odpoledne. Pro naplánovánı́ použijte postupně oba přı́kazy (i ten staršı́, který lze použı́t také na Windows 2000). U novějšı́ho přı́kazu nazvěte úlohu Kontrola. 2. Proved’te totéž co v předchozı́m úkolu, ale vzdáleně na počı́tači \\sekretarka. C Pokud nemáte možnost plánovat spouštěnı́ na jiných počı́tačı́ch než na tom, u kterého sedı́te, použijte název svého počı́tače – pamatujete si, jak ho zjistit? 3. Zjistěte, jaké údaje jsou uloženy o naplánovánı́ provedeném v předchozı́ch dvou bodech (tj. zobrazte informace o naplánovaných přı́kazech/úlohách). U přı́kazu schtasks vyzkoušejte tabulkové i seznamové zobrazenı́ naplánované úlohy. 4. Odstraňte naplánovánı́ všech přı́kazů/úloh, které jste vytvořili v předchozı́ch úkolech. 5. Vyzkoušejte své odhlášenı́ pomocı́ přı́kazu, ke konci práce s počı́tačem také restart nebo vypnutı́ pomocı́ přı́kazu. 4.4 4.4.1 Komunikace mezi procesy Schránka Ke schránce (clipboard) máme přı́stup obvykle přes menu různých programů (kopı́rovánı́ apod.), ale také přes aplikaci Prohlı́žeč (sı́t’ové) schránky (soubor clipbrd.exe). Tato aplikace v některých variantách Windows nenı́ standardně nainstalována, ale lze ji doinstalovat z instalačnı́ho CD. Obrázek 4.11: Zkopı́rovaný text (vlevo) a obrázek (vpravo) ve schránce Ve schránce mohou být tatáž data v několika různých formátech. Každý tento formát má své označenı́. Existujı́ standardnı́ formáty, napřı́klad pro jednoduchý text bez formátovánı́ nebo pro obrázek, aplikace si ale mohou vytvářet vlastnı́ formáty. $ 4.4 KOMUNIKACE MEZI PROCESY 128 Úkoly 1. Otevřete aplikaci, přes kterou máte přı́stup ke schránce (Prohlı́žeč sı́t’ové schránky). Dále otevřete Poznámkový blok, cokoliv v něm napište a zkopı́rujte. Sledujte, co se děje v aplikaci schránky (může být otevřeno vı́ce podoken, nás zajı́má podokno „Schránka“). Potom otevřete Malovánı́, cokoliv v něm nakreslete a obrázek zkopı́rujte do schránky ( Ctrl+A , pak Ctrl+C ). Opět se podı́vejte na obsah schránky. C 2. V aplikaci Prohlı́žeč sı́t’ové schránky si vyzkoušejte připojenı́ ke schránce na jiném počı́tači. 4.4.2 DDE DDE (Dynamic Data Exchange, Dynamická výměna dat) je technologie umožňujı́cı́ komunikaci mezi procesy (je ve Windows už od verze 2). Jeden program může žádat data od druhého, aniž by to vyžadovalo zásah uživatele, jde tedy o dynamickou formu sdı́lenı́ dat. Jeden proces (Server) poskytuje data druhému procesu (Klientovi). Oba komunikujı́cı́ procesy (Server i Klient) musı́ být spuštěny. Aplikace takto mohou sdı́let určitý objekt a komunikovat na jednom nebo vı́ce kanálech. P Implementace DDE částečně závisı́ na aplikacı́ch – data se po změně v aplikaci Server v aplikaci Klient aktualizujı́ bud’ ihned nebo až po uloženı́ v aplikaci Server. Aktivita může být na straně Klienta (zjišt’uje u Serveru, zda došlo k nějaké změně na datech) nebo na straně Serveru (informuje Klienta o změně dat, přı́padně tato data Klientovi rovnou posı́lá). Obrázek 4.12: Sdı́lená položka DDE (DDEShare) Práci s DDE nemusı́me nechávat jen na aplikacı́ch, ke sdı́leným položkám DDE je přı́stup také přes aplikaci Sdı́lená položka DDE (spustı́me ji napřı́klad v Start ï Spustit, ddeshare.exe ), rozhranı́ vidı́me na obrázku 4.12. Umožňuje předevšı́m vytvářenı́ DDE vazeb mezi procesy běžı́cı́mi na různých počı́tačı́ch v sı́ti, můžeme zde vytvářet nebo mazat sdı́lené objekty, ale také pracovat $ 4.4 KOMUNIKACE MEZI PROCESY 129 Obrázek 4.13: Vytvořenı́ DDE vazby v OpenOffice.org s přı́stupovými právy k jednotlivým objektům. Aby mohl být tento nástroj použı́ván, musı́ běžet obě výše zmı́něné služby. V kancelářských aplikacı́ch se s DDE setkáme napřı́klad při vkládánı́ odkazů. Na obrázku 4.13 je vkládánı́ přes Vložit jinak, pole s proměnným obsahem závislým na obsahu jedné buňky v tabulkovém editoru, obrázku s DDE vazbou a sekce z jiného dokumentu přes DDE. NetDDE je sı́t’ová varianta DDE (sdı́lenı́ dat pomocı́ DDE po sı́ti). Až do verze XP byla součástı́ Windows, ale od verze Vista již nenı́ podporována. 4.4.3 OLE OLE (Object Linking and Embedding) je technologie, která umožňuje vnořit do objektu vytvářeného jednou aplikacı́ objekt vytvořený jinou aplikacı́ nebo vytvořit propojenı́ k takovému objektu. S OLE objekty jsme se seznámili na straně 82 v sekci o modelu COM. Aplikace, které mohou být zdrojem, se nazývajı́ Servery, cı́le jsou Klienty. Některé aplikace dokážou být obojı́. Narozdı́l od DDE můžeme sdı́let nejen data, ale obecně různé objekty (všechny OLE objekty jsou implementacı́ rozhranı́ IOleObject z modelu COM), a pokud je nutné v „přijı́majı́cı́ “ aplikaci objekt upravit či s nı́m jakkoliv pracovat, nechá tuto činnost na „poskytujı́cı́ “ aplikaci. Typický přı́klad použitı́ je spolupráce internetového prohlı́žeče (takového, který OLE podporuje) a Adobe Readeru. Pokud v internetovém prohlı́žeči klepneme myšı́ na odkaz na PDF soubor, prohlı́žeč vytvořı́ OLE vazbu k Adobe Readeru a ve svém vlastnı́m okně poskytne prostor pro zobrazenı́ PDF souboru, které ve skutečnosti provede Adobe Reader. OLE také hodně využı́vajı́ aplikace v balı́ku P 4.4 KOMUNIKACE MEZI PROCESY 130 Microsoft Office při skládánı́ dokumentů z různých druhů objektů, k témuž účelu je použı́vána v OpenOffice.org. Při vnořenı́ objektu se zı́skaný objekt stává součástı́ vytvářeného dokumentu (obecně souhrnu objektů), vazba je jen nepřı́má (je to pouze vazba na aplikaci, která je OLE serverem). Napřı́klad do dokumentu Wordu vložı́me obrázek vytvořený v aplikaci Malovánı́ (Paintbrush) pomocı́ OLE vazby. V samotném Wordu s tı́mto obrázkem nemůžeme pracovat, ale je zde také odkaz na aplikaci, která dokáže s obrázky pracovat, proto stačı́ poklepat na obrázek a můžeme ho editovat v nově otevřené instanci aplikace Malovánı́. Po poklepánı́ na obrázek se nastartuje OLE server pro tento druh dat (v našem přı́padě aplikace Malovánı́), po ukončenı́ editace (uloženı́) se změny provedou i na klientovi (Word). Jiná možnost pro OLE je propojenı́. Narozdı́l od vloženı́ data ve skutečnosti nejsou součástı́ objektu klienta, ale zůstávajı́ uložena u serveru, u klienta je vytvořena pouze vazba na tato data. V přı́padě prováděnı́ změn objektu na straně serveru se změny projevı́ i na straně klienta. Pokud dokument vytvořený klienem přemı́stı́me, propojený objekt se „ztratı́“, protože zůstal u serverové aplikace. P P Rozdı́l mezi vnořenı́m a propojenı́m je tedy předevšı́m v umı́stěnı́ objektu, se kterým pracujeme. V kancelářských aplikacı́ch se obvykle k OLE dostaneme v nabı́dkách souvisejı́cı́ch s objekty. Napřı́klad v aplikaci OpenOffice.org najdeme Vložit ï Objekt ï OLE objekt a zı́skáme okno (obrázek 4.14), ve kterém vybereme mezi vloženı́m existujı́- Obrázek 4.14: Vloženı́ OLE objektu v OpenOffice.org cı́ho OLE objektu a vytvořenı́m nového. S OLE také můžeme pracovat při vkládánı́ částı́ dokumentů v rámci téhož kancelářského balı́ku (napřı́klad v tabulkovém editoru zkopı́rujeme několik buněk a vložı́me je do textového editoru). Programátoři použı́vajı́ OCX (OLE Control eXtension), což jsou binárně přenosné komponenty obsahujı́cı́ prvky uživatelského rozhranı́ (lze je použı́vat v různých programovacı́ch jazycı́ch), jsou uloženy v souborech s přı́ponou OCX (jde o dynamicky linkované knihovny). Úkoly 1. Projděte si nástroj Sdı́lená položka DDE. $ P C 2. Vyzkoušejte možnosti DDE a OLE vazeb mezi aplikacemi patřı́cı́mi do některého kancelářského balı́ku (MS Office nebo OpenOffice.org). 4.4.4 Zprávy Zpráva může být vytvořena přerušenı́m od nějakého zařı́zenı́ (napřı́klad stiskneme klávesu na klávesnici nebo pohneme myšı́), zprávy si také posı́lajı́ aplikace navzájem, systém aplikacı́m nebo aplikace systému (zprávy jsou adresovány oknům aplikacı́). P 4.4 KOMUNIKACE MEZI PROCESY 131 Zası́lánı́ zpráv oknům je zřejmě nejtypičtějšı́m způsobem komunikace aplikace ve Windows (pokud ovšem aplikace nějaké okno má – běžı́ ve WinSta0). Zprávu aplikaci může zaslat jádro (také napřı́klad zprávu o ukončenı́ aplikace) nebo jakýkoliv proces, který zná handle okna (zpráva vždy souvisı́ s oknem). Každá (téměř) Win32 aplikace má svou vlastnı́ frontu zpráv, což má přı́znivý vliv na stabilitu systému, protože fronta nemůže být blokovaná jinou aplikacı́. K blokovánı́ může dojı́t u fronty zpráv pro Win16 aplikace (majı́ jednu společnou) také z důvodu kooperativnı́ho multitaskingu – aplikace může dostat zaměřenı́ jen tehdy, když je k nı́ směrována nějaká událost, ale pokud aktivnı́ aplikace zamrzne napřı́klad při práci s frontou zpráv, žádná jiná aplikace se ke zprávám nedostane. Na obrázku 4.15 je nákres cesty zprávy k Win32 a Win16 aplikacı́m (DOS aplikace zprávy nepoužı́vajı́). Proces pro zpracování přerušení nová zpráva Win32 aplikace Win32 aplikace ... Win16 aplikace Win16 aplikace ... Obrázek 4.15: Fronty pro zpracovánı́ zpráv ve Windows 9x/ME/NT 4.4.5 Volánı́ procedur Volánı́ procedur jiného procesu je také jedna z možnostı́ komunikace mezi procesy. Jeden proces může vyvolat proceduru jiného procesu s předánı́m skutečných parametrů procedury (přes parametry docházı́ k výměně dat mezi procesy). Ve Windows rozlišujeme • LPC (Local Procedure Call – Volánı́ lokálnı́ procedury) pro volánı́ procedury procesu běžı́cı́ho na stejném počı́tači, a to v režimu jádra (to znamená, že nenı́ implementováno v API, uživatelské procesy takto nemohou komunikovat), sloužı́ napřı́klad ke komunikaci procesu winlogon a dalšı́ch s podsystémem LSASS, • RPC (Remote Procedure Call – Vzdálené volánı́ procedury) pro proces běžı́cı́ na některém stroji v mı́stnı́ sı́ti (ale je možné takto komunikovat i v rámci jednoho počı́tače), je nutné mı́t spuštěnou službu Vzdálené volánı́ procedur (Remote Procedure Call), je realizována přes API a tedy dostupná všem procesům, • APC (Asynchronous Procedure Call – Asynchronnı́ volánı́ procedury) je speciálnı́ mechanismus, který umožňuje využı́t dobu čekánı́ procesu (vlákna) na událost (napřı́klad čeká na I/O); P 4.5 PROGRAMOVÉ ROZHRANÍ 132 čekajı́cı́ vlákno může takto povolit použitı́ svého kontextu a času jinému vláknu (typicky vláknu jádra, které provádı́ instrukce na žádost „vlastnı́ka“), pomocı́ APC se provádı́ také ukončenı́ procesů, • DPC (Deferred Procedure Call – Zpožděné volánı́ procedury) se většinou použı́vá jako dodatečná obsluha některého přerušenı́; „spěchajı́cı́ “ část obsluhy přerušenı́ se provede hned po zjištěnı́ přerušenı́, zbylá část, jejı́ž zpracovánı́ už tolik nespěchá, se provede jako DPC, aby nebyly zbytečně zdržovány dalšı́ procesy. Pokud známe název procedury v knihovně, můžeme ji zavolat také „mimo programový kód“, a to s použitı́m programu rundll32.exe (ve staršı́ch Windows rundll.exe), s touto možnostı́ se hlouběji seznámı́me na straně 134. 4.5 Programové rozhranı́ 4.5.1 Dynamicky linkované knihovny Dynamicky linkované knihovny (DLL) použı́vajı́ předevšı́m programátoři. Aby bylo možné DLL knihovnu použı́vat v aplikaci, je nutné ji nejdřı́v načı́st (zavést), pak je knihovna namapována do adresového prostoru aplikace a jejı́ funkce a objekty můžeme volně použı́vat (jen musı́ být deklarovány jako externı́). Typické přı́pony souborů dynamicky linkovaných knihoven jsou DLL, TTF (True Type Font), FON (staré rastrové fonty), NLS (National Language Services, ovladač pro jazyk), OCX (ActiveX Server). Jako dynamickou knihovnu lze použı́t také EXE soubor nebo ovladač. Obrázek 4.16: Seznam dynamických knihoven použı́vaných procesem v Process Exploreru Pokud tutéž DLL knihovnu použı́vá vı́ce aplikacı́, v 32bitových Windows (řada NT a dále Windows 9x/ME) je kód funkcı́ knihovny sdı́len a pouze namapován do adresového prostoru P 4.5 PROGRAMOVÉ ROZHRANÍ 133 procesu (je v paměti ve skutečnosti jen jednou), ale data (objekty) má každá aplikace ve vlastnı́ kopii (kopie se vytvořı́ v okamžiku, kdy se proces pokusı́ do knihovny zapisovat), v 16bitových Windows byla sdı́lena i data (to umožňovalo jednoduchou komunikaci mezi procesy). Způsob mapovánı́ knihoven v NT (vlatnı́ kopie až při pokusu o zápis) se nazývá copy-on-write (je také popsán v sekci o správě paměti na straně 163). Mnohé programovacı́ jazyky nabı́zejı́ možnost ukládat do DLL i vlastnı́ typy komponent a jiných objektů charakteristických pro konkrétnı́ programovacı́ jazyk. Pokud však chceme, aby bylo možné tyto knihovny použı́vat i aplikacı́ch psaných v jiném programovacı́m jazyce, musı́me k těmto komponentám a objektům vytvořit rozhranı́, kterému budou rozumět již všechny aplikace. P DLL knihovny majı́ funkce internı́ (mohou být volány pouze uvnitř DLL) a exportované (mohou být volány z jakékoliv aplikace). Exportované funkce si můžeme prohlédnout některým programem dodávaným obvykle s programovacı́m jazykem (firma Borland napřı́klad dodává program tdump pracujı́cı́ na Přı́kazovém řádku, je potřeba věnovat pozornost přepı́načům tohoto programu). Seznam DLL knihoven, které jsou nalinkovány v konkrétnı́m procesu, zı́skáme napřı́klad v programu Process Explorer (viz obrázek 4.16), když v menu zvolı́me View ï Show Lower Pane, hned následujı́cı́ položka určuje, zda se zobrazı́ DLL knihovny nebo manipulátory (handle) procesu. Knihovna GINA (Graphical Identification and Authentication) je dynamicky linkovaná knihovna, ve které je implementováno přihlašovánı́ uživatelů v grafickém režimu. Použitı́ této knihovny je vázáno na SAS (Secure Attention Sequence, zabezpečenou sekvenci upozorněnı́), o které jsme slyšeli už v minulém semestru – jde vpodstatě o klávesovou zkratku Ctrl+Alt+Del . $ P Standardně je GINA v souboru msgina.dll, ale tato knihovna může být nahrazena jinou GINA knihovnou. Obvykle se tak děje při instalaci sı́t’ové nástavby (Novell NetWare) nebo při použitı́ zařı́zenı́ v kiosk módu (kiosk je omezený režim činnosti systému, ve kterém jsou silně omezeny možnosti zásahu uživatele do systému, známe napřı́klad kiosky na nádražı́ch, v administrativnı́ch budovách a také v mnoha školách). Od verze Vista lze GINA knihovnu měnit jen při instalaci systému. Všimněte si, že GINA knihovna je uvedena na výpisu přı́kazu handle na straně 74. Kontrola systémových souborů včetně systémových dynamicky linkovaných knihoven se provádı́ přı́kazem SFC. Zkontroluje, zda nedošlo k pozměněnı́ či poškozenı́ systémových souborů (s přı́ponou SYS, DLL, EXE, OCX, FON, TTF), použı́vá kontrolu digitálnı́ho podpisu. sfc /scannow $ okamžitě zkontroluje všechny systémové soubory pravidelně při každém spuštěnı́ systému zkontroluje systémové soubory, navı́c nebude uživatele informovat o přı́padném nahrazovánı́ (tichý režim, quiet) sfc /scanboot /quiet provede okamžitou jednorázovou kontrolu; použijeme, pokud máme podezřenı́, že některý systémový soubor nenı́ zcela vpořádku sfc /scanonce Registrace: aby mohla být dynamicky linkovaná knihovna obsahujı́cı́ COM komponenty (také ActiveX prvky) použı́vána, musı́ být v systému registrována. K registraci docházı́ obvykle během instalace aplikace, která knihovnu do systému přinášı́, a to přı́kazem regsvr32. Podobně při odinstalaci bývá odregistrována. Registrace: regsvr32 %ProgramFiles%\aplikace\knihovna.dll $ 4.5 PROGRAMOVÉ ROZHRANÍ 134 Deregistrace (uvolněnı́ knihovny): regsvr32 /U %ProgramFiles%\aplikace\knihovna.dll Opětovná registrace knihovny někdy může vyřešit nefunkčnost služby nebo programu. Někdy se stává, že služba Windows Update přestane fungovat a řešenı́m je opětovná registrace knihoven, které služba využı́vá, popřı́padě naopak po aktualizaci systému či některé aplikace může být nutné provést opětovnou registraci některých knihoven. Rundll32: Program Rundll32.exe známe už z předchozı́ho semestru. Vı́me, že pomocı́ tohoto programu lze z Přı́kazového řádku (nebo ze skriptu) volat procedury uložené v některé dynamicky linkované knihovně (ostatně, zamyslete se nad názvem programu). Nelze volat jakoukoliv proceduru, volané procedury musı́ být k tomu účelu naprogramovány.5 $ Tento program můžeme použı́vat i vzdáleně. Napřı́klad: rundll32 printui.dll,PrintUIEntry /? zı́skáme nápovědu k proceduře s názvem PrintUIEntry, která je uložena v knihovně printUI.dll (pozor, v názvu procedury je nutné zachovávat velká a malá pı́smena, názvy procedur jsou case-sensitive); výstupem tohoto přı́kazu je okno (ano, opravdu okno) s obsahem (zde zkráceným): Použitı́: rundll32 printui.dll,PrintUIEntry [parametry] [@soubor_přı́kazů] /a[soubor] Název binárnı́ho souboru /b[název] Název základnı́ tiskárny /c[název] Název UNC počı́tače, jde-li o˜přı́kaz pro vzdálený počı́tač /dl Odstranit mı́stnı́ tiskárnu /dn Odstranit připojenı́ mı́stnı́ tiskárny /dd Odstranit ovladač tiskárny ... M (součástı́ výpisu jsou také přı́klady). Tı́mto přı́kazem (a vhodnými parametry, kterých je opravdu hodně) můžeme dělat se vzdálenou tiskárnou téměř cokoliv, včetně nastavenı́ popisovače zabezpečenı́, instalace a odinstalace ovladače, atd. rundll32 printui.dll,PrintUIEntry /p /n\\počı́tač\tiskárna vypı́še se informace o za- dané tiskárně, přechod do úsporného režimu (tento přı́kaz můžeme napřı́klad uložit do zástupce na pracovnı́ plochu, pak stačı́ poklepat na ikonu zástupce a okamžitě přejdeme do úsporného režimu), rundll32 PowrProf.dll,SetSuspendState způsobı́ odpojenı́ počı́tače od internetu (to je ideálnı́ pro vytvořenı́ zástupce na ploše nebo naplánovánı́ spuštěnı́ úlohy na zadanou dobu), rundll32 iedkcs32.dll,CloseRASConnections způsobı́ okamžité provedenı́ procesů, které čekajı́ na událost OnIdle, tedy na dobu, kdy žádný jiný proces nemá přiřazen procesor (týká se to předevšı́m procesů, které provádějı́ pravidelnou údržbu Windows). rundll32 advapi32.dll,ProcessIdleTasks Možnost volat procedury systémových knihoven nenı́ moc dobře zdokumentována. Předevšı́m je problém najı́t seznamy procedur, které lze takto volat v jednotlivých knihovnách. Jeden ze způsobů, jak tyto informace najı́t, je zadat do vyhledávacı́ho řádku Googlu rundll32 knihovna site:microsoft.com (doplnı́me název knihovny), napřı́klad rundll32 shell32.dll site:microsoft.com . 4.5 PROGRAMOVÉ ROZHRANÍ 135 Úkoly 1. Pokud máte k dispozici Process Explorer (pokud nemáte, stáhněte ho z webu), spust’te ho, nastavte zobrazenı́ spodnı́ho podokna se seznamem knihoven procesu a prohlédněte si knihovny (i jejich vlastnosti) pro spuštěné aplikace. K vlastnostem knihovny se dostanete poklepánı́m na název knihovny. C Všimněte si řádku Mapping (na prvnı́ záložce vlastnostı́ dynamické knihovny) – u běžné dynamické knihovny je zde Image, u datové knihovny (třeba TTF nebo NLS) tu najdeme Data. Oba typy knihoven najdete napřı́klad na řádku csrss.exe nebo pokud máte spuštěný Poznámkový blok, u notepad.exe. 2. Zjistěte (přı́kazem pro okamžitou kontrolu), zda všechny systémové soubory včetně dynamicky linkovaných knihoven jsou vpořádku. 3. Zjistěte, které knihovny GINA jsou na vašem počı́tači dostupné (jsou vždy ve složce System32 a jejich název bývá xxgina.dll, kde xx jsou odlišujı́cı́ pı́smena). Může být dostupná i knihovna GINA pro rychlé přepı́nánı́ uživatelů. 4. Pokuste se najı́t alespoň několik procedur knihovny user32.dll, které lze volat přes rundll32. 4.5.2 Lokálnı́ verze knihoven DLL Hell (Peklo DLL) je stav, kdy některá aplikace při své instalaci pozměnı́ (nahradı́) některou DLL knihovnu, ale tato změna začne vadit jiným aplikacı́m, které ke svému běhu vyžadujı́ dřı́vějšı́ verzi pozměněné knihovny. Tyto přı́pady se stávaly dokonce i při aktualizaci systémových knihoven přes službu Windows Update. Tento problém je v současné době řešen (u systémových knihoven) dvěma opatřenı́mi: 1. verze knihoven jsou pravidelně kontrolovány a při zjištěné modifikaci nahrazovány originálnı́mi verzemi (program SFC a složka DLLCache), toto opatřenı́ je určeno pro systémové knihovny, 2. zavedenı́ tzv. lokálnı́ch verzı́ (soukromých kopiı́) knihoven, toto opatřenı́ je určeno pro jiné než systémové knihovny. Lokálnı́ verze knihoven si může soukromě vytvářet každá aplikace ve svém instalačnı́m adresáři, ale je možné vytvářet lokálnı́ verze určené ke sdı́lenı́. Lokálnı́ verze ke sdı́lenı́ jsou ve složce ...\Windows\WinSxs. V této složce najdeme • podsložky obsahujı́cı́ soubory s knihovnami, názvy podsložek obsahujı́ identifikaci názvu originálnı́ knihovny, hardwarovou architekturu, verzi a přı́padně dalšı́ informace (v jedné podsložce může být i vı́c než jedna knihovna), • podsložka Manifest obsahuje pro každou podsložku z předchozı́ho bodu dva soubory (xxx představuje název podsložky z předchozı́ho bodu): – xxx.manifest – XML soubor (dá se otevřı́t napřı́klad v Poznámkovém bloku) s podrobnou informacı́ o knihovnách, které jsou zde uloženy, 5 Programovánı́ procedur v knihovnách tak, aby mohly být volány přes Rundll32, je stručně popsáno v http://support.microsoft.com/kb/164787. 4.5 PROGRAMOVÉ ROZHRANÍ 136 – xxx.cab – katalogový soubor; katalogové soubory s přı́ponou CAT obsahujı́ bezpečnostnı́ informace, předevšı́m digitálnı́ podpis (soubor otevřeme poklepánı́m, k digitálnı́mu podpisu se dostaneme stisknutı́m tlačı́tka Zobrazit podpis), • Policies – pro některé položky z prvnı́ho bodu tohoto seznamu je zde podsložka (ne nutně stejně pojmenovaná) obsahujı́cı́ jednu nebo vı́ce dvojic souborů – ve dvojici jeden soubor katalogu CAT a soubor xxx.policy, kde xxx je označenı́ verze knihovny (jedná se o XML soubor s nastavenı́m zásad použı́vánı́ knihovny). Ve výše uvedených souborech se setkáme s pojmem assembly. Assembly je sestava zahrnujı́cı́ sdı́lené prostředky (jednu nebo vı́ce knihoven), manifest a přı́padně katalogový soubor. Úkoly Prohlédněte si složku s lokálnı́mi verzemi knihoven určenými ke sdı́lenı́. Vyberte si kteroukoliv assembly a zobrazte jejı́ katalogový soubor a manifest. 4.5.3 C Win API Programové rozhranı́ Windows je realizováno přes Win API (Applications Programming Interface), což je souhrn prostředků a procedur (funkcı́), které mohou programy použı́vat. Win API je uloženo v dynamicky linkovaných knihovnách – DLL, některé EXE, TIFF, . . . , napřı́klad funkce pro vykreslenı́ určitého dialogového okna se zadaným textem a tlačı́tky. API je vlastně přeložený, binárnı́ kód, tentýž jako u spustitelných (EXE) souborů, dynamicky linkované knihovny majı́ strukturu hodně podobné struktuře EXE souborů. Existuje vı́c verzı́ API: • Win16 API je pro 16bitové aplikace (většina kódu je uložena v knihovnách kernel.exe, krnl286.exe, krnl386.exe, user.exe, shell.dll a gdi.exe), • Win32 API je pro 32bitové aplikace (většina kódu je v knihovnách kernel32.dll, advapi32.dll, user32.dll, gdi32.dll, comctl32.dll, comdlg32.dll, shell32.dll a dalšı́ch), přı́mo jsou použı́vány modulem csrss.exe (část podsystému Win32 pro uživatelský režim) a win32k.sys (pro režim jádra). • Win64 API plnı́ podobnou úlohu jako Win32, ale na 64bitových systémech, je uloženo ve stejných knihovnách. API pro komunikaci s jádrem je ntdll.dll. Nenativnı́ aplikace využı́vajı́ API ze svého podsystému či virtuálnı́ho stroje. K překladu API docházı́ také při běhu 32bitové aplikace na 64bitovém systému, použı́vá se podsystém WoW64 (což znamená Windows 32bit on Windows 64bit). Ve staršı́ch 32bitových Windows se použı́valo API pro grafické operace Win32 GDI, od Windows 2000 je to Win32 GDI+. Je objektově orientované, bližšı́ způsobu programovánı́ v C++. Implementacı́ Win API je také napřı́klad podsystém Wine použı́vaný v unixových systémech pro běh Win aplikacı́, dalšı́ zajı́mavá implementace je napřı́klad ReactOS. P 4.5 PROGRAMOVÉ ROZHRANÍ 137 Jinak jde o pojem poměrně hodně použı́vaný, API jednoduše znamená programové rozhranı́ (k čemukoliv). Své API majı́ také grafické a zvukové karty. Můžeme se napřı́klad setkat s pojmem DirectX API nebo OpenGL API. Podrobné informace o Win API můžeme zı́skat napřı́klad na webu MSDN Library http://msdn. microsoft.com/en-us/library/aa383749%28VS.85%29.aspx. Také existuje hodně tutoriálů pro programovánı́ ve Win API, napřı́klad na internetu najdeme seznam tutoriálů na http://pepinator.tym.cz/tutorials/winapi/tutorials winapi.php. Úkoly 1. Na stránce http://www.builder.cz/art/cpp/winapi1.html najděte API funkci, kterou lze zobrazit jednoduché dialogové okno s nápisem. C 2. Najděte domovskou stránku projektu ReactOS a zjistěte, o jaký systém se vlastně jedná. 3. Zjistěte, ve které složce se nacházejı́ soubory, které byly v této sekci zmı́něny. 4.5.4 Běh aplikacı́ Už v předchozı́m semestru jsme se seznámili s členěnı́m operačnı́ch systémů na 8bitové, 16bitové, 32bitové, 64bitové, atd. Proto vı́me, že přı́slušné čı́slo závisı́ předevšı́m na velikosti pamět’ového mı́sta, které je potřeba pro uloženı́ jedné adresy (to znamená, že napřı́klad 32bitový systém potřebuje na uloženı́ adresy mı́sta v paměti, třeba umı́stěnı́ proměnné, 32 bitů, což jsou 4 B). Od toho se odvı́jı́ napřı́klad • velikost datového typu pro ukazatel (pointer), protože do pointeru se ukládá adresa, • často také velikost datového typu integer (celé čı́slo, int), protože se také často použı́vá při manipulacı́ch s adresami, • typ knihoven – napřı́klad v 32bitovém systému se použı́vajı́ 32bitové knihovny, kde celá čı́sla a pointery zabı́rajı́ 32 bitů. MS-DOS. V MS-DOSu existoval pouze jeden typ „klasických“ programů – EXE nebo COM soubory s 8bitovou strukturou, které se coby procesy po svém spuštěnı́ stávaly defacto „majitelem“ všech zdrojů a podle toho se také chovaly. Měly absolutnı́ přı́stup ke všem zdrojům (pamět’, procesor, periférie apod.) a programátora naprosto nezajı́malo, že by některý zdroj mohl přı́padně využı́vat jiný proces. Tento systém nebyl multitaskový (to znamená, že nemohlo běžet vı́ce programů zároveň, které by spolu mohly napřı́klad komunikovat). Windows 3.x. Aby bylo možné ve Windows 3.x implementovat multitasking, pro aplikace Win16 (tj. se 16bitovou strukturou) platı́ přı́sná „pravidla chovánı́“. Tyto aplikace již musejı́ počı́tat s tı́m, že zdroje mohou být využı́vány jinými procesy, a proto je definován kontext procesu (viz přednášky), který je při přepı́nánı́ aktivnı́ho procesu odkládán a při jeho znovuzaktivněnı́ opět načten. Aplikace také majı́ omezený přı́stup k systémové paměti. Aby bylo možné provozovat také DOSovské 8bitové aplikace, musejı́ být tyto „nevychované“ procesy uzavřeny do virtuálnı́ch strojů. Každý virtuálnı́ stroj má přidělenu určitou část zdrojů a vzhledem k aplikaci v něm běžı́cı́ se tvářı́, že dalšı́ zdroje ani neexistujı́. O 4.5 PROGRAMOVÉ ROZHRANÍ 138 Jeden virtuálnı́ stroj je systémový, v něm běžı́ všechny Win16 aplikace včetně systémových procesů. Proto pokud právě běžı́ n DOSovských procesů, je spuštěno celkem n + 1 virtuálnı́ch strojů bez ohledu na počet běžı́cı́ch Win16 aplikacı́. Běh Win16 aplikacı́ má ještě jedno specifikum, které komplikuje jejich spouštěnı́ v novějšı́ch Windows – sdı́lenı́ knihoven. Pokud Win16 aplikace potřebuje ke svému běhu některou dynamicky linkovanou knihovnu, pak zavolá přı́slušnou API funkci a tato knihovna se tzv. přilinkuje k aplikaci (zpřı́stupnı́ se v nı́ obsažené funkce a objekty). Fyzicky tento proces probı́há tak, že pokud je tato knihovna načı́tána poprvé (dosud ji žádná aplikace nepotřebovala), tak je pro ni vyhrazeno mı́sto ve sdı́lené paměti a knihovna je reálně do operačnı́ paměti uložena. Při druhém načı́tánı́ této knihovny (jinou aplikacı́) již nenı́ znovu načı́tána, ale pouze speciálnı́ čı́tač zvýšen o 1. Při ukončenı́ aplikace využı́vajı́cı́ tuto knihovnu je tento čı́tač snı́žen o 1 (když klesne na 0, znamená to, že knihovna již nenı́ použı́vána žádnou aplikacı́ a může být odstraněna z paměti). Dynamické knihovny jsou sdı́lené zdroje. Windows 9x/ME. Windows s DOS jádrem jsou od verze 95 32bitové,6 NT systémy jsou 32bitové již od svého počátku. Tedy existujı́ tři druhy prakticky nativnı́ch aplikacı́, které je možné zde provozovat – 8bitové DOS aplikace, Win16 aplikace a Win32 aplikace. Aplikace Win16 a Win32 běžı́ v systémovém virtuálnı́m počı́tači, 32bitové majı́ každá svůj adresový prostor, 16bitové sdı́lejı́ jeden společný. Aplikace MS-DOSu majı́ každá svůj virtuálnı́ počı́tač (a tedy každá svůj adresový prostor). Win16 aplikace mezi sebou spolupracujı́ formou kooperativnı́ho multitaskingu se sdı́lenı́m knihoven, s Win32 aplikacemi a ovladači spolupracujı́ formou preemptivnı́ho multitaskingu. Win32 aplikace spolupracujı́ formou preemptivnı́ho multitaskingu. Provoz DOS aplikace v prostředı́ Windows: systém vytvořı́ virtuálnı́ počı́tač, ve kterém je DOS aplikace uzavřena. Někdy je vhodné provést dalšı́ konfiguraci možnostı́ spuštěnı́ (výchozı́ typ a velikost pı́sma, barvy obrazovky, přidělenı́ paměti, přı́stup k zařı́zenı́m, využı́vánı́ multitaskingu, atd.). To se provede vytvořenı́m souboru PIF (Program Information File) pro daný program (přı́pony PIF se standardně nezobrazujı́, toto nastavenı́ se dá změnit v registru). Jedná se o binárnı́ soubor, který nelze upravovat přı́mo. Ve Windows do verze 3.x se PIF soubory vytvářely pomocı́ aplikace Editor PIF, nynı́ máme Obrázek 4.17: Vlastnosti DOS aplikace ve Winjednoduššı́ možnost – vyvoláme kontextové menu dows 98 programu, v něm zvolı́me Vlastnosti a provádı́me ty6 Ve skutečnosti Windows 95 obsahovaly část knihoven v 16bitové verzi – šlo o ty knihovny, které programátoři nestačili přepsat do 32bitové podoby. P 4.5 PROGRAMOVÉ ROZHRANÍ 139 též změny, jaké se dřı́ve prováděly pomocı́ Editoru PIF. PIF soubor je v novějšı́ch verzı́ch Windows chápán již jako speciálnı́ typ zástupce, a podle toho je s nı́m také zacházeno (poklepánı́m spustı́me původnı́ program se změnami definovanými v tomto zástupci). Přepnutı́ mezi celoobrazovkovým režimem a oknem: Alt+Enter . Způsob běhu DOS aplikacı́ je možné kromě jiného konfigurovat v souboru apps.inf v adresáři inf. $ Obrázek 4.18: Porovnánı́ okna vlastnostı́ Win32 a DOS aplikace Pokud dojde k chybě GPF (General Protection Fault – všeobecná chyba ochrany), tedy k narušenı́ pamět’ového prostoru, obvykle je to způsobeno tı́m, že některá aplikace přepı́še své vlastnı́ pamět’ové segmenty, nikoliv segmenty jiné aplikace. Windows 98 sledujı́ prostředky přidělené aplikacı́m a při GPF dokážou tyto zablokované prostředky uvolnit, když to aplikace nedokáže (třeba proto, že zamrzla, zhroutila se, . . . ). P 32bitová Windows řady NT. Narozdı́l od systémů s DOS jádrem také Win16 aplikace běžı́ každá ve svém virtuálnı́m stroji stejně jako DOS aplikace. Proto také adresové prostory jednotlivých Win16 aplikacı́ jsou oddělené (každý virtuálnı́ stroj má vyhrazen vlastnı́ pamět’ový prostor) a to je jeden z důvodů, proč Win16 aplikace často v NT systémech majı́ problémy se svým během (nemohou komunikovat s ostatnı́mi aplikacemi tak, jak bylo běžné ve staršı́ch systémech). Protože každému virtuálnı́mu počı́tači je vyhrazeno poměrně hodně zdrojů, předevšı́m paměti, která již nemůže být využı́vána jiným procesem (ani systémovým) a musı́ v nı́ být uloženo to, co dotyčná aplikace očekává (včetně jakési kopie částı́ systému), představuje provoz vı́ce Win16 aplikacı́ značnou zátěž zdrojů, zejména paměti. To ostatně platı́ i o provozovánı́ vı́ce DOS aplikacı́ v kterýchkoliv Windows. Win32 (a přı́padně Win64) aplikace běžı́ ve společném systémovém virtuálnı́m počı́tači. Pokud je spuštěno n16 Win16 aplikacı́ a n8 DOS aplikacı́, pak běžı́ celkem n16 + n8 + 1 virtuálnı́ch strojů. Protože součástı́ jádra nenı́ MS-DOS, máme omezenějšı́ možnosti běhu DOS aplikacı́. Vlastnosti běhu DOS aplikace nastavujeme v kontextovém menu Vlastnosti na kartách pojmenovaných podle typu vlastnosti, kterou chceme nastavovat. Porovnánı́ okna vlastnostı́ Win32 a DOS aplikace v pro- P 4.6 KOMPATIBILITA VERZÍ WINDOWS 140 středı́ Windows 2000 vidı́me na obrázku 4.18 – DOS aplikace zde má výrazně vı́ce záložek. U DOS aplikace je zobrazeno také okno, které zı́skáme, když klepneme na tlačı́tko Upřesnit. Ve Windows 98 jsou trochu jiné možnosti nastavenı́ běhu staršı́ch programů – na obrázku 4.17 je okno s vlastnostmi zástupce DOS aplikace s oknem, které zı́skáme klepnutı́m na tlačı́tko Upřesnit. Aplikace běžı́ v tzv. podsystémech. Je zde podsystém Win32 pro Win a DOS aplikace (je to proces programu CSRSS.EXE), může být provozován také podsystém pro aplikace OS/2 a podsystém POSIX7 . Tyto podsystémy nebývajı́ přı́tomny všechny, podrobnosti na přednáškách. Virtuálnı́ stroje pro DOS a Win16 aplikace je spouštěn procesem ntvdm.exe běžı́cı́m v podsystému Win32. P 64bitová Windows řady NT. Taktéž se použı́vajı́ podsystémy a soubor ntvdm.exe pro Win16 a DOS aplikace. Win64 aplikace běžı́ v podsystému, který se nynı́ jmenuje přı́mo Windows (již ne Win32), a dále existuje podsystém WoW64 (Windows 32bit on Windows 64bit) pro běh 32bitových aplikacı́. Úkoly V Process Exploreru nebo jiné podobné aplikaci najděte proces csrss.exe. C • Zjistěte, kdo je ve stromové struktuře jeho rodičem. • Zjistěte jeho PID. Seřad’te procesy podle PID (klepněte na záhlavı́) a pokuste se odhadnout podle hodnot PID pořadı́ spouštěnı́ systémových procesů. • Zobrazte spodnı́ podokno (v menu View ï Show Lower Pane), a to se seznamem použı́vaných handlů (View ï Lower Pane View ï Handles). Projděte si položky v seznamu a všimněte si zejména klı́čů registru a vláken procesů, se kterými proces komunikuje (threads). Podobně projděte také seznam použı́vaných dynamických knihoven. • Zobrazte vlastnosti procesu csrss.exe (stačı́ poklepat na jeho název). Všimněte si jeho priority, vláken, proměnných, které využı́vá (záložka Environment) a zabezpečenı́ (je zde také vlastnı́k a jeho SID). 4.6 Kompatibilita verzı́ Windows V souvislosti s provozovánı́m aplikacı́ pro různé verze Windows v jednom systému se setkáváme se zkratkou WOW (Windows on Windows) – jde o emulačnı́ platformu ve Windows pro staršı́ Windows aplikace. Napřı́klad WOW64 je emulačnı́ platforma na 64bitových Windows pro 32bitové aplikace. Tato zkratka se vyskytuje také v registru. 32bitové aplikace pro Windows obvykle je možné spouštět na všech 32bitových Windows včetně řady NT. Výjimkou jsou programy, které potřebujı́ přı́mý přı́stup k prostředkům nebo „trvajı́“ na umı́stěnı́ systémových souborů charakteristickém pouze pro určité verze systému. 7 POSIX (Portable Open Systems Interface based on Unix – přenositelné otevřené, tj. volně šiřitelné, rozhranı́ systémů založených na Unixu): nejedná se o operačnı́ systém nebo určitou aplikaci, ale o souhrn norem, které definujı́, jak spolu komunikujı́ operačnı́ systém a aplikace. Aplikace napsané podle tohoto standardu pouze majı́ určitou strukturu a určitým způsobem komunikujı́ s operačnı́m systémem, což znamená i určité požadavky na tento operačnı́ systém (obvykle je nutné v klasickém operačnı́m systému pouze vytvořit komunikačnı́ „mezivrstvu“ mezi systémem a aplikacı́, v NT jde o program a několik dynamických knihoven). P 4.6 KOMPATIBILITA VERZÍ WINDOWS 141 DOSovské aplikace majı́ se spouštěnı́m v NT systémech ještě většı́ problémy. Zatı́mco při spuštěnı́ na Windows s DOS jádrem máme možnost využı́t režim MS-DOS (hned při spuštěnı́) a přı́padně na internetu stáhnout potřebné ovladače, v NT systémech tato možnost nenı́. Řešenı́m, které nezabı́rá vždy, je vhodné nastavenı́ parametrů spouštěnı́ aplikace ve Vlastnostech – viz obrázky 4.18 a 4.17 na straně 138. Ve Windows XP můžeme nastavit režim kompatibility. Nastavuje se ve vlastnostech takovéhoto spustitelného souboru – v kontextovém menu Vlastnosti ï karta Kompatibilita, viz obrázek 4.19 – tam máme možnost si v rozbalovacı́m seznamu vybrat „simulovaný“ systém, aplikace pak reálně poběžı́ v jakémsi virtuálnı́m počı́tači. Máme na výběr mezi Windows 95, Windows 98/ME, Windows NT 4 a Windows 2000 (XP zde ze zřejmého důvodu nenajdeme). Z výběru se dajı́ vypozorovat odlišnosti zacházenı́ s aplikacemi v těchto systémech – mezi Windows 98 a ME prakticky v tomto směru nejsou odlišnosti, zatı́mco Windows 95 musejı́ být odděleny kromě jiného proto, že část jejich knihoven je 16bitová a plánovač procesů má jiný algoritmus. Pokud program potřebuje přı́mo přistupovat k určitému zařı́zenı́ (týká se to hlavně zvukových karet ve vztahu k DOSovským hrám) a nemůžeme použı́t boot disketu pro naběhnutı́ „pouze DOSu“ (třeba tehdy, když máme všechny disky naformátovány na NTFS), jediným řešenı́m je použı́t některý emulátor. Tyto programy můžeme stáhnout na internetu, např. DOSBox na http://www.sourceforge.net nebo použijeme některý program pro vytvořenı́ virtuálnı́ho počı́tače (VMWare, VirtualBox, VirtualPC, . . . ). $ $ Problémy s kompatibilitou mohou nastat při instalaci systému přes staršı́ operačnı́ systém typu Windows, napřı́klad nelze přeinstalovávat Windows 3.x ani 95 na Windows XP (je nutné provést čistou instalaci). Hlavnı́ problémy mohou nastat s kompatibilitou ovladačů, protože 16bitové ovladače použitelné ve Windows 3.x, 9x a ME nelze použı́vat ve Windows 2000 a XP. Ve Windows od verze Vista přibylo problémů souvi- Obrázek 4.19: Režim kompatibility ve sejı́cı́ch s provozem staršı́ch aplikacı́ (už proto, že staršı́ Windows XP aplikacı́ je vlastně už i aplikace programovaná pro Windows XP). Režim kompatibility se nastavuje prakticky stejně jako ve Windows XP (také v zástupci, jeho vlastnostech, záložka Kompatibilita). Někdy však nepomůže ani to, protože Vista má mnohem striktnějšı́ pravidla přı́stupu k systémovým souborům. V takovém přı́padě může pomoci spuštěnı́ programu pod správcovským účtem (položka Spustit jako v kontextovém menu a nebo přı́kaz runas, tuto vlastnost můžeme nastavit i přı́mo na kartě Kompatibilita), ale v tom přı́padě musı́me počı́tat s vyššı́m rizikem. Jiným řešenı́m problémů s přı́stupy (předevšı́m do Program Files) je instalace aplikace jinam (napřı́klad si pro tyto účely vytvořı́me nový adresář C:\programy). Windows 7 přišla s novým řešenı́m režimu kompatibility, XP Mode. Spočı́vá v kombinaci dvou modulů – virtualizačnı́ho nástroje MS Virtual PC a VHD obrazu (tj. obrazu systému do virtuálnı́ho počı́tače) Windows XP (má 0,5 GB). Takto zı́skáme virtualizovaný systém Windows XP uvnitř Win- $ 4.6 KOMPATIBILITA VERZÍ WINDOWS 142 dows 7 a můžeme bez problémů provozovat „běžné“ XP aplikace. Ovšem setkáme se se značnými omezenı́mi: • potřebujeme procesor s podporou virtualizace, zapnutou v BIOSu, • hardware je také virtualizován, včetně grafické karty, takže žádná akcelerace grafiky, obecně jsou problémy s multimédii. XP Mode nenı́ v systému přı́tomen, musı́me ho doinstalovat (to znamená stáhnout z webu Microsoftu a nainstalovat nejdřı́v MS Virtual PC a potom modul XP Mode obsahujı́cı́ obraz Windows XP). Úkoly Pokud máte možnost, vyzkoušejte výše popsané postupy s kompatibilitou (napřı́klad ve Windows XP nebo Vista najděte některý staršı́ program, vytvořte jeho zástupce a projděte si kartu Kompatibilita v jeho vlastnostech). C Kapitola 5 Zařı́zenı́ a paměti V této kapitole se budeme věnovat postupům při konfiguraci systému a aplikacı́ specifickým pro různé verze Windows. Budeme se zabývat také provozem nenativnı́ch aplikacı́ a správou zařı́zenı́. 5.1 Správa zařı́zenı́ 5.1.1 Ovladače zařı́zenı́ Ovladač zařı́zenı́ je rozhranı́ mezi zařı́zenı́m a systémem (přı́p. procesy), které má předevšı́m zjednodušit a ujednotit komunikaci procesů se zařı́zenı́m (napřı́klad u tiskárny proces při požadavku na tisk předá hodnoty předem stanovených parametrů, jako je adresa dat, která se majı́ tisknout, formát tisku apod., nestará se již o konkrétnı́ implementaci pro určitou tiskárnu). Protože ve Windows procesy pracujı́ v prostředı́ s multitaskingem, je nutné ošetřit možnost přı́stupu vı́ce procesů k jednomu zařı́zenı́. Proto se použı́vajı́ ovladače virtuálnı́ch zařı́zenı́, které zároveň s rozhranı́m pro přı́stup k zařı́zenı́ poskytujı́ také rozhranı́ pro komunikaci s vı́ce procesy (obvykle obsahuje frontu, do které se řadı́ požadavky procesů). Od Windows 98 Microsoft testuje ovladače a jejich použitelnost pod Windows. Pokud v laboratořı́ch Microsoftu nenı́ nalezen žádný problém s kompatibilitou, přidělı́ ovladači certifikát WHQL (Windows Hardware Quality Lab) a ovladač je tzv. digitálně podepsaný. Testy se zaměřujı́ pouze na kompatibilitu s Windows, nikoliv na kvalitu ovladače směrem k samotnému zařı́zenı́, tedy to, že je ovladač podepsaný, nic neřı́ká o samotné kvalitě ovladače. V 64bitových Windows lze použı́vat pouze podepsané ovladače. Ne každý výrobce však „ztrácı́ čas“ čekánı́m, než Microsoft provede testy, a proto existuje hodně ovladačů, které sice jsou kompatibilnı́ s Windows, ale nejsou podepsané. Někteřı́ výrobci podepisujı́ své ovladače vlastnı́m certifikátem (důvěryhodným). Takto podepsané ovladače lze instalovat i v 64bitových verzı́ch Windows. Ve Windows od verze Vista je jejich instalace obvykle bezproblémová, ve Windows XP se můžeme setkat s varovným hlášenı́m, že tento ovladač nenı́ certifikován pro Windows (v XP jsou uznávány pouze podpisy přı́mo od Microsoftu). 143 P 5.1 SPRÁVA ZAŘÍZENÍ 144 Pokud chceme nalézt nepodepsané ovladače (někdy mohou způsobovat problémy, i když to nenı́ pravidlem), můžeme použı́t program Ověřenı́ podpisu souboru (SigVerif, spustı́me ho přes Start ï Spustit, napı́šeme sigverif ). Na obrázku 5.1 je okno se dvěma záložkami, ve kterém upřesňujeme činnost programu, a okno s výsledným seznamem nepodepsaných souborů. $ Obrázek 5.1: Upřesněnı́ možnostı́ nástroje sigverif Jako složku s ovladači můžeme zvolit System32\Drivers, po testovánı́ najdeme výsledky v souboru sigverif.txt v systémovém adresáři, a nebo si je přečteme v zobrazeném okně. V tomto souboru najdeme položky označené jako nepodepsané, podle údajů položky vyhledáme soubor ovladače a v jeho vlastnostech (v kontextovém menu) zjistı́me výrobce a tı́m i hardware, ke kterému ovladač patřı́. Pak podle těchto údajů najdeme na internetu stránky výrobce a zjistı́me, jestli už na nich nemá publikovány nové ovladače pro naše zařı́zenı́, které by už byly podepsané. Úkoly Na svém počı́tači zjistěte, zda jsou instalovány nějaké nepodepsané ovladače. C 5.1 SPRÁVA ZAŘÍZENÍ 5.1.2 145 Instalace ovladačů Windows jdou dodávány s ovladači pro mnoho typů zařı́zenı́ od různých výrobců, většinou tyto ovladače stačı́ alespoň pro základnı́ použı́vánı́ zařı́zenı́ a použı́vajı́ se při automatické detekci službou Plug&Play (obvykle dostaneme CD s ovladači zároveň se zařı́zenı́m). Tyto ovladače jsou na instalačnı́m CD v souboru DRIVER.CAB, po instalaci se zkopı́rujı́ do některého systémového adresáře (většinou Driver Cache nebo jeho podadresáře, nebo i386), skutečné umı́stěnı́ zjistı́me v registru v klı́či HKLM/Software/Microsoft/Windows/CurrentVersion/Setup. Pokud tento soubor zůstane na instalačnı́m CD, potřebujeme ho při instalaci každého nového zařı́zenı́. Pokud služba Plug&Play najde nové zařı́zenı́, předevšı́m se pokoušı́ najı́t přı́slušný soubor INF v adresáři Inf. V něm jsou údaje potřebné pro instalaci a předevšı́m cesta k souboru ovladače (může to být driver.cab). Pokud INF soubor nenı́ nalezen, je uživatel požádán o disketu nebo CD se soubory pro instalaci ovladače. Může se stát, že zařı́zenı́ nepracuje správně. Na vině může být poškozený ovladač (to může nastat i hned po instalaci, nebo po změnách v konfiguraci systému) nebo ovladač nekompatibilnı́ s momentálnı́ konfiguracı́ systému (s některou částı́ systému si „nerozumı́“, to může nastat při instalaci takových opravných balı́čků, se kterými programátor ovladače nepočı́tal). Když je na vině ovladač, často je možné najı́t na internetu jeho novějšı́ verzi (na stránkách výrobce zařı́zenı́). Po instalaci monitoru a některých dalšı́ch zařı́zenı́, pro která je důležité správné nastavenı́ barev (např. tiskárny), můžeme také instalovat vhodný barevný profil. Barevné profily jsou v souborech s přı́ponou ICM (Image Color Management) a najdeme je bud’ v souboru DRIVER.CAB nebo (a to je lepšı́) na CD dodávaném se zařı́zenı́m. Soubory s profily jsou obvykle uloženy ve složce ...\System32\spool\drivers\color. Pro monitor se instalace barevného profilu provádı́ přidánı́m tohoto souboru do seznamu v nástroji Zobrazenı́ (Vlastnosti v kontextovém menu Plochy), karta Nastavenı́ ï Upřesnit ï Správa barev. Úkoly 1. Prohlédněte si některé soubory v adresáři Inf (ostatně už je trochu znáte z předchozı́ho semestru). O $ P $ C 2. Zjistěte, jaké barevné profily pro monitor jsou navoleny a který z nich je vybrán. 5.1.3 Modely ovladačů Každý ovladač je psán podle některého modelu, který obvykle také určuje, v jaké verzi Windows je možné tento ovladač použı́vat. Ve Windows 95 se použı́valy dva základnı́ typy ovladačů: PMD (Protected Mode Driver) – 32-bitový ovladač pracujı́cı́ v chráněném režimu, konfiguračnı́ údaje o něm jsou uloženy v registru, tyto ovladače nejsou přı́stupné DOS aplikacı́m ani Win16 aplikacı́m, mı́vajı́ přı́ponu SYS nebo VXD (Virtual Device Driver, ovladač virtuálnı́ho zařı́zenı́). P 5.2 PAMĚŤOVÁ ZAŘÍZENÍ 146 RMD (Real Mode Driver) – ovladač pracujı́cı́ v reálném režimu, konfiguračnı́ údaje (přı́kaz pro zavedenı́ ovladače s konfiguračnı́mi parametry) jsou v souboru CONFIG.SYS, tyto ovladače nejsou použitelné pro aplikace a systémy, které nepoužı́vajı́ soubor CONFIG.SYS. Pro některá zařı́zenı́ existuje PMD i RMD varianta ovladače. Potom v přı́padě, že má být zařı́zenı́ přı́stupné DOS aplikaci, je potřeba nahradit PMD ovladač obdobným RMD ovladačem po dobu běhu této aplikace (např. ovladač myši). Ovladače, které lze takto bezpečně nahradit, jsou v souboru IOS.INI v systémovém adresáři (Win9x). Win32 aplikace ve Windows 95 mohou použı́vat i RMD ovladače (většinu), ale snižuje to výkon systému. Seznam RMD ovladačů, které momentálně pracujı́, je v nástroji Systém na kartě Výkon. Windows 98 a 2000 zavádějı́ nový model ovladačů – WDM (Win32 Driver Model), který má sjednotit modely ovladačů pro Windows 98 a Windows 2000. Hlavnı́m důvodem této změny je možnost použı́vat ve Windows 98 ovladače psané pro Windows NT. Pro zpětnou kompatibilitu jsou v systému zahrnuty také PMD a RMD ovladače, tedy použı́vajı́ se tři modely. Windows XP použı́vajı́ předevšı́m ovladače WDM, ve virtuálnı́ch strojı́ch některých podsystémů lze použı́vat i jiné typy ovladačů. Vista použı́vá nový model ovladačů WDDM (Windows Display Driver Model) odlišný od modelů použı́vaných v předchozı́ch verzı́ch Windows. Ve Vistě je WDDM verze 1.0, Windows 7 majı́ novou verzi 1.1. P P WDDM je navržen tak, aby v přı́padě selhánı́ ovladače bylo možné dále pokračovat (funkce rychlého zotavenı́ z pádu ovladače). Hlavnı́m přı́nosem WDDM ovladačů je přenos značné části multimediálnı́ch (grafických) operacı́ z procesoru na GPU (grafický procesor na grafické kartě), což mnohdy znamená zrychlenı́ grafických operacı́. Bez ovladače grafické karty s podporou WDDM nefunguje rozhranı́ AeroGlass. 5.2 5.2.1 Pamět’ová zařı́zenı́ Diskové kvóty Diskové kvóty určujı́, kolik mı́sta na disku (obvykle sı́t’ovém) může který uživatel zabrat, znemožňujı́ zabrat vı́ce než je stanovené množstvı́ nebo dovolujı́ protokolovat překročenı́ stanoveného mı́sta. Je sledováno množstvı́ mı́sta zabraného soubory, jejichž vlastnı́kem je daný uživatel (mı́sto zabrané uživatelem, který patřı́ mezi správce systému, nenı́ omezováno, protože administrátoři je vlastnı́kem všech systémových souborů, kterých nenı́ zrovna málo). P Rozlišujeme dva pojmy: • Maximálnı́ disková kvóta – množstvı́ mı́sta, které bude mı́t uživatel k dispozici. • Úroveň pro upozorněnı́ – hodnota o něco nižšı́ než předchozı́, sloužı́ k upozorněnı́, že se uživatel blı́žı́ hornı́ povolené hranici. Obě hranice (maximálnı́ hranici a hranici pro upozorněnı́) lze protokolovat, při protokolovánı́ můžeme nastavit přı́slušnou reakci (napřı́klad upozornit uživatele nebo upozornit správce). K protokolům se dostaneme napřı́klad v nástroji Prohlı́žeč událostı́, a to v Systémovém protokolu. $ 5.2 PAMĚŤOVÁ ZAŘÍZENÍ 147 Obecně je možné přidělovat diskové kvóty na discı́ch (složkách), které jsou sdı́lené a naformátované souborovým systémem NTFS. Možnost použı́vánı́ kvót je jednou z vlastnostı́ tohoto souborového systému; pokud máme disk naformátován souborovým systémem FAT32 nebo staršı́m, nemůžeme na něm kvóty použı́vat. Kvóty jsou také záležitostı́ lokálnı́ sı́tě. Můžeme přidělovat kvóty na kterémkoliv počı́tači v sı́ti, ke kterému má daný uživatel jakýkoliv typ přı́stupu. To ovšem vyžaduje, aby byli uživatelé v záznamech kvót identifikováni jednoznačně v rámci celé lokálnı́ sı́tě, tedy se použı́vajı́ SID uživatelů mı́sto jejich jmen. Obrázek 5.2: Nastavenı́ kvót Na lokálnı́m počı́tači se v grafickém režimu dostaneme ke kvótám takto: zobrazı́me vlastnosti disku (např. v Průzkumnı́kovi v kontextovém menu jednotky oddı́lu na disku), a pokud je typu NTFS, je zde záložka Přidělená kvóta (musı́me mı́t dostatečné oprávněnı́ k přı́stupu, aby se tato záložka zobrazila). Povolı́me přidělovánı́ kvót (na obrázku 5.2 vlevo) a dále je přidělı́me jednotlivým uživatelům (k podrobnějšı́mu nastavenı́ pro jednotlivé uživatele se dostaneme klepnutı́m na tlačı́tko Přidělené kvóty, na obrázku 5.2 vpravo). $ Pokud chceme pracovat s kvótami nastavenými na jiném počı́tači, než u kterého sedı́me, můžeme jednoduše připojit disk z toho počı́tače jako sı́t’ový disk (přidělı́me pı́smeno jednotky) a stejným způsobem jako u lokálnı́ho disku zobrazı́me jeho vlastnosti. Pro práci s kvótami existuje také přı́kaz fsutil quota, se kterým se seznámı́me dále. Úkoly Zjistěte, zda jsou na discı́ch vašeho počı́tače přiděleny kvóty (pokud máte dostatečná přı́stupová oprávněnı́). C 5.2 PAMĚŤOVÁ ZAŘÍZENÍ 5.2.2 148 Kontrola stavu disků Zde se budeme zabývat kontrolou stavu disků na softwarové (souborový systém) a hardwarové úrovni. $ (pouze Windows s DOS jádrem) program pro kontrolu povrchu disku; pokud zjistı́ poškozenı́ některé oblasti, zakáže do nı́ přı́stup, aby zde žádný program neukládal data (data by pak byla nepoužitelná). Má svůj protějšek v grafickém prostředı́ Windows. SCANDISK CHKDSK (název je zkratkou z „Check Disk“) se chová odlišně v různých verzı́ch Windows: • ve Windows s DOS jádrem vypı́še stručnou informaci o stavu systému, • ve Windows s NT jádrem (je v adresáři system32) při použitı́ bez parametrů provede rychlou (asi tak minutovou) kontrolu a vypı́še informaci o stavu systému, pomocı́ přepı́načů můžeme spustit podrobnou kontrolu s možnostı́ oprav (ta je však prováděna při následujı́cı́m startu systému programem autochk.exe), data zachráněná z poškozených sektorů najdeme v souborech s přı́ponou CHK.1 chkdsk provede rychlou kontrolu a vypı́še informace o disku chkdsk d: provede rychlou kontrolu zadané jednotky a vypı́še o nı́ informace chkdsk d: /F důkladná softwarová kontrola, u zjištěných chyb se pokoušı́ provést opravu (fix errors), oddı́l musı́ být odpojen (jen softwarově!) chkdsk d: /R důkladná hardwarová kontrola (zahrnuje v sobě i přepı́nač /F), hledá chybné sektory a pokoušı́ se z nich obnovit data Následujı́cı́ informace se vztahujı́ pouze k Windows s NT jádrem. Existujı́ dvě možnosti, jak zajistit, aby oddı́l na disku (svazek nebo celý disk) byl důkladně zkontrolován po startu systému: P 1. dirty bit – pokud kterýkoliv program s vyššı́mi oprávněnı́mi zjistı́ problémy s oddı́lem na disku (při čtenı́, zápisu nebo jakékoliv jiné manipulaci s oddı́lem), je tento oddı́l označen jako „špinavý“ (má nastaven dirty bit), 2. položka BootExecute v registru v klı́či HKLM/SYSTEM/CurrentControlSet/Control/Session Manager, obvykle za běhu systému obsahuje řetězec ve tvaru „autocheck autochk *“; tato položka určuje oddı́ly, které majı́ být zkontrolovány při startu systému, i kdyby neměly nastaven dirty bit. Uvedený řetězec vlastně znamená „všechno“ a takto je zajištěno, že při nesprávném vypnutı́ počı́tače budou při následném startu zkontrolovány všechny jednotky, tento řetězec je změněn při každém správném vypnutı́ počı́tače a opětovně nastaven při startu (takže kontrola je vyvolána, jen když nesprávně vypneme počı́tač). (pouze Windows s NT jádrem, v adresáři system32) je program pro automatickou kontrolu odpojených disků před startem systému, nelze ho spustit, pokud systém pracuje; je spouštěn (programem chkdsk) před každým startem systému a zjišt’uje, zda je některý disk označen jako „špinavý“ (má nastaven dirty bit) nebo byla vynucena jeho kontrola v registru, u každého takového disku (oddı́lu) provede hloubkovou kontrolu. AUTOCHK 1 Někdy bývá trochu problém s obnovou dat z těchto souborů, už proto, že jde vlastně o fragmenty původnı́ch souborů z disku. Existuje několik možnostı́, jak se s tı́mto problémem vypořádat, zajı́mavá stránka o tomto tématu je napřı́klad http://www.ericphelps.com/uncheck/. $ 5.2 PAMĚŤOVÁ ZAŘÍZENÍ 149 (pouze Windows s NT jádrem, v adresáři system32) sloužı́ k řı́zenı́ naplánovánı́ spuštěnı́ kontroly disků těsně před startem systému. Název přı́kazu je sice zkratkou z anglického „Check NTFS“, ale ve skutečnosti lze takto naplánovat také kontrolu jiných souborových systémů než NTFS (pracuje také s FAT a FAT32). CHKNTFS Tento přı́kaz ve skutečnosti nedokáže měnit samotný dirty bit (ten nuluje pouze program chkdsk), ale dokáže zajistit, aby kontrola nebyla vyžadována při následujı́cı́ch startech systému. Také dokáže naopak vynutit kontrolu u oddı́lu, který nemá nastavený dirty bit. zobrazı́ informaci o tom, zda je či nenı́ zadaný oddı́l na disku označen jako „špinavý“ (a také informaci o typu souborového systému na oddı́lu) chkntfs /x e: f: zadané disky nebudou kontrolovány při startu systému, i kdyby byly označeny jako „špinavé“ (jsou vyloučeny z kontroly – excluded) chkntfs /c d: zadaný disk bude zkontrolován po startu počı́tače, i když nenı́ označen jako „špinavý“. chkntfs d: Nastavenı́ dirty bitu lze zjistit ještě jiným způsobem – přı́kazem fsutil dirty query (bude probı́ráno později). Ve Windows do verze XP lze kontrolu diskového oddı́lu spustit v grafickém režimu – v kontextovém menu jednotky (oddı́lu) zvolı́me Vlastnosti a na kartě Nástroje klepneme na tlačı́tko Zkontrolovat. V tom přı́padě provádı́ kontrolu jen program explorer.exe s využitı́m knihoven ifsutil.dll a fmifs.dll, jen pokud v okně povolı́me odpojenı́ svazku (a přı́padně restart), použije se chkdsk a autochk. Rozdělenı́ rolı́ programů ve Windows XP (na desktopu): • chkntfs – umožňuje určit, co má být zkontrolováno • autochk – po svém spuštěnı́ (obvykle při startu systému) prověřı́, jestli nenı́ některý oddı́l (svazek) určen ke kontrole, pokud ano, provede hloubkovou kontrolu takového oddı́lu • chkdsk – provede bud’ jen krátký základnı́ test a vypı́še stručnou informaci, a nebo provádı́ podrobné testovánı́ před vlastnı́m startem systému nebo na odpojeném oddı́lu (při testovánı́ před startem systému spustı́ program autochk) $ O Programy scandisk a chkdsk nejsou moc silné, majı́ problém s opravou poškozeného sektoru a přı́padným zachráněnı́m dat, ale také se jim některé chyby nedařı́ detekovat. V horšı́ch přı́padech se doporučuje použı́t jiný nástroj – bud’ komerčnı́, a nebo některý z volně šiřitelných, které jsou také velmi kvalitnı́. Pokud je poškozena systémová část disku, volı́me nástroje, které jsou bootovatelné, tj. po zasunutı́ CD s tı́mto nástrojem restartujeme počı́tač a systém se spustı́ z CD (obvykle jde o upravený Linux nebo FreeDOS). Výborný je volně šiřitelný MHDD,2 který se poměrně snadno ovládá a pracuje s běžnými souborovými systémy, jen je vhodné pořádně čı́st, co nám sděluje (když zadáváme parametry pro hledánı́ vadných oblastı́, musı́me explicitně stanovit, že majı́ být také opraveny, jinak nás program „pouze“ informuje). Dalšı́m zajı́mavým programem, který pracuje také s údaji S.M.A.R.T., je napřı́klad aplikace HDDScan.3 Pokud nevı́te, co je to S.M.A.R.T., podı́vejte se do skript předmětu Technické vybavenı́ osobnı́ch počı́tačů. 2 3 Stránky programu MHDD: http://hddguru.com/content/en/software/2005.10.02-MHDD/, volně dostupný. Stránky programu HDDScan: http://hddscan.com/, volně dostupný. $ 5.2 PAMĚŤOVÁ ZAŘÍZENÍ 150 Úkoly 1. Prověřte, zda některý oddı́l na disku nemá nastaven dirty bit. C 2. Podı́vejte se do registru, jak je nastavena výše popisovaná položka BootExecute. 3. Spust’te zběžnou (rychlou) kontrolu sektorů na disku (bez nutnosti restartu počı́tače). 4. Pokud jste dosud neslyšeli o zkratce S.M.A.R.T., pokuste se o této technologii zjistit alespoň základnı́ informace (probı́rali jsme v předmětu Technické vybavenı́ osobnı́ch počı́tačů). Projděte si stránky programů MHDD a HDDScan a zjistěte, co všechno tyto programy zvládajı́. 5. Zjistěte, k čemu sloužı́ a jak se použı́vá program diskperf.exe. 5.2.3 R Program diskpart DISKPART je program pro práci s diskovými oddı́ly ve Windows od verze Vista a Server 2008 (lze jej stáhnout z webu Microsoftu i pro staršı́ systémy), je také součástı́ Konzoly pro zotavenı́ a Windows PE. Ve skutečnosti se jedná o interaktivnı́ textovou konzolu podobně jako v přı́padě NetShellu a lze ho použı́vat jak v interaktivnı́m, tak i neinteraktivnı́m módu. Tento přı́kaz umožňuje na velmi pokročilé úrovni pracovat s disky a jejich jednotlivými oddı́ly včetně dynamických svazků a dynamických oddı́lů. Typické úlohy jsou zjistěnı́ informacı́ o disku či oddı́lu, vytvořenı́ či zrušenı́ oddı́lu, vytvořenı́ nebo rozšı́řenı́ dynamického svazku, práce s RAID (zrcadlenı́), připojenı́ nebo odpojenı́ oddı́lu. Některé přı́kazy jsou určeny k práci s konkrétnı́m diskem nebo oddı́lem. Před použitı́m takovýchto přı́kazů musı́me nejdřı́v daný disk či oddı́l vybrat přı́kazem select, vybraný disk (oddı́l) se nazývá zaměřený (focused). Neplést si s aktivnı́m diskem, to je něco jiného! Přı́klad 5.1 V tomto souhrnném přı́kladu si ukážeme základnı́ práci s programem diskpart. spustili jsme program, jsme v interaktivnı́m režimu, dále zadáváme přı́kazy určené tomuto programu (prompt je ted’ ve tvaru diskpart>) diskpart vypı́šeme seznam disků s informacemi (pracuje také s externı́mi disky včetně USB flash disků), v seznamu má každý disk své čı́slo (od 0) select disk 1 vybrali jsme disk čı́slo 1 (tj. druhý v pořadı́), tento disk je ted’ zaměřený list disk list partition vypı́šeme seznam oddı́lů na zaměřeném disku select partition 3 zaměřı́me vybraný oddı́l (č. 3) odstranı́me zaměřený oddı́l (pozor, opravdu se odstranı́!), při práci s dynamickými svazky tento přı́kaz nepoužı́váme (mı́sto něj použı́váme delete volume) delete partition vytvořı́ nový primárnı́ oddı́l na disku se zaměřenı́m o velikosti 18 000 MB, na disku musı́ být dostatek nepřiřazeného mı́sta (nepřiřadı́ žádné pı́smeno jednotky), jiné přı́kazy jsou pro vytvořenı́ rozšı́řeného (extended) a logického (logical) oddı́lu (budeme se učit na přednáškách) create partition primary size=18000 $ 5.2 PAMĚŤOVÁ ZAŘÍZENÍ 151 přiřadı́ vytvořenému oddı́lu pı́smeno jednotky (bude dostupný pod pı́smenem E:), tı́mto přı́kazem (assign mount=...) můžeme vytvořený oddı́l připojit také do adresáře (bod připojenı́) assign letter=e zobrazı́ detailnı́ informaci a disku se zaměřenı́m detail disk odchod z prostředı́ programu exit Popis parametrů přı́kazu najdeme na http://support.microsoft.com/kb/300415 (a také v nápovědě). Přı́klad 5.2 Pokud chceme instalovat jakýkoliv operačnı́ systém na počı́tač (typicky netbook) bez optické mechaniky (a tudı́ž nelze použı́t instalačnı́ DVD), a nebo prostě vyrobit bootovacı́ USB flash disk, je třeba toto médium předem připravit, aby bylo použitelné pro tento účel. Předpokládejme, že chceme vytvořit instalačnı́ USB flash disk pro Windows 7 nebo Windows Vista. Potřebujeme • USB flash disk o vhodné kapacitě (ideálně kolem 4 GB nebo vı́ce), • počı́tač s DVD mechanikou a programem diskpart (bud’ v systému, který ho obsahuje, nebo stáhneme z internetu), • instalačnı́ DVD, jehož obsah chceme přesunout na USB flash disk. USB flash disk připojı́me k počı́tači (pro jistotu odpojı́me vše s rozhranı́m USB, co zrovna nepotřebujeme), spustı́me Přı́kazový řádek s právy administrátora a dále postupujeme následovně: spustı́me diskpart, prompt se změnı́ na diskpart> diskpart list disk zjistı́me čı́slo USB flash disku, se kterým chceme pracovat, zobrazı́ se něco podobného: Disk### ------Disk 0 Disk 1 Disk 2 Stav -----Online Online Online Velikost ------18 GB 40 GB 3824 MB Volné ----0 GB 0 GB 0 GB Dyn --- Gpt --- Prvnı́ dvě položky jsou zřejmě pevné disky, to, co hledáme (USB flash disk), je poslednı́ položka (disk č. 2). Sloupec Volné neznamená množstvı́ mı́sta nezabraného daty, ale množstvı́ mı́sta, které nenı́ zařazeno do žádného oddı́lu na disku. select disk 2 předáme zaměřenı́ na disk 2, se kterým budeme dále pracovat na celém disku se zaměřenı́m vytvořı́me primárnı́ oddı́l (celém, protože jsme nezadali velikost) create partition primary právě vytvořenému oddı́lu předáme zaměřenı́, tedy následujı́cı́ přı́kazy patřı́ právě tomuto oddı́lu (všimněte si, že jsme nezadali 0; toto čı́slo je totiž přiřazeno speciálnı́mu oddı́lu MBR, který obsahuje informaci o struktuře disku, tedy prvnı́ oddı́l, do kterého se dá něco ukládat, má čı́slo 1) select partition 1 active označı́me oddı́l jako aktivnı́, to znamená, že z něho lze zavést operačnı́ systém 5.2 PAMĚŤOVÁ ZAŘÍZENÍ 152 naformátujeme aktivnı́ oddı́l souborovým systémem NTFS (pozor, tento souborový systém nenı́ přı́liš vhodný pro USB flash disky, na které se často zapisuje, zde ho použijeme jen proto, aby bylo možné na něj přenést instalaci Windows 7 nebo Visty) format fs=ntfs přiřadı́me vytvořenému oddı́lu pı́smeno (žádné jsme nezadali, tedy se použije prvnı́ volné) assign exit D: odchod z prostředı́ programu diskpart, dalšı́ přı́kazy již zadáváme přı́mo v Přı́kazovém řádku. Nejdřı́v zasuneme do DVD mechaniky instalačnı́ DVD s Windows 7 nebo Vista. Dále: (dosad’te pı́smeno DVD mechaniky s instalačnı́m DVD), přesun na instalačnı́ DVD na instalačnı́m DVD se přesuneme do adresáře boot bootsect.exe /nt60 X: (za X dosad’te pı́smeno, které bylo přiřazeno upravenému USB flash disku, to lze zjistit napřı́klad přes Tento počı́tač) spouštı́me program, který vytvořı́ boot sektor na zadaném disku (aby bylo možné z něho nabootovat) cd boot zkopı́rujeme všechno z instalačnı́ho DVD na USB flash disk (opět musı́me dosadit správná pı́smenka) rekurzı́vně; pokud se nám nechce provádět to v Přı́kazovém řádku, nenı́ problém vše zkopı́rovat v Průzkumnı́kovi nebo jakémkoliv souborovém manažerovi xcopy D:\* X: /e Hotovo. USB flash disk odpojı́me a můžeme z něj nabootovat na kterémkoliv počı́tači a instalovat. Pokud nepracujeme v interaktivnı́m režimu, použı́váme trochu jinou syntaxi. Internı́ přı́kazy zadáváme pomocı́ parametrů programu, napřı́klad na pevném disku, který je prvnı́ v pořadı́, vytvořı́ nový oddı́l o velikosti 15 000 MB (na disku musı́ být tolik volného mı́sta nepřiřazeného žádnému oddı́lu) diskpart /add \Device\HardDisk0 15000 diskpart /delete \Device\HardDisk0\Partition1 na disku 0 odstranı́ prvnı́ oddı́l (pozor, oddı́ly, které běžně vidı́me, jsou čı́slovány až od 1) diskpart /delete F: odstranı́ oddı́l, který má přiřazeno pı́smeno F Úkoly 1. Zjistěte, do jaké mı́ry program diskpart umožňuje pracovat s dynamickými svazky (použı́vá se pojem volume). Dále zjistěte, jakým způsobem lze pomocı́ tohoto nástroje vytvořit RAID (diskpart umožňuje pracovat se zrcadlenı́m disků). 2. Najděte na internetu postupy vytvořenı́ bootovatelného USB disku a porovnejte s tı́m, který je popsán v přı́kladu 5.2. 5.2.4 C R Program fsutil Program FSUTIL (součást systému až od verze XP) sloužı́ ke správě diskových oddı́lů se souborovým systémem NTFS (ale rozumı́ také FAT a FAT32). Podobně jako u jiných silných přı́kazů je třeba mı́t administrátorská přı́stupová oprávněnı́ (alespoň k prováděnı́ změn). Syntaxe je podobná přı́kazu net – za názvem fsutil následuje upřesňujı́cı́ přı́kaz. $ 5.2 PAMĚŤOVÁ ZAŘÍZENÍ 153 fsutil fsinfo vypı́še informace o diskových jednotkách a souborovém systému, napřı́klad fsutil fsinfo drives vypı́še seznam připojených jednotek (včetně externı́ch) fsutil fsinfo drivetype d: chceme zjistit typ jednotky d: (napřı́klad pevný disk, vý- měnné médium, sı́t’ový disk, CD mechanika, apod.) fsinfo volumeinfo d: k zadané jednotce vypı́še o něco podrobnějšı́ informaci (název a sériové čı́slo, souborový systém, atd.) fsutil fsinfo ntfsinfo d: pokud je na jednotce souborový systém NTFS, vypı́šou se podrobné informace týkajı́cı́ se nastavenı́ tohoto souborového systému (počet sektorů, počet clusterů, adresy některých metadat, atd.) fsutil fsinfo statistics d: vypı́še statistické informace o jednotce (předpokládá se souborový sytém NTFS) jako je počet čtenı́, počet zápisů apod. Přı́klad 5.3 Zjistı́me údaje o souborovém systému na oddı́lu C: pevného disku. C:\> fsutil fsinfo ntfsinfo c: Sériové cı́slo svazku NTFS: 0x9090dabe90daa9cc Verze: 3.1 Pocet sektoru: 0x000000000c422f42 Celkový pocet clusteru 0x00000000018845e8 Volné clustery: 0x0000000000b8ae55 Celkem vyhrazeno: 0x00000000000015c0 Pocet bajtu na sektor: 512 Pocet bajtu na cluster: 4096 Pocet bajtu na segment záznamu souboru: 1024 Pocet clusteru na segment záznamu souboru: 0 Platná délka dat hlavnı́ tabulky souboru (MFT): 0x0000000018d40000 Pocátecnı́ cı́slo logického clusteru hlavnı́ tabulky souboru (MFT): 0x00000000000c0000 Pocátecnı́ cı́slo logického clusteru hlavnı́ tabulky souboru (MFT2): 0x00000000012a14bc Zacátek zóny hlavnı́ tabulky souboru (MFT): 0x000000000161ae00 Konec zóny hlavnı́ tabulky souboru (MFT): 0x000000000161bca0 M Z údajů můžeme vyčı́st, jak velký je oddı́l (můžeme napřı́klad vynásobit počet sektorů velikostı́ sektoru, pozor, hexadecimálnı́ čı́slo je třeba nejdřı́v převést na dekadické), sektory majı́ velikost 512 B (půl KiB) jak je dnes pořád ještě obvyklé (některé nejnovějšı́ disky 4 KiB), jeden cluster zabı́rá 8 sektorů, atd. Podobně zjistı́me statistiku o daném oddı́lu disku: C:\> fsutil fsinfo statistics c: Typ systému souboru: NTFS Ctenı́ souboru uživatele: 106024 Precteno bajtu souboru uživatele: 3085795328 Ctenı́ disku uživatele: 106581 Zápisy do souboru uživatele: 25892 Zapsáno bajtu do souboru uživatele: 769765376 Zápisy na disk uživatele: 27589 Ctenı́ metadat: 5769 M 5.2 PAMĚŤOVÁ ZAŘÍZENÍ 154 Precteno bajtu metadat: 97398784 Ctenı́ metadat disku: 12274 Zápisy metadat: 17495 Zapsáno bajtu metadat: 95387648 Zápisy metadat disku: 22158 Ctenı́ hlavnı́ tabulky souboru (MFT): 3802 Precteno bajtu tabulky MFT: 89341952 Zápisy do tabulky MFT: 12804 Zapsáno bajtu tabulky MFT: 69070848 Zápisy do tabulky MTF2: 0 Zapsáno bajtu tabulky MFT2: 0 Pocet ctenı́ korenového indexu: 0 Precteno bajtu korenového indexu: 0 Zápisy do korenového indexu: 0 Zapsáno bajtu do korenového indexu: 0 Ctenı́ rastru: 1195 Precteno bajtu rastru: 4894720 Zápisy rastru: 3652 Zapsáno bajtu rastru: 21164032 Ctenı́ rastru tabulky MFT: 26 Precteno bajtu rastru tabulky MFT: 106496 Zápisy rastru tabulky MTF: 309 Zapsáno bajtu rastru tabulky MFT: 1413120 Ctenı́ indexu uživatele: 6742 Precteno bajtu indexu uživatele: 27615232 Zápisy do indexu uživatele: 4614 Zapsáno bajtu do indexu uživatele: 22216704 Ctenı́ souboru protokolu: 6 Precteno bajtu souboru protokolu: 24576 Zápisy do souboru protokolu: 12689 Zapsáno bajtu do souboru protokolu: 112349184 fsutil file práce s konkrétnı́mi soubory (vytvářenı́, vyhledávánı́, atd.) fsutil file createnew d:\soubor.txt 10000 vytvořı́ nový soubor se zadaným ná- zvem o délce 10 000 B (necelých 10 KB) fsutil file findbysid novak d:\pisemnosti bude hledat soubor, jehož vlastnı́kem je novak, v adresáři d:\pisemnosti (funguje, pokud máme nastaveny diskové kvóty pro uživatele) Tento přı́kaz také dovoluje pracovat také s tzv. „řı́dkými soubory“. fsutil volume základnı́ správa svazku – možnost zjištěnı́ volného mı́sta a možnost jeho odpojenı́ zjistı́, kolik volného mı́sta je na disku d: (kolik lze ještě použı́t pro soubory – pozor, neplést si s pojmem „volné mı́sto na fyzickém disku“, se kterým jsme se setkali u přı́kazu diskpart v přı́kladu 5.2 na straně 151) fsutil volume dismount d: odpojı́ zadanou diskovou jednotku fsutil volume diskfree d: 5.2 PAMĚŤOVÁ ZAŘÍZENÍ 155 fsutil behavior zobrazı́ nebo změnı́ chovánı́ souborového systému (NTFS) zjistı́me, zda je povoleno nebo zakázáno časové razı́tko při každém přı́stupu (zda se položka času poslednı́ho přı́stupu měnı́ při každém přı́stupu k souboru včetně přı́stupu pouze pro čtenı́) fsutil behavior query disablelastaccess • pokud tento přı́znak nenı́ nastaven, zobrazı́ se hlášenı́ disablelastaccess nenı́ aktuálne nastaven • pokud naopak nastaven je, zobrazı́ se disablelastaccess = 1 nastavı́me zákaz časového razı́tka při každém přı́stupu k souborům (to je praktické zvláště u SSD disků, kde každý nadbytečný zápis čehokoliv zbytečně snižuje životnost disku) fsutil behavior set disablelastaccess 1 Položek, které lze takto zjišt’ovat nebo nastavovat, je vı́ce. Přı́kaz obsahuje vždy bud’ výraz query (zjišt’ovánı́) nebo set (nastavovánı́). fsutil dirty pracuje s přı́znakem dirty („špinavý“), se kterým jsme se setkali už u přı́kazu chkntfs (na straně 149) fsutil dirty query d: zjistı́, zda je u oddı́lu D: nastaven přı́znak dirty fsutil dirty set d: jednotka D: je označena jako „špinavá“ (pak by měla být tato jed- notka zkontrolována při přı́štı́m startu systému) fsutil hardlink práce s pevnými odkazy (u novějšı́ch verzı́ NTFS jsou podporovány pevné odkazy s podobnými vlastnostmi jako pevné odkazy v unixových souborových systémech, také původnı́ cesta k souboru je chápána jako pevný odkaz a tedy na každý soubor vede vždy nejméně jeden) fsutil hardlink create d:\zkratky\novy.dat c:\cesta\puvodni.dat vytvořı́ se pevný odkaz s názvem v prvnı́m parametru za klı́čovým slovem create, na existujı́cı́ soubor, který je poslednı́m parametrem přı́kazu Pevné odkazy lze použı́vat stejně jako původnı́ cesty k souborům, pevný odkaz lze vytvořit pouze na běžný soubor (pevný odkaz na adresář by mohl způsobit zacyklenı́ při některých operacı́ch v souborovém systému) fsutil quota práce s kvótami (o kvótách jsme se učili v kapitole 5.2.1 na straně 146). Kvóta stanovuje každému uživateli limit pro mı́sto na jednotce, které může využı́vat pro své vlastnı́ soubory. Obvykle je stanovena určitá tolerance (threshold), která sice může vyvolat „poplach“, ale uživatel ještě může do této stanovené mı́ry kvótu překročit fsutil fsutil fsutil fsutil fsutil quota quota quota quota quota query d: zobrazı́ nastavenı́ diskových kvót violations zobrazı́ porušenı́ stanovených kvót track d: povolı́ sledovánı́ kvót enforce d: povolı́ vynucovánı́ kvót disable d: zakáže použı́vánı́ kvót 5.2 PAMĚŤOVÁ ZAŘÍZENÍ 156 vytvořı́ novou kvótu nebo pozměnı́ existujı́cı́ pro zadaného uživatele; prvnı́ čı́selný parametr určuje toleranci (threshold), druhý pak mı́sto na jednotce vymezené zadanému uživateli (oba údaje v B) fsutil quota modify d: 1024 10000000 novak Poznámka: Pro úplnost – souborový systém NTFS podporuje nejen pevné odkazy (které můžeme vytvářet napřı́klad pomocı́ fsutil), ale i symbolické odkazy (to nenı́ úplně totéž jako zástupci). Lze je vytvářet (a také prohlı́žet a rušit) programem junction, který je ke staženı́ na stránkách http://www.sysinternals.com. junction -c d:programy ”c:\program files” vytvořı́ symbolický odkaz (zadáváme název odkazu a jeho cı́l) junction -d d:\programy junction d:\abc.txt odstranı́me symbolický odkaz zjistı́, zda zadaný soubor je či nenı́ symbolickým odkazem (funguje i na adresáře) vypı́še (rekurzı́vně) všechny symbolické odkazy na disku C:, součástı́ výpisu může být napřı́klad junction -s c:\ \\?\c:\\programy: JUNCTION Substitute Name: c:\program files M Je zvláštnı́, že v aplikaci WinObj (seznámili jsme se s nı́ v kapitole o objektech) se symbolické odkazy (vytvořené pomocı́ junction) vůbec neobjevujı́, ale zato odkazy vytvořené pomocı́ přı́kazu subst tam najdeme (viz obr. 5.3). Obrázek 5.3: WinObj po přı́kazu subst – týká se jednotek R: a T: Úkoly 1. Zobrazte nápovědu přı́kazu fsutil a zjistěte, jaké dalšı́ podpřı́kazy podporuje. C 2. Pokuste se pomocı́ tohoto přı́kazu vytvořit nový soubor o nulové délce a soubor o délce 1 KB (dejte pozor na to, v jakých jednotkách se délka souboru zadává). U obou souborů použijte přı́ponu TXT a pak je otevřete v některém editoru (třeba Poznámkovém bloku). 3. Na některý ze souborů vytvořených v předchozı́m úkolu vytvořte pevný odkaz v tomtéž adresáři, ale jinak pojmenovaný. Projděte si pak vlastnosti tohoto pevného odkazu (v kontextovém menu). 4. Zjistěte, zda jsou nastaveny kvóty na jednotkách pevného disku ve vašem počı́tači. 5. Zjistěte, jestli jsou nastavována časová razı́tka při každém přı́stupu k souboru na jednotkách vašeho disku. R 5.2 5.2.5 PAMĚŤOVÁ ZAŘÍZENÍ 157 Streamy v NTFS V souborovém systému NTFS můžeme ke každému souboru (i složce) přidružit stream – proud dat (nebo vı́ce streamů). Fyzicky každý soubor obsahuje alespoň jeden (hlavnı́) stream, který je pojmenovaný názvem souboru. Ostatnı́ streamy jsou pojmenované pouze doplňkovým řetězcem za názvem souboru a jsou přı́stupné přes „dvojtečku“, nazývajı́ se alternativnı́ datové streamy (ADS, Alternative Data Streams). Vytvořit stream můžeme bud’ programově (v procesu), a nebo „ručně“ přesměrovánı́m (napřı́klad u krátkého řetězce stačı́ přesměrovat výstup přı́kazu echo, ale lze přesměrovat i obsah souboru). P $ Přı́klad 5.4 Vytvořı́me textový soubor, jehož hlavnı́ stream zůstane prázdný a ve dvou dalšı́ch streamech uložı́me řetězce pı́smen. echo Ahoj > d:\soubor.txt:cesky prvnı́ stream obsahuje český pozdrav, echo Hello > d:\soubor.txt:anglicky more < soubor.txt:cesky vypı́šeme stream s českým obsahem, more < soubor.txt:anglicky type test.txt druhý stream obsahuje anglický pozdrav, vypı́šeme dalšı́ stream, vypı́šeme obsah souboru – všimněte si dvou věcı́: • tı́mto přı́kazem se nevypı́še nic, soubor je sám o sobě prázdný (streamy jsou „navı́c“, nejsou obsaženy v souboru), • k výpisu souboru můžeme použı́t přı́kaz type, ale k výpisu streamů ho použı́t nelze (musı́me je vypsat přı́kazem more a také přesměrovánı́ je nutné), můžete vyzkoušet výpis streamu přı́kazem type nebo more bez směrovánı́ (nebo nemusı́te, když nemáte rádi chybová hlášenı́), dir test.txt vypsali jsme údaje o našem souboru – velikost je 0. Je těžké poznat, jestli je u souboru ukrytý stream. Rychlé a spolehlivé (pokud máme podezřenı́ na jeden konkrétnı́ soubor) je pokusit se tento soubor v grafickém režimu zkopı́rovat na diskový oddı́l, jehož souborový systém nepodporuje streamy (třeba FAT32, což je obvyklé napřı́klad na USB flash discı́ch). Při pokusu o vloženı́ „podezřelého“ souboru na takový diskový oddı́l se objevı́ hlášenı́, které vidı́me na obrázku 5.4. Takto zjistı́me názvy streamů a můžeme se podı́vat i na jejich obsah (třeba postupem z přı́kladu 5.4). Obrázek 5.4: Pokus o zkopı́rovánı́ souboru se Při práci se streamy můžeme bud’ použı́vat streamy na FAT postup z předchozı́ho přı́kladu, a nebo lze využı́t program Streams od firmy Sysinternals (je ke staženı́ na webu firmy). Tı́mto programem můžeme streamy také odstraňovat. $ 5.3 SPRÁVA PAMĚTI 158 streams soubor.txt vypı́še streamy v zadaném souboru včetně jejich délky, výstup: Streams v1.56 - Enumerate alternate NTFS data streams Copyright (C) 1999-2007 Mark Russinovich Sysinternals - www.sysinternals.com M soubor.txt: :anglicky:$DATA 8 :cesky:$DATA 7 streams -d soubor.txt streams -s c:\ odstranı́ všechny streamy u zadaného souboru. vypı́še streamy všech souborů a adresářů na disku C: rekurzı́vně, zkrácený výstup: Streams v1.56 - Enumerate alternate NTFS data streams Copyright (C) 1999-2007 Mark Russinovich Sysinternals - www.sysinternals.com M Error opening c:\pagefile.sys: Proces nemá přı́stup k souboru, nebot’ jej právě využı́vá jiný proces. c:\soubor.txt: :anglicky:$DATA 8 :cesky:$DATA 7 c:\Documents and Settings\Uzivatel\Dokumenty\dokument.zip: :Zone.Identifier:$DATA 26 c:\WINDOWS\Thumbs.db: :encryptable:$DATA 0 ... Ve Windows od verze Vista je přı́kaz dir obohacen o přepı́nač /r, který dokáže zobrazit i alternativnı́ streamy (ve Windows XP máme v tomto směru smůlu): $ dir /s /b /r c:\ | find ”$DATA” Dalšı́m nástrojem (volně dostupným) pro odhalovánı́ streamů je LADS.4 Stream Zone.identifier bývá obvykle přidáván Internet Explorerem při staženı́ souboru z internetu. Ne všechny streamy jsou bohužel takto nevinné. Protože běžný uživatel prakticky nemá šanci náhodně zjistit, že k souboru patřı́ alternativnı́ stream (dokonce se v běžných výpisech včetně Průzkumnı́ka neprojevı́ ani jeho délka), mohou být streamy zneužı́vány malwarem k transportu nežádoucı́ch dat či kódu. Pokud výše popsanými technikami najdeme alternativnı́ stream s délkou většı́ než obvyklou (ve výpisu streams třı́- nebo vı́ceciferné čı́slo), měli bychom zpozornět a spustit antispyware. Úkoly 1. Podobně jako v přı́kladu 5.4, vytvořte soubor se dvěma streamy. Zjistěte délku souboru a kolik mı́sta zabı́rá na disku. 2. Pokud máte možnost, spust’te rekurzivnı́ vyhledávánı́ streamů na vašem počı́tači. 4 LADS je dostupný na http://www.heysoft.de/en/software/lads.php. C 5.3 SPRÁVA PAMĚTI 5.3 5.3.1 159 Správa paměti Adresovánı́ Toto téma bylo již probı́ráno na přednášce. Současné procesory mohou pracovat minimálně v těchto dvou režimech: 1. reálný – procesor se chová jako i8086, použı́vá jen 20 bitů na adresové sběrnici (1 MB), nelze použı́t ochranu paměti a tedy ani multitasking, většinou existuje podpora segmentace paměti, 2. chráněný (privilegovaný) – procesor použı́vá celý rozsah adresové sběrnice, využı́vá podpůrné obvody pro tento režim včetně dalšı́ch registrů (přı́stupných jen v chráněném režimu), podpora ochrany paměti, multitaskingu, použı́vá se většinou segmentace se stránkovánı́m paměti na žádost. Reálný režim procesoru Omezenı́ adresace na 1 MB paměti se obcházı́ takto: • spuštěný proces (program) má přiděleny segmenty paměti pro konkrétnı́ účely (napřı́klad u Intelu kód, data, dalšı́ data, zásobnı́k, halda) • absolutnı́ adresy začátku segmentů začı́najı́ vždy na adrese, která je dvojkově zaokrouhlená nejméně na 4 bity (tj. adresa v binárnı́ podobě končı́ nejméně čtyřmi nulami) • v segmentových registrech se ukládá upravená absolutnı́ adresa začátku segmentu posunutá o 4 bity doprava absolutnı́ adresa segmentu: v segmentovém registru: binárně hex. 1001101100100000 100110110010 9B20 9B2 • použı́váme relativnı́ adresy uvnitř segmentu (offset), ty se ukládajı́ do ostatnı́ch adresových a univerzálnı́ch registrů Současné operačnı́ systémy tento režim přı́mo nevyužı́vajı́. Chráněný (privilegovaný) režim znamená předevšı́m možnost (ne nutnost) hardwarové ochrany paměti. Od předchozı́ho se lišı́ přidánı́m některých součástı́ (jsou přidány některé registry a přı́znaky) a odlišným zpracovánı́m adres. V chráněném režimu mohou procesy běžet v několika různých okruzı́ch – Ring 0, Ring 1, Ring 2, Ring 3. Nejvnitřnějšı́ okruh, Ring 0, je nejvı́ce chráněný, je určen pro běh jádra operačnı́ho systému, ostatnı́ okruhy majı́ úrovně ochrany odstupňovány. Registry a přı́znaky souvisejı́cı́ s tı́mto režimem nesmı́ být jakkoliv ovlivňovány procesy běžı́cı́mi v jiném okruhu než ring0, některé jsou pouze pro čtenı́ dokonce i pro procesy z Ring 0. Ve skutečnosti jsou obvykle použı́vány jen dva okruhy – Ring 0 pro jádro operačnı́ho systému (privilegovaný/chráněný režim, režim jádra) a Ring 3 pro ostatnı́ procesy (uživatelský režim). Doporučuje se sice napřı́klad použı́vat Ring 1 pro ovladače hardwaru, ale prakticky žádný běžný operačnı́ systém to nedělá. Adresace probı́há odlišně v privilegovaném režimu (Ring 0) a v uživatelském režimu (Ring 3). V privilegovaném režimu jsou v segmentových registrech přı́mo adresy segmentů, kdežto v uživatelském režimu najdeme v těchto registrech selektory. O 5.3 SPRÁVA PAMĚTI 160 Adresace ve Windows v chráněném režimu funguje takto: • pro různé objekty včetně bloků (segmentů) paměti se použı́vajı́ deskriptory (popisovače), každý deskriptor obsahuje Proces ABCD GDT ... LDT deskriptor (ABCD) ... Operačnı́ systém - ... deskriptor (proměnné) ... 6 Proměnné - prom selektor offset ... ... Instrukce ... read prom ... Obrázek 5.5: Tabulky deskriptorů ve Windows – data souvisejı́cı́ s použı́vánı́m objektu (např. u segmentu paměti umı́stěnı́, velikost, typ, apod., u zařı́zenı́ jeho identifikaci, popis, požadavky na zdroje, atd.) – přı́stupová oprávněnı́ (SID s jejich přı́padnými oprávněnı́mi) • mı́sto přı́mých adres segmentů se použı́vajı́ selektory; selektor je ukazatel na deskriptor (popisovač) • každý proces (včetně systémových) má svou vlastnı́ LDT (Local Descriptor Table) s deskriptory vlastnı́ch objektů • existuje tabulka GDT (Global Descriptor Table) vedená systémem, ve které jsou deskriptory tabulek LDT všech procesů • selektor je ukazatel do tabulky deskriptorů, obsahuje – index řádku v dané tabulce LDT nebo GDT (u paměti jde o deskriptor daného segmentu), – informaci, zda jde o index v GDT (bit je nastaven na hodnotu 0) nebo LDT (nastaven na 1), – dva bity pro úroveň oprávněnı́ (u Windows je to 00 pro ring0 nebo 11 pro ring3) • v uživatelském režimu jsou v segmentových registrech selektory, tj. adresujeme dvojicı́ selektor:offset • segmenty jsou dále děleny na stránky, tj. překlad virtuálnı́ adresy selektor:offset na fyzickou je vı́ceúrovňový P 5.3 SPRÁVA PAMĚTI 161 Při použı́vánı́ chráněného režimu možná dojde k závažnému posunu. Firma Microsoft již dlouho pracuje na novém operačnı́m systému Singularity, který je momentálně chápán jako testovacı́ prostředı́ nových myšlenek a technologiı́ a zřejmě ještě dlouho v této fázi vývoje zůstane (uživatelům by zřejmě hodně vadilo chybějı́cı́ grafické prostředı́). Je zajı́mavé, že v Singularity je ochrana paměti a jiných zdrojů plně softwarová – hardwarová ochrana se zde nepoužı́vá (z důvodu urychlenı́ činnosti systému), všechny procesy běžı́ v Ring 0. U novějšı́ch procesorů se objevila ochrana proti spouštěnı́ kódu na pamět’ových stránkách s daty. U procesorů AMD jde o NX bit (NonExecutive), u Intelu XD bit (Execute Disable). Pokud má stránka nastaven tento bit na 1, je považována za datovou a při pokusu o zacházenı́ s obsahem stránky jako s kódem (spuštěnı́ instrukcı́ zde uložených) je vyvolána výjimka, která většinou končı́ ukončenı́m procesu, který se o to pokusil. Účelem je zabránit útokům typu přetečenı́ paměti. Ve Windows (od verze XP) se tento typ ochrany (funkce DEP – Zabráněnı́ spuštěnı́ dat) nastavuje v nástroji Systém, záložka Upřesnit, Možnosti výkonu. P Obrázek 5.6: Funkce Zabráněnı́ spuštěnı́ dat Úkoly Zjistěte, zda je zapnuta funkce DEP (Zabráněnı́ spouštěnı́ dat). 5.3.2 C Stránkovánı́ Stránkovacı́ soubor se obvykle jmenuje pagefile.sys a je na systémovém disku, ale ve skutečnosti můžeme mı́t vı́ce stránkovacı́ch souborů (v tom přı́padě by však každý měl být na jiném pevném disku). Názvy stránkovacı́ch souborů najdeme v klı́či HKLM/SYSTEM/CurrentControlSet/Control/Session Manager/Memory Management, a to v položce typu pole řetězců PagingFiles. Pokud máme vı́ce stránkovacı́ch souborů, měl by být každý na jiném fyzickém disku (pokud je jich vı́c na stejném fyzickém disku, třeba i na jiných oddı́lech, může to systém dokonce zpomalit). Umı́stěnı́ stránkovacı́ho souboru do samostatného oddı́lu na disku (odděleně od oddı́lů se systémem a daty) může být užitečné napřı́klad proto, že takto nehrozı́ fragmentace stránkovacı́ho souboru (ale na druhou stranu tady máme hornı́ ohraničenı́ pamět’ové oblasti, která může být pro stránkovánı́ využita). V tomtéž klı́či je ještě jedna zajı́mavá položka – ClearPageFileAtShutdown. Pokud existuje a je nastavená na 1, před každým (regulérnı́m) vypnutı́m systému se smaže stránkovacı́ soubor. To je důležité z hlediska bezpečnosti, protože v stránkovacı́m souboru se mohou nacházet důležité P $ 5.3 SPRÁVA PAMĚTI 162 informace, které by se neměly dostat do nepovolaných rukou (jistá verze Windows takto „zveřejnila“ nezašifrované heslo administrátora). Při potřebě uvolněnı́ rámců v operačnı́ paměti se pro výběr „oběti“ použı́vá na jednoprocesorových systémech hodinový algoritmus, na vı́ceprocesorových systémech algoritmus FIFO. Úkoly Zjistěte, kolik máte stránkovacı́ch souborů a jak se jmenujı́. Také zkontrolujte, zda máte nastaveno mazánı́ stránkovacı́ho souboru při každém vypnutı́ systému. 5.3.3 P C Struktura paměti Na architektuře x86 (tj. 32bitové) je na desktopu k dispozici standardně maximálně 4 GB virtuálnı́ paměti pro aplikaci, z toho max. 2 GB využı́vá proces, do zbylých 2 GB se mapuje systém. Toto rozloženı́ lze změnit v XP a Server 2003 na 3+1, a to tak, že v souboru Boot.ini přidáme přepı́nač /3GB. FFFFFFFF C0800000 C0000000 80000000 7FFFFFFF 00000000 Nestránkovaný fond Stránkovaný fond Mezipamět’systému O Hyperprostor 2 GB Stránkovacı́ tabulky procesů Zavedené ovladače Vrstva HAL Jádro a exekutiva Kód DLL knihoven Zásobnı́ky vláken 2 GB Globálnı́ proměnné Aplikačnı́ kód Obrázek 5.7: Struktura paměti procesu na architektuře x86 Na obrázku 5.7 je běžná struktura virtuálnı́ paměti uživatelského procesu. Vysvětlı́me si některé pojmy: Pracovnı́ sada (Working Set, WS) je celkové množstvı́ paměti, která je aplikaci (prozatı́m) přidělena (pro označenı́ hornı́ hranice přidělenı́ paměti se také použı́vá pojem „Peak WS“). Pracovnı́ sada se dělı́ na dvě části – soukromou (private) a sdı́lenou (shared). Údaje o pracovnı́ sadě a obecně o paměti využı́vané procesy vidı́me na obrázku ?? (v Process Exploreru). Stránkovaný fond (Paged Pool) je virtuálnı́ pamět’, která je přidělená procesu a může být stránkována (tedy odkládaná na disk, když je třeba uvolnit rámce ve fyzické paměti). P 5.3 SPRÁVA PAMĚTI 163 Obrázek 5.8: Pamět’procesu Thunderbird.exe v Process Exploreru a Správci úloh Nestránkovaný fond (Non-paged Pool) je virtuálnı́ pamět’, která je přidělená procesu a nemůže být stránkována, vždy se nacházı́ ve fyzické operačnı́ paměti; tento typ virtuálnı́ paměti se použı́vá pro data s „časově kritickou“ dostupnostı́. Hodnoty stránkovaného a nestránkovaného fondu uváděné v přı́slušných nástrojı́ch (napřı́klad ve Správci úloh) je však třeba brát s rezervou. Je tak pouze stanoveno, kolik které paměti minimálně spadá do dané kategorie. Na obrázku 5.8 vidı́me hodnoty pro pamět’ procesu v Process Exploreru (včetně okna vlastnostı́ procesu) a pro srovnánı́ tentýž proces ve Správci úloh. $ Pro přı́stup k dynamickým knihovnám se použı́vá metoda známá také z jiných operačnı́ch systémů, copy-on-write. Spočı́vá v tom, že dokud proces ke knihovně přistupuje jen pro čtenı́, čte se ze sdı́leného umı́stěnı́ knihovny, ale v okamžiku, kdy se proces pokusı́ zapisovat, knihovna je namapována do adresového prostoru procesu (na obrázku 5.7 jde o oblast v hornı́ch 2 GB) a zápis se provádı́ do soukromé kopie knihovny, aby pamět’originálnı́ knihovny nebyla pozměněna. Úkoly 1. Otevřete Process Explorer. Dále spust’te program Poznámkový blok (notepad.exe). V Process Exploreru najděte řádek pro Poznámkový blok, zobrazte vlastnosti (poklepánı́m na řádek) a ve vlastnostech se přesuňte na kartu Performance. 2. Okna umı́stěte tak, abyste viděli zároveň jak okno Poznámkového bloku, tak i okno s vlastnostmi jeho procesu. V následujı́cı́m postupu se zaměřte na údaje o pracovnı́ sadě a virtuálnı́ paměti procesu. 3. Dále v Poznámkovém bloku běžným způsobem otevřete některý velký textový soubor (je jedno s jakou přı́ponou). Sledujte, co se děje s pracovnı́ sadou procesu při volbě otevřenı́ souboru v menu a co se stane při zobrazenı́ obsahu otevı́raného souboru. C 5.3 SPRÁVA PAMĚTI 5.3.4 164 Správa paměti ve Windows od verze Vista Ve Windows od verze Vista (a také v serverové linii verzı́ od 2008) se koncepce správy paměti zcela změnila. Zatı́mco do verze XP včetně byla pamět’přidělována procesům podle jejich momentálnı́ch potřeb, od verze Vista to funguje jinak. P Když se pokusı́me zjistit využı́vánı́ paměti, s překvapenı́m zjistı́me, že je použı́váno velmi mnoho fyzické paměti (často téměř všechna). Je to z toho důvodu, že systém přı́mo ması́vně přednačı́tá do paměti to, o čem předpokládá, že bude v brzké době použı́váno. Tato funkce v určité omezené mı́ře byla zahrnuta už ve Windows XP pod názvem Prefetch, ve Vistě byla v tomto směru značně rozšı́řena a nazýváme ji Superfetch. Funkce Superfetch je zajišt’ována stejnojmennou službou běžı́cı́ s poměrně nı́zkou prioritou, aby nezatěžovala systém. Je možné ji zastavit a znovu spustit jako každou jinou službu, napřı́klad přı́kaz net stop superfetch zastavı́ tuto službu a pamět’se začne pomalu uvolňovat (ne okamžitě). Tento postup volı́me napřı́klad tehdy, když máme spuštěnou aplikaci (třeba hru), která má vysoké nebo proměnlivé nároky na operačnı́ pamět’. Od verze Vista se dost těžko odhaduje skutečná spotřeba paměti procesem. Přı́slušné ukazatele (pracovnı́ sadu, stránkovaný fond, atd.) sice zı́skáme podobným způsobem jako v předchozı́ch verzı́ch, ale uvedeným čı́slům nelze moc věřit (ani součty „podmnožin“ pracovnı́ sady nesedı́), můžeme je použı́t pouze pro základnı́ orientaci. Dalšı́ technologie týkajı́cı́ se paměti také už vpodstatě známe z předchozı́ho semestru, napřı́klad ReadyBoost (použı́váme USB flash pamět’ jako nastavenı́ cache paměti pro disk) nebo ReadyDrive (tam je flash pamět’přı́mo součástı́ krabice s diskem, takže oproti ReadyBoost nemusı́ systém počı́tat s „vytrhnutı́m“ flashky z konektoru bez řádného odpojenı́). Úkoly Pokud máte možnost pracovat s verzı́ Vista nebo novějšı́, otevřete konzolu se službami (services.msc) a najděte službu Superfetch. Zjistěte jejı́ vlastnosti – jak je spouštěna, ve kterém souboru se nacházı́, jaké má závislosti, pod jakým účtem je spouštěna apod. O C Kapitola 6 Nasazenı́ systému V této kapitole probereme některé důležité rysy operačnı́ch systémů typu Windows. Zde najdeme pokročilejšı́ nebo komplexnějšı́ témata, která nebylo možné zařadit do předchozı́ch kapitol. 6.1 6.1.1 Konfigurace systému a aplikacı́ Konfiguračnı́ soubory pro staršı́ programy Prostředı́ DOS programů se konfiguruje ve speciálnı́ch konfiguračnı́ch souborech, jiných pro systémy s DOS jádrem a jiných pro NT systémy. Nı́že uvedené soubory obsahujı́ výchozı́ konfiguraci, ale u každého staršı́ho programu lze ve vlastnostech jeho zástupce určit jakýkoliv jiný soubor podobné struktury, který (předem) vytvořı́me. V systémech s DOS jádrem až do verze Windows ME se použı́vajı́ soubory CONFIG.SYS – konfigurace hardware, obvykle se zde načı́taji ovladače, včetně ovladačů rozšı́řené paměti. Použı́váme zde speciálnı́ přı́kazy (např. DEVICE nebo DEVICEHIGH pro zavedenı́ ovla- dače do paměti). Bývá tady také nakonfigurován ovladač zajišt’ujı́cı́ národnı́ prostředı́ a zobrazovánı́ českých znaků na obrazovce, napřı́klad COUNTRY=042,852,C:\...\COUNTRY.SYS DEVICE=C:\...\DISPLAY.SYS CON=(EGA,,1) Ten prvnı́ zajistı́ podporu českého prostředı́ (načtenı́ české znakové stránky Latin2 – 852, nastavenı́ českého formátu pro datum a dalšı́ objekty – 042), ten druhý načte ovladač pro podporu české znakové sady na obrazovce. Mı́sto teček bude samozřejmě cesta k souboru. AUTOEXEC.BAT – konfigurace uživatelského prostředı́ (operačnı́ systém a software). Mohou se zde použı́vat prakticky všechny výše uvedené přı́kazy (je to dávkový soubor, většinou se zde nastavujı́ systémové proměnné nebo spouštějı́ některé programy), a pak ještě dalšı́ – konfiguračnı́ – přı́kazy, obvykle jde o modifikace přı́kazu MODE, napřı́klad MODE CON CP PREPARE = ((852) C:\...\EGA.CPI) 165 P 6.1 KONFIGURACE SYSTÉMU A APLIKACÍ 166 MODE CON CP SELECT = 852 KEYB CZ, 852, C:\...\KEYBOARD.SYS Přı́kaz MODE má hodně možnostı́ použitı́, sloužı́ obvykle k nastavovánı́ vlastnostı́ některých zařı́zenı́ (obrazovky, tiskárny apod.). CON je zařı́zenı́ „obrazovka“, CP (nebo CODEPAGE) je znaková stránka, prvnı́ přı́kaz tuto stránku připravı́ k použitı́, druhý řádek ji vybere ze seznamu připravených stránek, třetı́ nastavı́ českou klávesnici. V systémech s NT jádrem se tyto soubory nepoužı́vajı́, pro konfiguraci DOS prostředı́ (včetně prostředı́ přı́kazu COMMAND) se použı́vajı́ obdobné soubory ve složce System32, a to CONFIG.NT (obdoba CONFIG.SYS) a AUTOEXEC.NT (obdoba AUTOEXEC.BAT). P Sada přı́kazů pro tyto soubory je obdobná sadě přı́kazů pro konfiguračnı́ soubory systémů s DOS jádrem, ale ne úplně stejná. Některé přı́kazy nenı́ nutné použı́t, protože se provedou automaticky (napřı́klad nastavenı́ národnı́ho prostředı́ a znakové sady). Soubory (NT) jsou okomentovány, ale nejsou zdokumentovány v nápo- Obrázek 6.1: Určenı́ konfiguračnı́ch souborů pro DOS vědě (alespoň základnı́ přı́kazy však ano). program Můžeme si vytvořit vlastnı́ varianty těchto souborů, pro daný DOS program určı́me jejich použı́vánı́ ve vlastnostech spustitelného souboru (pokud to nejde, musı́me nejdřı́v vytvořit zástupce spustitelného souboru a pak provést nastavenı́ ve vlastnostech tohoto zástupce), na kartě Program, tlačı́tko Upřesnit, jak vidı́me na obrázku 6.1. Úkoly 1. Prohlédněte si soubory autoexec.nt a config.nt, zjistěte, jaká nastavenı́ momentálně obsahujı́. $ C 2. Pokud máte některou staršı́ DOS aplikaci, vytvořte jejı́ho zástupce a v jeho vlastnostech zkontrolujte, které konfiguračnı́ soubory jsou nastaveny. Pak vytvořte nové (ve stejném adresáři, kde je aplikace), a přesměrujte na ně konfiguraci aplikace. 3. Zjistěte, co vše lze nastavovat přı́kazem mode. 6.1.2 INI R soubory Soubory s přı́ponou INI se ve staršı́ch verzı́ch Windows běžně použı́valy jako konfiguračnı́ soubory, zvláště v době, kdy ještě neexistoval registr. Dodnes se pro tyto účely použı́vajı́ a protože běžnı́ uživatelé majı́ jen omezený přı́stup do registru, použitı́ INI souborů mı́sto umı́stěnı́ konfigurace do registru zjednodušuje instalaci a přı́padnou dalšı́ konfiguraci, protože INI soubory lze samozřejmě umı́stit i do domovské složky uživatele. Soubory s přı́ponou INI najdeme i v systémových složkách. Je to zejména soubor desktop.ini, který je umı́stěn v každé složce, pro kterou je zapnuto Vlastnı́ nastavenı́ (v Možnostech složky). Některé systémové INI soubory existujı́ spı́še z důvodu zpětné kompatibility s aplikacemi Windows 3.x. O 6.1 KONFIGURACE SYSTÉMU A APLIKACÍ 167 Konfiguračnı́ informace ve vlastnı́ch INI souborech využı́vajı́ také s úspěchem aplikace portované (přenesené) z jiných operačnı́ch systémů (OpenOffice.org, Firefox aj.), kde je použı́vánı́ textových konfiguračnı́ch souborů běžné a proto přenesenı́ tohoto chovánı́ je jednoduššı́ než programovánı́ přı́stupu do registru. Ale i aplikace primárně psané pro Windows často ukládajı́ konfiguraci do INI souborů. Jedná se o textové soubory s částečně vázaným formátem (tj. je zvykem zachovávat určitá formátovacı́ pravidla). Většina programovacı́ch jazyků podporuje práci s INI soubory speciálnı́mi přı́kazy pro tento účel určenými, uživatelé je také mohou otevı́rat v textových editorech (ale neukládat s formátovánı́m!), napřı́klad v Poznámkovém bloku. soubory jsou rozděleny na sekce. Každá sekce začı́ná názvem sekce umı́stěným v hranatých závorkách, pomocı́ programových prostředků (přı́kazů) se lze v INI souboru rychle přesunout na sekci s daným názvem. Uvnitř každé sekce je pak sekvence přiřazovacı́ch přı́kazů (klı́čů) ve tvaru vlastnost = hodnota, každý na jednom řádku. Můžeme také použı́vat komentáře (začı́najı́ střednı́kem). INI soubor může vypadat napřı́klad takto: INI ; nastavenı́ fontu programu: [Font] hlavni=bookman kodprog=times M ; barvy použité v okně: [Barva] pozadi=white font=black zvyrazneny=red ; umı́stěnı́ a rozměry okna programu: [Okno] left=20 right=0 width=750 height=400 Pro systémové INI soubory existuje ve Windows Editor systémové konfigurace, spouštěný přı́kazem sysedit.exe. Úkoly 1. Najděte jakýkoliv soubor desktop.ini a prozkoumejte jeho obsah. $ C 2. Najděte kterýkoliv soubor s přı́ponou INI v některém z podadresářů v adresáři Program Files, otevřete v Poznámkovém bloku a prohlédněte si jeho strukturu. 3. Otevřete Editor systémové konfigurace a zjistěte, které soubory jsou v něm dostupné. 6.1.3 INF soubory soubory jsou podobné INI souborům, i včetně jejich struktury. Jejich určenı́ je ale trochu jiné. Obvykle obsahujı́ konfiguračnı́ informace ovladačů a většina z nich se nacházı́ ve složce Inf, některé také ve složce System32. Jsou také rozděleny do sekcı́, lze na ně použı́t tytéž programátorské postupy. INF O 6.1 KONFIGURACE SYSTÉMU A APLIKACÍ 168 K INF souborům existujı́ do páru stejně pojmenované soubory s přı́ponou PNF. Narozdı́l od INF souborů, PNF soubory jsou binárnı́, předkompilované. soubory obvykle začı́najı́ sekcı́ [Version], ve které je informace o nejnižšı́ verzi Windows, pro kterou je soubor určen (často tu bývá napřı́klad $Chicago$, tj. pro všechna Windows od verze 951 ) nebo $Windows NT$ (tj. pro NT systémy, nelze použı́t napřı́klad pro Windows 95/98/ME). Dále je zde většinou název a kód třı́dy zařı́zenı́. Pokud soubor nepatřı́ konkrétnı́ třı́dě (napřı́klad layout.inf nebo apps.inf), je kód nulový a název nenı́ uveden. Asi nejsrozumitelnějšı́ je poslednı́ sekce až ke konci souborů, [Strings]. Tady najdeme konkrétnı́ přiřazenı́ řetězců zkratkám použitým výše. INF Nejdůležitějšı́m INF souborem je layout.inf. Na tento soubor se odvolává většina ostatnı́ch INF souborů, obsahuje obecné informace o systému, které jsou potřebné pro instalaci a nastavenı́ ovladačů. Soubor začı́ná takto: [Version] signature=$Windows NT$ ClassGUID=00000000-0000-0000-0000-000000000000 M Dalšı́m obecným INF souborem je apps.inf, který zajišt’uje správné chovánı́ starých 16bitových aplikacı́ a jejich ovladačů. Pro změnu si ukážeme část poslednı́ sekce (je velmi dlouhá): [Strings] ... ACAD.EXE=”Autocad” ACAD386.BAT=”Autocad” BASIC.COM=”Microsoft Basic” BC.EXE.1=”Borland C++ IDE” BC.EXE.2=”Microsoft Basic Compiler” COMMAND.COM=”Přı́kazový řádek MS-DOS” EDIT.COM=”MS-DOS Editor” EDIT.EXE=”IBM Professional Editor” MEM.EXE=”MS-DOS Memory Information” MEMMAKER.EXE=”MS-DOS Memory Optimizer” PAINT.BAT=”PC Paintbrush IV Plus” PCSHELL.EXE=”PCTools PCShell” PING.EXE=”Nástroj FTP PING” UNDEL.EXE=”PCTOOLS - UnDelete” UNDELETE.EXE=”UNDELETE (dos)” ... M Ve složce Inf najdeme mnoho zajı́mavých souborů, napřı́klad au.inf pomáhá nastavit automatické aktualizace (AutoUpdate), games.inf obsahuje informace o jednoduchých předinstalovaných hrách, cdrom.inf sloužı́ při instalaci CD mechanik, atd. Úkoly 1. Najděte soubor monitor.inf (je ve složce Inf). Prohlédněte si celou strukturu tohoto souboru. Zjistěte, pro které verze Windows je tento soubor určen, do jaké třı́dy patřı́ zařı́zenı́, která má pomoci instalovat, prohlédněte si také sekci [Strings]. 2. Zkopı́rujte do schránky identifikačnı́ čı́slo třı́dy zařı́zenı́ (ClassGUID). Otevřete registr (regedit) a vyhledejte klı́č s tı́mto názvem. Prohlédněte si obsah nalezeného klı́če. 1 Chicago je kódové jméno Windows 95. C R 6.1 KONFIGURACE SYSTÉMU A APLIKACÍ 6.1.4 169 Registr V této podsekci shrneme a rozšı́řı́me naše dosavadnı́ znalosti o registru Windows (v angličtině Windows Registry). Z předchozı́ho semestru vı́me, že rozlišujeme několik pojmů: • větev registru – začı́ná vždy některým z hlavnı́ch klı́čů HKLM (Local Machine), HKU (Users), HKCU (Current User), HKCR (Classes Root), HKCC (Current Config), O • podstrom registru – dva z hlavnı́ch klı́čů jsou na počı́tači unikátnı́ (to jsou podstromy) – HKLM a HKU, ostatnı́ hlavnı́ klı́če pouze odkazujı́ na některý z podklı́čů těchto podstromů • podregistr (hive, úl) – tento pojem se vztahuje k souborům, ve kterých je registr uložen: – několik systémových podregistrů s názvy sam, security, software, system, všechny jsou uloženy v ...\system32\config, jde o podklı́če v klı́či HKLM, – pro každého uživatele jeden s názvem ntuser.dat uložený v profilu uživatele, tyto podklı́če jsou v klı́či HKU, resp. HKCU pro právě přihlášeného uživatele, – dalšı́ pomocné podregistry, předevšı́m HKU/.Default (tento podregistr najdeme ve stejném adresáři jako systémové podregistry, soubor default), a dále klı́če HKU/hSIDi_Classes (tento podregistr je v souboru %userprofile%/Local Settings/Data Aplikacı́/Microsoft Windows/usrClass.dat, kde podřetězec %userprofile% je cesta k profilu uživatele s daným SID). Všimněte si, že v klı́či HKLM je ještě jeden podklı́č – hardware. Pro tento podklı́č však neexistuje žádný podregistr, protože všechny údaje, které v něm najdeme, jsou dynamicky generovány při každém startu systému a proto nejsou nikde uloženy. Vı́me, že ve Windows řady NT (a ve Windows s DOS jádrem od verze 95) se konfigurace systému a aplikacı́ obvykle ukládá do registru. Protože se jedná o binárnı́ soubory, je zpracovánı́ údajů registru pro procesy (a nebo v textové konzole) o něco náročnějšı́, nelze použı́t přı́mou úpravu těchto souborů. Shrňme si, jaké máme možnosti: • programy regedit.exe a regedt32.exe – pouze pro uživatele klepajı́cı́ho myšı́ u počı́tače, i vzdáleného, • soubory s přı́ponou REG – lze jen bud’ exportovat z výše zmı́něných programů, a nebo načı́st do registru nová data, ale pro proces nenı́ možné tı́mto způsobem data z registru zı́skat, • přı́slušné API funkce a nebo funkce či třı́dy a objekty nabı́zené programovacı́mi nástroji (pro procesy), • program reg.exe (pro uživatele i procesy, je až od Windows verze XP/Server 2003), • dalšı́. Ted’ nás bude zajı́mat program reg.exe. Tento program je určen k běhu v Přı́kazovém řádku a s jistými omezenı́mi ho lze použı́t i procesem. Má syntaxi podobnou přı́kazu net, ale množstvı́ variant je výrazně menšı́. Probereme postupně jednotlivé varianty. reg query takto zı́skáváme údaje z registru; zadáváme vždy větev registru, která nás zajı́má (větve začı́najı́ některým z řetězců HKLM, HKU, HKCU, HKCC, HKCR), můžeme zadat také větev ze vzdáleného registru (na jiném počı́tači), řetězec obsahujı́cı́ mezery uzavřeme do uvozovek $ 6.1 KONFIGURACE SYSTÉMU A APLIKACÍ 170 reg query ”HKLM\system\currentcontrolset\Control\Session Manager” vypı́šou se všechny záznamy (položky) zadaného klı́če a všechny jeho podklı́če reg query ”HKCU\Control panel\desktop /v autoendtasks přepı́nač /v vypı́še momentálnı́ nastavenı́ hodnoty AutoEndTasks v zadaném klı́či reg query ”HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\ Memory Management” /v clearpagefileatshutdown takto zjistı́me momentálnı́ nastavenı́ hodnoty (položky) ClearPageFileAtShutdown v zadaném klı́či reg query HKCU\Software\OpenOffice.org /s vypı́šou se všechny údaje, a to rekur- zı́vně i v podklı́čı́ch takto přistupujeme ke vzdálenému registru (jednoduše před název hlavnı́ho klı́če dáme název počı́tače podle UNC adresy); na vzdálených počı́tačı́ch můžeme přistupovat pouze k podstromům registru, tj. ke klı́čům HKLM a HKU (a jejich podklı́čům), nelze zadat napřı́klad HKCU reg query ”\\pocitac\HKU” reg copy kopı́ruje obsah jednoho klı́če do druhého (počı́tá se spı́še s využitı́m kopı́rovánı́ mezi dvěma různými počı́tači) reg copy \\RefPocitac\HKLM\software \\JinyPocit\HKLM\software /s /F zkopı́ruje celou softwarovou konfiguraci (obecně) z jednoho počı́tače na jiný (pozor, pokud chceme tı́mto způsobem přenášet konfiguraci mezi počı́tači, musı́me toho přenést poněkud vı́ce), a to rekurzı́vně (/s) a bez požadavku na potvrzovánı́ kopı́rovánı́ (/F) Pokud nezadáme UNC počı́tače, pracuje se s větvı́ registru lokálnı́ho počı́tače. reg delete odstranı́ z registru podklı́č nebo položku reg delete HKCR\.xxx odstranı́ zadaný podklı́č v reg delete ”HKLM\software\program /v cfile odstranı́ položku cfile v zadaném klı́či v zadaném klı́či odstranı́ všechny položky, které nemajı́ vloženu žádnou hodnotu (empty) reg delete ”HKLM\software\program /va v zadaném klı́či odstranı́ všechny položky (ale podklı́če nechá) reg delete ”HKLM\software\program /ve reg export sloužı́ k exportu větve do souboru s přı́ponou REG reg export ”HKCU\AppEvents\EventLabels d:\uzivatelUdalosti.reg exportujeme zadanou větev registru do REG souboru reg import importujeme obsah REG souboru do registru reg import uzivatelUdalosti.reg import zadaného REG souboru Přı́kaz reg má ještě dalšı́ parametry. Kromě běžných větvı́ registru můžeme také zvlášt’ pracovat s podregistry. Podregistr můžeme dočasně připojit, pak znovu odpojit nebo uložit podregistr do 6.1 KONFIGURACE SYSTÉMU A APLIKACÍ 171 souboru s přı́ponou HIV (zkratka z „hive“), připojovat můžeme pouze pod klı́če HKLM a HKU. Pro tyto účely sloužı́ podpřı́kazy save, load, atd. Použı́vánı́ přı́kazu reg přı́mo na Přı́kazovém řádku je poměrně jednoduché (když neznáme syntaxi, stačı́ použı́t přepı́nač /?, stejně jako u kteréhokoliv jiného přı́kazu), horšı́ je to ve skriptu (dávkovém souboru) nebo v procesu. Přı́kaz totiž vypisuje poněkud hodně informacı́ (nejen to, co chceme). Na začátku výpisu se vždy zobrazı́ řádek ! REG.EXE VERSION xxx (zobrazı́ se čı́slo verze souboru) a zbytek výpisu je prokládán prázdnými řádky. Při automatickém zpracovánı́ tedy musı́me přeskočit řádky začı́najı́cı́ symbolem „!“ a prázdné řádky, a dále je třeba rozpoznat názvy klı́čů od názvů položek. Pokud nás zajı́má, které podregistry jsou kde uloženy (a obvykle takto také můžeme zjistit přiřazenı́ SID konkrétnı́mu uživateli), podı́váme se do klı́če HKLM/SYSTEM/CurrentControlSet/Control/hivelist, ve kterém najdeme položky nazvané podle názvů objektů registru, jejichž hodnotou je umı́stěnı́ přı́slušného souboru. Úkoly 1. V nápovědě přı́kazu reg zjistěte, jak konkrétně se dá pracovat s podregistry. M C 2. Vyberte si kteroukoliv větev registru a vyzkoušejte na nı́ přı́kazy reg query (včetně přepı́načů) a reg export. 3. V nápovědě přı́kazu for zjistěte, jak při použitı́ parametru /F určit, že řádky začı́najı́cı́ symbolem ! budou považovány za komentáře. Dále najděte způsob, jak při použitı́ přı́kazu for přeskočit několik prvnı́ch řádků (napřı́klad ten s komentářem). 4. Pokud máte dostatečná přı́stupová oprávněnı́, vyzkoušejte si připojenı́ podregistru (můžete v grafickém režimu): • Otevřete složku ...\Windows\repair. Obsah této složky je obvykle generován při instalaci nebo reinstalaci systému, kdy se jednotlivé podregistry teprve vytvářejı́. • Vytvořte kopii souboru system (bez přı́pony), kopii nazvěte např. system.hiv. Tento krok nenı́ až tak nezbytný, ale z bezpečnostnı́ch důvodů budeme pracovat s touto vytvořenou kopiı́. • Otevřete Editor registru (regedit.exe, na Windows 2000 regedt32.exe). Klepněte na klı́č HKLM (aby byl aktivnı́). V hlavnı́m menu aplikace zvolte Soubor ï Načı́st podregistr, najděte kopii, kterou jste vytvořili v předchozı́m kroku (system.hiv). Je třeba zadat název klı́če, zadejte Test (může to být cokoliv, ale bez diakritiky a bez mezer). • V klı́či HKLM se objevı́ podklı́č Test. Prohlédněte si jeho obsah a porovnejte s klı́čem HKLM/System. • Pak připojený podregistr odpojte – sbalte jeho strom, klepněte na jeho název (Test) a pak v hlavnı́m menu zvolte Soubor ï Uvolnit podregistr. Tento postup je výhodný napřı́klad tehdy, když počı́tač nelze spustit a přı́činu chceme najı́t (nebo napravit) v registru (podregistr můžeme připojit i z jiného počı́tače a nebo napřı́klad z prostředı́ Windows PE). Postup si můžete vyzkoušet i s použitı́m přı́kazu reg – jde o podpřı́kazy load a unload. Syntaxi zjistı́te v nápovědě přı́kazu. R 6.2 START SYSTÉMU 172 5. Podı́vejte se do adresáře, ve kterém je systémová část registru ...\System32\Config. Zobrazte vlastnosti kteréhokoliv podregistru (souboru bez přı́pony, máte zapnuté zobrazovánı́ přı́pon souborů známých typů?). Všimněte si, že údaje Velikost a Velikost na disku jsou stejné (porovnejte s jiným typem souborů, třeba s některým LOG souborem). R Je to z toho důvodu, že pokud je soubor s podregistrem prodlužován (nebo zkracován), přidává se vždy najednou celý blok paměti o velikosti 4096 B (4 KB), která je odvozena od obvyklé velikosti clusteru na disku (můžete si ověřit třeba na kalkulačce). 6. Vlastnı́kem načtených podregistrů (tedy souborů system, sam, atd.) je jádro. Ve struktuře procesů zobrazených v aplikaci Process Explorer je jádro představováno řádkem System. Zobrazte seznam manipulátorů vlastněných tı́mto procesem (handlů) a najděte mezi nimi podregistry (jedná se o objekty typu soubor, file). 6.2 6.2.1 Start systému Windows s DOS jádrem Při startu systému lze použı́t klávesnici pro určenı́ typu spuštěnı́ Windows. Klávesy nebo klávesové zkratky držı́me od chvı́le před startem systému po dobu, než systém na tyto klávesy zareaguje. Jsou to: F5 start bez konfiguračnı́ch souborů (soubory config.sys a autoexec.bat) F6 totéž, ale v sı́ti F8 start s úvodnı́m (startovacı́m) menu (v některých verzı́ch Windows také klávesa Ctrl ) Shift+F5 Shift R $ start MS-DOS 7.0 bez konfiguračnı́ch souborů pokud tuto klávesu držı́me po celou dobu startu systému od potvrzenı́ přihlášenı́ (až do chvı́le, kdy se objevı́ ikony na ploše), nespustı́ se programy uložené ve složkách Po spuštěnı́ (Startup) Úvodnı́ (startovacı́) menu umožňuje napřı́klad spustit nouzový režim, nebo pokud máme zároveň nainstalované předchozı́ verze Windows (ne přeinstalované), tak je lze spustit odtud. Úvodnı́ menu je použitelné předevšı́m pro možnost spuštěnı́ systému v nouzovém režimu. V tomto režimu je systém načten ve výchozı́m nastavenı́ (standardnı́ ovladače monitoru a myši, z ostatnı́ch ovladačů pouze to nejnutnějšı́). Systém spouštı́me v nouzovém režimu, pokud nemůžeme spustit systém po instalaci nového ovladače nebo aplikace, po nevhodných zásazı́ch do konfigurace systému nebo při jakémkoliv poškozenı́ ovladačů. Je možné odtud také instalovat aktualizace Windows včetně Service Packů. Pokud chceme, aby se ve Windows s DOS jádrem vždy při startu systému zobrazilo úvodnı́ menu, pak do MSDOS.SYS přidáme do sekce [Options] řádek BootMenu=1 P 6.2 START SYSTÉMU 173 Je možné zakázat zobrazovánı́ startovacı́ nabı́dky pomocı́ kláves F5 a F8 , a to také v souboru MSDOS.SYS. Toto nastavenı́ se provádı́ také v sekci [Options], kde přidáme řádek BootKeys=0 V systémech s NT jádrem je pro tento účel třeba upravit soubor ntldr. 6.2.2 Windows 2000 a XP Úvodnı́ (startovacı́) menu zobrazı́me tak, že držı́me klávesu F8 během startu systému (ale pokud je tato vlastnost zakázána, nefunguje to). Ve Windows S NT jádrem startovacı́ menu nabı́zı́ tyto možnosti: Stav nouze: Při startu systému jsou načteny pouze ovladače pro nejdůležitějšı́ zařı́zenı́ (monitor, myš, klávesnice, apod.), a to standardnı́ (od Microsoftu), nenı́ zprovozněna sı́t’, jsou spuštěny pouze nejdůležitějšı́ služby systému. $ P Stav nouze s pracı́ v sı́ti: Totéž jako předchozı́ bod, navı́c jsou načteny i ovladače pro práci v sı́ti. Stav nouze se systémem MS-DOS: (Stav nouze s přı́kazovým řádkem) Zde nejde o pravý systém MS-DOS (některé soubory, které s MS-DOSem souvisejı́, ve Windows NT ani neexistujı́), ale o spuštěnı́ systému bez grafického rozhranı́, registru a služeb Windows, pouze s nejnutnějšı́mi standardnı́mi ovladači, je to obdoba Přı́kazového řádku. Povolit protokolovánı́ při spouštěnı́: Systém se spouštı́ jako obvykle, ale během tohoto procesu se vytvářı́ protokol (textový soubor s názvem ntbtlog.txt v systémovém adresáři) obsahujı́cı́ informace o stavu načtenı́ všech ovladačů a služeb (zda bylo či nebylo načtenı́ úspěšné). Je to obdoba souboru bootlog.txt ze systémů s DOS jádrem. Do souboru ntbtlog.txt je ukládán protokol také při předchozı́ch možnostech Stavu nouze. Zapnout režim VGA: Omezenı́ na načtenı́ pouze standardnı́ch verzı́ ovladačů se týká pouze ovladače grafické karty. Tuto položku použijeme, pokud se nezdařila instalace ovladače grafické karty nebo je tento ovladač poškozen (monitor je při běžném spuštěnı́ systému „nečitelný“). Poslednı́ známá platná konfigurace: Při spuštěnı́ systému nenı́ brán ohled na změny v konfiguraci provedené pomocı́ nástrojů ve Windows (registr, konfigurace ovladačů v registru), ale použije se nastavenı́ uložené v registru, změny v konfiguraci do „definitivnı́“ konfigurace dostávajı́ až při restartu nebo dalšı́m spuštěnı́ systému, tedy tyto změny jsou „zahozeny“). Nelze tak řešit změny v konfiguraci typu poškozených systémových souborů nebo ovladačů. Režim laděnı́: Pro diagnostiku problémů můžeme použı́t nástroje pro laděnı́ jádra (některé jsou ke stáhnutı́ na stránkách Microsoftu). Během spouštěnı́ systému mohou být zası́lány sériovým kabelem informace o laděnı́ do jiného počı́tače. Údaje o konfiguracı́ch jsou v klı́či HKLM/System. V klı́či HKLM/System/Select najdeme několik důležitých položek: • Current obsahuje čı́slo momentálnı́ platné konfigurace; obvykle je zde čı́slo 1, což znamená, že platná konfigurace je v klı́či HKLM/System/ControlSet001, do tohoto klı́če odkazuje klı́č HKLM/System/CurrentControlSet, $ 6.2 START SYSTÉMU 174 • Default označuje výchozı́ volbu, obvykle obsahuje stejné čı́slo jako Current, • LastKnownGood obsahuje čı́slo poslednı́ známé platné konfigurace (před změnami, které mohly způsobit problémy), napřı́klad pokud je zde čı́slo 2, poslednı́ známá platná konfigurace je v klı́či HKLM/System/ControlSet002, • Failed obsahuje čı́slo konfigurace, jejı́ž načtenı́ se nezdařilo (pokud je zde 0, znamená to, že žádné problémy se nevyskytly). V úvodnı́m menu se mohou objevit i dalšı́ položky. Některé jsou tam přidány při instalaci po sı́ti nebo dodatečné instalaci některých modulů, napřı́klad pokud chceme, aby zde byla možnost spuštěnı́ Konzoly pro zotavenı́ (s Konzolou pro zotavenı́ jsme se již trochu seznámili v předchozı́m semestru), vložı́me do mechaniky instalačnı́ CD a nainstalujeme ji, tedy zadáme přı́kaz (předpokládejme, že CD disku je přidělena jednotka X): X:\i386\winnt32.exe /cmdcons Start počı́tače probı́há takto: 1. BIOS spouštı́ test POST (Power On Self Test) pro základnı́ desku – kontrola hardwaru (množstvı́ operačnı́ paměti, připojené disky, klávesnice, apod.), načte konfiguraci počı́tače z paměti CMOS (čip na základnı́ desce), tam také zjistı́ pořadı́ zařı́zenı́, ze kterých se má spustit operačnı́ systém, pak proběhne test POST také na některých rozšiřujı́cı́ch kartách (např. řadiče disků, grafická karta), 2. BIOS se pokoušı́ zavést operačnı́ systém nejdřı́v z prvnı́ho zaváděcı́ho zařı́zenı́ (obvykle to je pevný disk), v přı́padě neúspěchu (disk nenı́ systémový, . . . ) z druhého, atd.; disk, ze kterého lze načı́st systém, musı́ být označen přı́znakem aktivnı́ (o tomto přı́znaku jsme se už něco dozvěděli napřı́klad u přı́kazu diskpart), 3. pokud BIOS našel zaváděcı́ zařı́zenı́, ze kterého lze zavést operačnı́ systém, spustı́ přı́slušný zavaděč (ve speciálnı́m sektoru na disku je jeho adresa). V přı́padě Windows řady NT je tı́mto zavaděčem proces ntldr (NT Loader, nacházı́ se na systémovém disku), který provede samotné zavedenı́ systému. Zavaděčem může být také některý Boot Manager, který umožnı́ zvolit si mezi vı́ce nainstalovanými operačnı́mi systémy, po zvolenı́ je spuštěn již konkrétnı́ zavaděč operačnı́ho systému (ntldr je vlastně taky jednoduchý Boot Manager, ale umı́ pracovat pouze s operačnı́mi systémy z rodiny Windows). V přı́padě zaváděnı́ Windows 2000 a XP na platformě x86 je dalšı́ průběh následujı́cı́: 1. proces ntldr načte soubor BOOT.INI, pokud je v něm uvedeno vı́ce operačnı́ch systémů z rodiny Windows, zobrazı́ nabı́dku těchto systémů (s vlastnostmi uvedenými v BOOT.INI), dalšı́ body platı́ pro přı́pad, že byl zvolen systém Windows řady NT, jinak jinak je předáno řı́zenı́ souboru BOOTSECT.DOS (obsahuje údaje o boot sektorech operačnı́ch systémů Windows s DOS jádrem), přı́padně zavaděči jiného NT systému, 2. ntldr přepne procesor z reálného do chráněného režimu a načte některé systémové soubory, BIOS již dále nenı́ použı́ván pro přı́stup k zařı́zenı́m, 3. ntldr spouštı́ program ntdetect.com, který provede detekci hardwaru (postupuje podle zvoleného hardwarového profilu, pokud jsou tyto profily definovány) a zı́skané informace předá procesu ntldr, P 6.2 START SYSTÉMU 175 4. ntldr spustı́ hlavnı́ soubor jádra – ntoskrnl.exe a načte knihovnu hal.dll (Hardware Abstraction Layer, vrstva abstrakce hardwaru), načı́tá řı́dicı́ sady (většinou ovladače a služby) uvedené v registru v klı́či HKLM/System/Current ControlSet (nebo ControlSetxxx, podle typu spuštěnı́ systému), včetně služeb, které se majı́ spouštět při startu počı́tače, 5. ntldr spustı́ Správce relacı́ (relacı́ uživatelů, sessions) – SMSS.EXE a předá mu řı́zenı́, 6. Správce relacı́ dále • vytvářı́ systémové proměnné, • spouštı́ ty podsystémy, které jsou potřeba již při začátku práce na počı́tači: předevšı́m podsystém Windows, který je nutný i pro nastartovánı́ grafického režimu (pro režim jádra je představován ovladačem Win32k.sys, pro uživatelský režim souborem csrss.exe), • spustı́ Správce přihlašovánı́ (winlogon.exe), atd., 7. Správce prihlašovánı́ pak spouštı́ podsystém SCM (Správce služeb určený souborem services.exe, seznámı́me se s nı́m v následujı́cı́ kapitole na straně 100) a podsystém LSASS (pro ověřovánı́ přı́stupu, soubor lsass.exe, taktéž se s nı́m seznámı́me později), a dále umožnı́ přihlášenı́ uživatele (podsystém lsass kontroluje údaje zı́skané při přihlášenı́), 8. uživatel je přihlášen a projevı́ se některá nastavenı́ jako třeba Zásady skupiny (pro počı́tač i uživatele), přı́padně přihlašovacı́ skripty, pokud existujı́, jsou spuštěny procesy, které se majı́ spustit po přihlášenı́ – jsou uvedeny v registru a ve složce Po spuštěnı́ (Startup). Rozpoznávánı́ zařı́zenı́ službou Plug&Play běžı́ od spuštěnı́ této služby (bod 4.) nezávisle na přihlašovacı́m procesu. Dalšı́ informace můžeme zı́skat napřı́klad na adresách http://technet.microsoft.com/en-us/library/cc766314%28WS.10%29.aspx http://technet.microsoft.com/en-us/library/cc721886%28WS.10%29.aspx http://technet.microsoft.com/en-us/library/cc749177%28WS.10%29.aspx Konfiguraci zaváděnı́ systému můžeme provádět bud’ přı́mo v souboru boot.ini (je vždy na disku C:, i když nenı́ systémový) nebo v grafickém režimu v ovládacı́m panelu Systém (v kontextovém menu ikony Tento počı́tač zvolı́me Vlastnosti nebo jednoduše spustı́me soubor sysdm.cpl), záložka Upřesnit, část Spuštěnı́ a zotavenı́ systému. $ Vı́me, že v souboru boot.ini je konfigurace zaváděnı́ Windows. Tento soubor můžeme upravovat bud’ přı́mo (ovšem je chráněn atributem „read-only“ a přı́slušnými ACL seznamy) nebo v nástroji Systém (záložka Upřesnit, oblast Spuštěnı́ a zotavenı́ systému) – pouze základnı́ nastavenı́. Ve Windows XP a Server 2003 je k dispozici nástroj bootcfg (v Konzole pro zotavenı́). Umožňuje pracovat se souborem boot.ini na Přı́kazovém řádku, a to i na vzdáleném počı́tači (v lokálnı́ sı́ti). Syntaxı́ se nebudeme podrobně zabývat (nápovědu lze zı́skat běžným způsobem jako u kteréhokoliv jiného přı́kazu), podrobnějšı́ informace najdeme napřı́klad na adresách http://support.microsoft.com/kb/291980/cs http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/bootcfg.mspx?mfr=true http://www.windowsportal.cz/Blog/tabid/102/EntryID/87/Default.aspx Parametry použitelné v souboru boot.ini najdeme napřı́klad na http://msdn.microsoft.com/en-us/library/ms791480.aspx. $ 6.3 INSTALACE WINDOWS 6.2.3 176 Windows Vista a novějšı́ Vista od SP1 obsahuje podporu EFI (EFI je modernějšı́ varianta BIOSu, probı́rali jsme to v předmětu Technické vybavenı́ osobnı́ch počı́tačů). Mı́sto souboru ntldr se pro načtenı́ systému použı́vá dvojice programů: P • Windows Boot Manager (soubor bootmgr) – správce zaváděnı́ systémů (zobrazuje startovacı́ nabı́dku), • Windows Loader (soubor winload.exe) – provede vlastnı́ zavedenı́ systému. Jednı́m z mnoha rozdı́lů mezi ntldr a bootmgr je samozřejmě na straně bootmgr podpora EFI (je zobrazován v EFI jako jedna z rozpoznaných položek). Start počı́tače probı́há takto: • start BIOSu nebo EFI, podle architektury, včetně přı́slušných testů, • start Windows Boot Managera (bootmgr), • zobrazenı́ jeho nabı́dky (pokud je tak nastaven), v nabı́dce je – – – – volba pro spuštěnı́ Windows Vista nebo novějšı́ (spuštěnı́m winload.exe), obnovenı́ z hibernace (spuštěnı́m winresume.exe), přı́padné spuštěnı́ staršı́ verze Windows, pokud je některá nainstalována, dalšı́ volby. Pro konfiguraci zaváděnı́ lze použı́t rozhranı́ BCD od firmy Microsoft. Toto rozhranı́ přistupuje k prostředkům přes WMI. Je to programové rozhranı́ (použı́vané procesem, jedná se o sadu funkcı́). BCDEdit je nástroj pro Přı́kazový řádek, který využı́vá rozhranı́ BCD. Je obsažen přı́mo ve Windows (od verze Vista/Server 2008) a sloužı́ k podobnému účelu jako bootcfg v Konzole pro zotavenı́ Windows XP. Popis parametrů najdeme napřı́klad na http://msdn.microsoft.com/en-us/library/aa906217.aspx. Program BCDEdit nenı́ zrovna „uživatelsky přı́tulný“. Aplikace EasyBCD2 od firmy NeoSmart Technologies sloužı́cı́ ke stejnému účelu má přehledné grafické rozhranı́ a je volně ke staženı́. Umožňuje dokonce snadné nastavenı́ zařazenı́ unixových operačnı́ch systémů do startovacı́ nabı́dky Windows Boot Managera. Úkoly 1. Na svém počı́tači najděte výše popsané soubory (platné pro váš operačnı́ systém). Nezapomeňte si zobrazit skryté soubory a chráněné soubory operačnı́ho systému. Také nechte zobrazovat přı́pony souborů známých typů (vzpomeňte si, kde se tato nastavenı́ provádějı́). 2. Otevřete soubor msdos.sys (je vždy na disku C:, a to i na NT systémech). Projděte si sekci [options]. 3. Na internetu najděte stránky s popisem aplikace EasyBCD a zjistěte, co vše v nı́ lze nastavovat. 4. V registru najděte klı́č HKLM/System/Select a prohlédněte si momentálnı́ hodnoty položek v tomto klı́či. Prohlédněte si vlastnosti souboru ntdetect.com a dále podle verze Windows bud’ ntldr nebo bootmgr a winload.exe. 2 EasyBCD je ke staženı́ na http://neosmart.net/dl.php?id=1. $ $ C 6.3 INSTALACE WINDOWS 6.3 6.3.1 177 Instalace Windows Instalace Windows do verze XP Rozlišujeme několik základnı́ch typů instalacı́ Windows: Čistá instalace: instalujeme na prázdný zformátovaný logický disk (budoucı́ systémový disk) nebo provedeme formátovánı́ na začátku instalace, instalace probı́há bez jakékoliv vazby na předchozı́ operačnı́ systém, který byl přı́padně na daném logickém disku nainstalován. P Inovace (přeinstalovánı́): na budoucı́m systémovém disku je již nainstalován některý operačnı́ systém typu Windows, chceme ho přeinstalovat na vyššı́ verzi. U některých systémů nelze provést inovaci (napřı́klad nelze Windows 3.x nebo 95 inovovat na Windows XP, ale na Windows 98 nebo 2000 již ano). Instalace vedle jiného operačnı́ho systému: provádı́ se do jiného adresáře (složky) nebo na jiný logický disk, podle typu systémů. Účelem je funkčnost předchozı́ho (předchozı́ch) i nového operačnı́ho systému. Poslednı́ možnost může být v přı́padě Windows problematická. Za určitých okolnostı́ dokážou vedle sebe na jednom logickém disku existovat MS-DOS a některé Windows s DOS jádrem, pokud ale chceme instalovat Windows s NT jádrem vedle jiných Windows, musı́ to být na jiný logický disk. Jiný operačnı́ systém než Windows je tvrdě ignorován. Problémy nastávajı́ s přı́stupem k zavaděči jiných systémů – řešenı́ bude probı́ráno později. Za normálnı́ch okolnostı́ (instalujeme přı́mo na klientském počı́tači, máme bootovacı́ CD mechaniku) se instalace spustı́ automaticky po nabootovánı́ z CD, instalaci provádı́ soubor setup.exe. Na instalačnı́m disku je však ještě několik programů, které provádějı́ instalaci, použı́vajı́ se napřı́klad při automatizované instalaci nebo v přı́padě, že nemáme bootovacı́ CD mechaniku. Možnosti instalace na desktopu: Běžná instalace: program setup.exe, sedı́me u počı́tače a přı́mo zadáváme údaje. Bezobslužná instalace: pro Windows XP jsou instalačnı́ soubory WINNT32.EXE a WINNT.EXE ve složce i386 na instalačnı́m disku. Použijeme ji, pokud máme instalovat velké množstvı́ počı́tačů s různými hardwarovými architekturami a přı́padně různý software. Sysprep (Nástroj přı́pravy systému): v instalačnı́m souboru DEPLOY.CAB (jde o archiv podobně jako ZIP) ve složce Support\Tools na instalačnı́m disku. Je použitelná, pokud instalovaný počı́tač má stejnou vrstvu HAL3 jako ten, ze kterého instalujeme (referenčnı́), což obvykle znamená naprosto stejný hardware; tento nástroj dokáže provést pouze čistou instalaci (nikoliv reinstalaci). Sysprep vytvořı́ bitovou kopii systému referenčnı́ho počı́tače (image) bez „specifických“ informacı́, a ta se nakopı́ruje na ostatnı́ počı́tače.4 Takto lze přenášet nejen systém, ale také všechny 3 Architekturu systému budeme probı́rat na přednáškách – HAL (Hardware Abstraction Layer) je součást jádra závislá na hardware; Windows na dvou počı́tačı́ch majı́ stejnou vrstvu HAL, pokud jsou instalovány na stejném HW. 4 Přesný postup použı́vánı́ Sysprep včetně formy souborů odpovědı́ lze najı́t na internetu, napřı́klad na adrese http://articles.techrepublic.com.com/5100-22 11-5838633.html. $ 6.3 INSTALACE WINDOWS 178 nainstalované aplikace a konfiguraci. Nevýhodou je omezenı́ velikosti image na kapacitu disku CD. Některé verze Windows nabı́zejı́ vı́ce různých možnostı́ instalace, zajı́mavé jsou předevšı́m možnosti pro automatizovanou instalaci (typicky v sı́ti s Windows Serverem). Následujı́cı́ možnosti jsou použitelné v lokálnı́ sı́ti s Windows server. $ RIS (Služba vzdálené instalace): je součástı́ serverových variant Windows od verze 2000. Je řešena podobně jako Sysprep, ale nejsme omezeni kapacitou CD (instalace probı́há po sı́ti), je nutné mı́t v sı́ti zprovozněnou službu Active Directory. SMS (Systems Management Server): také na serverových Windows. Je použitelný pouze pro inovaci existujı́cı́ instalace některého systému Windows. Nabı́zı́ možnost načasovánı́ inovace, určenı́ počı́tačů, kterých se bude týkat, instalaci opravných balı́čků, apod. Existujı́ také dalšı́ způsoby instalace či inovace. Lze použı́t i netradičnı́ možnosti typu bitové kopie (obraz disku, image) systémového disku, se kterou nebude pracovat server Windows, ale Linux nebo jiný operačnı́ systém (nebo použijeme speciálnı́ programy pro vytvořenı́ obrazu systémového disku na bootovacı́m CD nebo disketě, některé z nich jsou také postaveny na Linuxu, nebo běžı́ na jiném počı́tači v sı́ti), to je možnost velmi vhodná pro obnovu poškozeného systému (předem vytvořı́me „nepoškozený“ obraz), data by pokud možno měla být na jiném logickém disku nebo na sı́ti. Během pořizovánı́ bitové kopie systému (at’ už jakoukoliv metodou) kopı́rovaný systém nesmı́ běžet. Často je také nutné tento systém předem upravit (napřı́klad u nástroje Sysprep); upravovat nemusı́me, pokud bitovou kopii chceme použı́t jako zálohu našeho systému pro přı́padné pozdějšı́ znovunačtenı́ na tentýž počı́tač (ale pozor na přı́padné změny hardwaru). Automatizovaná instalace probı́há s minimem zásahů uživatele (správce), pro vstupy se použı́vajı́ soubory odpovědı́ (answer file, to jsou textové soubory s informacemi, které by bylo jinak nutné zadávat během instalace, přı́padně tady mohou být přı́kazy pro spuštěnı́ určitých programů včetně instalačnı́ch a konfiguračnı́ch nástrojů). Přı́pona souborů odpovědı́ bývá obvykle TXT nebo INF, napřı́klad sysprep.inf. Soubory odpovědı́ můžeme vytvářet bud’ ručně, a nebo s využitı́m specializovaného programu, napřı́klad Správce instalace (setupmgr.exe), který najdeme na instalačnı́m CD ve složce Support\Tools. Podrobné informace o automatizovaných instalacı́ch a o formě souborů odpovědı́ pro různé metody jsou v Resource Kitu5 pro zvolenou verzi Windows, a nebo na internetu6 . V přı́padě, že CD mechanika počı́tače nenı́ bootovacı́, instalace se provede tak, že nabootujeme z instalačnı́ diskety Windows 98 (ta se dá opatřit napřı́klad na www.bootdisk.com) a v zobrazeném menu zvolı́me Spustit systém s podporou CD-ROM. Vytvořı́ se virtuálnı́ CD disk, přes který již je přı́stupná CD mechanika. Přepneme se na tuto mechaniku (pı́smena jednotek mohou být posunutá) a instalaci spustı́me přı́kazem i386\winnt.exe (program setup.exe v prostředı́ DOSu nefunguje). To, jakou verzi systému máme, zjistı́me v nástroji Systém, přı́padně rychle pomocı́ přı́kazu winver 5 Resource Kit pro Windows 2000 je dokonce celý dostupný na internetu (stačı́ do vyhledávače zadat napřı́klad „Resource Kit 2000“). 6 Napřı́klad adresy http://technet.microsoft.com (ve vyhledávánı́ použijte „bezobslužná instalace“ nebo třeba „answer file installation“), http://www.adminxp.cz (ve vyhledávánı́ použijte „soubor odpovědı́“), http://www.google.com. P $ $ 6.3 INSTALACE WINDOWS 179 nebo ver. Některé verze Windows (včetně Windows XP) je nutné aktivovat. Nenı́ to totéž co registrace (registrace umožňuje využı́vat některé dalšı́ služby Microsoftu). Bez aktivace běžı́ systém po určitou dobu (60 dnů, Grace Period) bez jakýchkoliv restrikcı́.7 Aktivace nebývá nutná u některých typů licencı́, např. OEM (produkt byl aktivován při instalaci) nebo některých hromadných licencı́ch. Aktivaci také můžeme provést při automatizované instalaci úpravou souboru odpovědı́ (funguje, pokud je počı́tač připojen k internetu). P Samotná aktivace spočı́vá ve vygenerovánı́ kódu typického pro určitý počı́tač, vytvářı́ se na základě hardwarové konfigurace počı́tače (to je vlastně důvod, proč se po „razantnějšı́ch“ a opakovaných změnách konfigurace začne systém chovat jako neaktivovaný). Tento kód je uložen v souboru wpa.dbl v adresáři System32. Závisı́ na 10 parametrech, po změně 5 z nich je považován za neplatný. Aktivaci je teoreticky nutné provést při každém přeinstalovánı́ Windows, ale ve skutečnosti stačı́, když si včas zálohujeme soubor wpa.dbl a po přeinstalovánı́ ho vrátı́me do System32. Úkoly 1. V nápovědě nebo na internetu zjistěte, jaké parametry majı́ programy winnt a winnt32. Jak podle těchto parametrů můžeme určit umı́stěnı́ souboru odpovědı́? C 2. Stručně charakterizujte vlastnosti instalace z programů setup, winnt a sysprep (v souboru deploy.cab) na instalačnı́m disku systému, předevšı́m rozdı́ly mezi nimi. 6.3.2 Nástroje k bezobslužné instalaci Visty a novějšı́ch verzı́ Windows jsou od verze distribuovány na DVD (u staršı́ch verzı́ bylo CD) ve formátu WIM (Windows Imaging). Zatı́mco jiné typy obrazů disků jsou strukturovány podle stop na médiu, WIM je strukturován podle souborů (modulů). Pro automatizovanou instalaci potřebujeme bud’ jeden referenčnı́ (vzorový) počı́tač, který je kompletně nainstalovaný a nakonfigurovaný včetně instalace aplikacı́, a nebo instalačnı́ médium (pokud netrváme na automatizaci instalace aplikacı́). P Vždy je nutné vytvořit soubor odpovědı́. Od verze Vista jde o soubor ve formátu XML s názvem unattend.xml nebo autounattend.xml. Pro bezobslužnou instalaci budeme potřebovat některé z následujı́cı́ch nástrojů. Windows AIK (Automated Installation Kit)8 je sada nástrojů určených k usnadněnı́ automatizované instalace Windows. Je volně ke staženı́ na webu Microsoftu. Obsahuje několik nástrojů, které nás mohou zajı́mat (pro různé verze Windows zde najdeme trochu jinou množinu nástrojů), dva z nich jsou dále použı́vány: • ImageX – sloužı́ k zachycenı́ bitové kopie pro instalaci z již nainstalovaného počı́tače (dokáže zachytit nejen nainstalovaná Windows, ale i konfiguraci a aplikace), taktéž umožňuje manipulovat s bitovými kopiemi (přidávat nebo odstraňovat soubory), 7 Původně běžel systém bez aktivace v režimu snı́žené funkčnosti (některé funkce systému nebyly zprovozněny), od verze Vista SP1 a Windows Server 2008 již tomu tak nenı́. Grace Period byla u Windows Server 2008 R2 snı́žena na 30 dnı́. 8 Stačı́ zadat do Googlu řetězec windows aik site:microsoft.com . $ 6.3 INSTALACE WINDOWS 180 • SIM (Windows System Image Manager, také WSIM) – nástroj pro vytvářenı́ souborů odpovědı́, manipulaci s existujı́cı́mi bitovými kopiemi, atd. (ve staršı́ch verzı́ch se pro vytvářenı́ souborů odpovědı́ použı́val Setup Manager). Instaluje se poněkud nezvykle – stáhnutý soubor (měl by odpovı́dat verzi Windows, kterou máme na počı́tači nainstalovanou) je ve skutečnosti obraz disku (pro Vistu má přı́ponu IMG, pro Windows 7 přı́ponu ISO) a je poměrně velký (pro Vistu téměř 1 GB). Je nutné stáhnutý obraz vypálit na přenosný disk (nebo připojit jako virtuálnı́ mechaniku) a (v grafickém prostředı́, které se zobrazı́ po spuštěnı́ z disku) nainstalovat. Dalšı́ informace najdeme na adresách http://www.windowsnetworking.com/articles tutorials/Deploying-Vista-Understanding-Windows-AIK.html http://technet.microsoft.com/en-us/library/cc722301%28WS.10%29.aspx Projdeme si nástroje, které zde z Windows AIK využijeme. Obrázek 6.2: Windows SIM (v anglické verzi) SIM je nástroj s grafickým rozhranı́m, který lze kromě jiného použı́t pro vytvořenı́ souboru odpovědı́ a bezobslužnou instalaci z DVD. Po nainstalovánı́ AIK najdeme tuto aplikaci v menu Start ï Programy ï MS Windows AIK ï Správce bitových kopiı́ systému Windows (resp. Windows System Image Manager). Okno aplikace obsahuje několik podoken, nás zajı́majı́ podokna Bitová kopie (Windows Image v anglické verzi) a Soubor odpovědı́ (Answer File v anglické verzi). Podokno Bitová kopie sloužı́ k vytvořenı́ a modifikaci bitové kopie, ze které bude systém instalován, a v podokně Soubor odpovědı́ vytvářı́me a modifikujeme soubory odpovědı́ (můžeme jich mı́t i vı́ce). 6.3 INSTALACE WINDOWS 181 ImageX je nástroj s textovým rozhranı́m (aby byl použitelný i ve skriptu). Má několik funkcı́, které řı́dı́me přepı́nači (vždy lze použı́t jen jediný z hlavnı́ch přepı́načů, pak existujı́ ještě dodatečné přepı́nače a parametry). Sloužı́ k vytvářenı́ a správě WIM souborů. Hlavnı́ úlohou, při které se uplatňuje, je vytvořenı́ bitové kopie z nainstalovaného (včetně aplikacı́) referenčnı́ho počı́tače. Windows PE se hodı́ při vytvořenı́ bitové kopie referenčnı́ho počı́tače. Může být bud’ na optickém médiu (většinou CD) nebo na USB flash disku, prostředı́ PE spustı́me nabootovánı́m z tohoto datového média. Pokud nemáme (Windows PE obvykle bývá k dispozici na instalačnı́m DVD Windows), můžeme je vytvořit na počı́tači s nainstalovanou Vistou nebo vyššı́ verzı́ Windows: 1. Instalujeme Windows AIK. 2. Zvolı́me Start ï Programy ï MS Windows AIK a zvolı́me položku pro nástroje Windows PE (pokud pracujeme s nižšı́mi přı́stupovými oprávněnı́mi, tak na tuto položku klepneme pravým tlačı́tkem myši a zvolı́me spuštěnı́ s právy administrátora). 3. V přı́kazovém řádku PE, který se spustı́, použijeme přı́kaz copype i86 c:\winpe (platı́, pokud máme variantu pro 32bitovou hardwarovou architekturu; jestliže jde o variantu pro 64bitovou architekturu, použijeme mı́sto i86 volbu amd64 nebo ia64 podle typu procesoru), můžeme použı́t také jinou cestu k výslednému obrazu. V zadané složce se vytvořı́ adresářová struktura, ve které najdeme prostředı́ Windows PE (winpe.wim) a také bootovacı́ informace. 4. Do obrazu přidáme nástroj ImageX: • WIM soubor s obrazem připojı́me, abychom ho mohli modifikovat: imagex /mountrw c:\winpe\winpe.wim 1 c:\winpe\mount (připojujeme pro čtenı́ i zápis – /mountrw, dále zadáváme soubor s obrazem, následuje čı́slo 1 znamenajı́cı́ prvnı́ obraz v tomto souboru – v jednom WIM souboru může být vı́ce obrazů, obraz připojı́me do složky c:\winpe\mount), • přidáme do obrazu program imageX: copy C:\WAIK\tools\x86\imagex.exe c:\winpe\mount\windows\system32 (přı́padně napı́šeme správnou cestu k imagex.exe, pokud je jiná), • stejným způsobem zkopı́rujeme soubor wimscript.ini, použijeme stejná umı́stěnı́ jako v předchozı́m bodu (tento soubor je konfiguračnı́m souborem pro imagex.exe), • obraz odpojı́me přı́kazem imagex.exe /unmount /commit c:\winpe\mount 5. Pokud chceme vytvořit bootovacı́ CD, musı́me nejdřı́v stanovit, že obraz prostředı́ Windows PE má být zároveň bootovacı́m programem (tj. spustı́ se po nabootovánı́ z média): copy c:\winpe\winpe.wim c:\winpe\iso\sources\boot.wim /y 6. vytvořı́me ISO soubor, který pak lze vypálit na CD: oscdimg -n -h -bc:\winpe\etfsboot.com c:\winpe\iso c:\winpe\winpe.iso (program oscdimg je součástı́ Windows AIK). Vytvořený ISO obraz vypálı́me na CD v kterémkoliv programu, který to umı́ (napřı́klad ImgBurn). Bod 4 provedeme jen tehdy, pokud chceme do obrazu něco přidávat, jinak je nepovinný. Jestliže chceme mı́t Windows PE na USB flash disku mı́sto na CD, použijeme postup popsaný na stránce $ 6.3 INSTALACE WINDOWS 182 http://www.svrops.com/svrops/articles/winvistape2.htm nebo v přı́kladu 5.2 na straně 151 v těchto skriptech – jde o nahrazenı́ poslednı́ho bodu postupu úpravou USB flash disku a následným zkopı́rovánı́m potřebných souborů. Sysprep bylo nutné do staršı́ch verzı́ (Windows XP, Server 2003 a staršı́ch) doinstalovat, od verze Windows Vista a Server 2008 je již součástı́ systému a najdeme jej ve složce ...\System32\Sysprep. Hlavnı́m účelem nástroje Sysprep je odstranit všechny specifické informace (SID, dodatečně nainstalované ovladače Plug&Play zařı́zenı́, body obnovy, atd.), většinou v přı́pravě systému pro pořı́zenı́ obecně použitelné bitové kopie. $ Obrázek 6.3: Nastavenı́ nástroje Sysprep (česká a anglická verze) Tento nástroj lze spouštět jak v textovém, tak i v grafickém režimu (grafické rozhranı́ české a anglické varianty vidı́me na obrázku 6.3). Podrobný popis nástroje najdeme napřı́klad na stránce http://www.windowsnetworking.com/articles tutorials/Deploying-Vista-Part5.html. Okno nástroje Sysprep obsahuje tři prvky: • v rozbalovacı́m seznamu určujeme, zda chceme systém spustit v auditovacı́m režimu (audit mode; je určen pro OEM prodejce, v tomto režimu lze měnit nastavenı́ instalace a ze souboru odpovědı́ se načı́tajı́ předevšı́m sekce obsahujı́cı́ v názvu řetězec „audit“), a nebo spustit uvı́tacı́ centrum při dalšı́m startu systému (tuto volbu vidı́me na obrázcı́ch, zvolı́me ji), • můžeme zaškrtnout pole, které provede zobecněnı́ (generalizaci) – zaškrtneme (protože chceme odstranit všechny specifické informace), • určı́me, co se má dı́t při ukončenı́ nástroje Sysprep – restart, vypnutı́ nebo nic (zvolı́me některou z prvnı́ch dvou možnostı́). Pokud budeme výsledný obraz načı́tat v prostředı́ Windows PE, předem zasuneme datové médium s Windows PE a v poslednı́ volbě zadáme restart, jestliže chceme obraz načı́tat po sı́ti, zvolı́me vypnutı́ a v BIOSu nastavı́me bootovánı́ ze sı́tě. Úkoly 1. Najděte na internetu seznam nástrojů, které jsou součástı́ Windows AIK (můžete zkusit napřı́klad řetězec windows aik site:technet.microsoft.com na Googlu). C 6.3 INSTALACE WINDOWS 183 2. Najděte na internetu podrobný popis nástroje imagex (včetně parametrů přı́kazu), je možné použı́t podobný způsob zı́skánı́ informacı́ jako v předchozı́m bodu. 3. Zjistěte, které nástroje jsou obsaženy ve Windows PE (můžete zkusit napřı́klad vyhledávacı́ řetězec windows pe tools site:technet.microsoft.com na Googlu). 4. Vzpomeňte si, k jakým typům úloh lze použı́t Windows PE a jak se vlastně spouštı́ a použı́vá (o Windows PE jsme slyšeli už v minulém semestru). Pokud máte možnost, vytvořte si vlastnı́ Windows PE s nástroji, které uznáte za potřebné. R 5. Na internetu (napřı́klad na výše uvedené adrese) zjistěte, jaké přepı́nače lze u nástroje Sysprep zvolit, pokud je použı́ván v textovém režimu (přepı́nače odpovı́dajı́ volbám, které zde byly popsány). Sestavte přı́kaz odpovı́dajı́cı́ nastavenı́m popsaným pro grafický režim nástroje. R 6.3.3 Instalace Visty a novějšı́ch verzı́ Pokud instalujeme na počı́tač, u kterého přı́mo sedı́me, stačı́ instalačnı́ DVD (nebo instalačnı́ USB flash disk, jak bylo naznačeno výše, přı́prava flash disku je v přı́kladu 5.2 na straně 151). Mnohé ze sekce o instalaci Windows XP platı́ i pro instalaci Windows Vista. Můžeme bud’ provést čistou instalaci, inovaci (s určitými problémy) nebo instalaci vedle jiného operačnı́ho systému. Taktéž nutnost aktivace zůstává zachována. Windows Vista majı́ přepracované jádro a z toho důvodu se lišı́ také instalace. Jádro je od této verze silně inspirováno unixovými systémy – je modulárnı́ a vlastnosti výsledné varianty k instalaci jsou určeny poskládánı́m jednotlivých modulů. Samotný princip instalace je inspirován principem, který se objevil o několik let dřı́ve u některých linuxových distribucı́ – živé (bootovacı́) médium umožňuje během instalace běžně pracovat. V přı́padě Windows je použito prostředı́ Windows PE 2.0 (a novějšı́), které může být jednı́m z modulů. Jak bylo výše uvedeno, Windows jsou od verze Vista distribuovány na DVD ve formátu WIM. Jedná se vlastně o obraz disku, který je komprimovaný (pomocı́ různých postupů je zmenšena jeho velikost) a neredundantnı́ (každá informace je zde jen jednou, i když po instalaci může být na disku na vı́ce různých mı́stech). Zatı́mco jiné typy obrazů jsou strukturovány podle stop na médiu, WIM je strukturován podle souborů (modulů). Soubory s přı́ponou WIM jsou technicky vlastně archivy podobně jako ZIP, každý může obsahovat i několik tzv. obrazů (obvykle souborů nebo jiných typů dat). WIM Existujı́ pouze dvě varianty instalačnı́ho DVD – 32bitová a 64bitová podle toho, pro jakou hardwarovou architekturu je DVD určeno. To znamená, že DVD obsahuje všechny existujı́cı́ moduly pro danou hardwarovou architekturu a lze je použı́t pro instalaci kterékoliv varianty Windows (Home, Ultimate, atd.). Moduly z obrazu, které se majı́ nainstalovat, jsou stanoveny při instalaci podle typu zakoupené licence (podle Product Key, který uživatel obdržel při koupi). Pokud Product Key nenı́ během instalace zadáván, vybı́ráme variantu ze seznamu během instalace. Lze také použı́t automatizovanou instalaci. Potřebujeme bud’ jeden referenčnı́ (vzorový) počı́tač, který je kompletně nainstalovaný a nakonfigurovaný včetně instalace aplikacı́, a nebo instalačnı́ médium (pokud netrváme na automatizaci instalace aplikacı́). P 6.3 INSTALACE WINDOWS 184 Soubor odpovědı́ je od verze Vista ve formátu XML s obvyklým názvem unattend.xml nebo autounattend.xml. Podı́váme se na dvě možnosti bezobslužné instalace. Bezobslužná instalace z DVD znamená instalaci s využitı́m instalačnı́ho média (DVD) a souboru odpovědı́. Celý postup je následujı́cı́: 1. Stáhneme a nainstalujeme Windows AIK. Spustı́me výše popsaný nástroj SIM a připojı́me instalačnı́ DVD Windows (bud’ vložı́me do mechaniky nebo připojı́me jeho obraz do virtuálnı́ mechaniky). 2. Na instalačnı́m DVD najdeme složku sources a v nı́ soubor install.wim. Zkopı́rujeme ho někam na pevný disk, předpokládejme umı́stěnı́ c:\sources\install.wim. 3. Stanovı́me bitovou kopii, pro kterou budeme vytvářet soubor odpovědı́: • V SIM, podokně Bitová kopie, klepneme pravým tlačı́tkem na položku Vyberte bitovou kopii a v kontextovém menu zvolı́me Vybrat bitovou kopii. • V dialogovém okně najdeme cestu k souboru install.wim, který jsme uložili na pevný disk (zde c:\sources\install.wim). Otevře se okno se seznamem bitových kopiı́, které jsou k dispozici (odpovı́dajı́ variantám Windows pro danou verzi). Vybereme variantu, kterou potřebujeme (na kterou máme licenci). • Může se zobrazit upozorněnı́, že pro vybranou bitovou kopii ještě nenı́ vytvořen soubor katalogu, což provedeme (klepneme na tlačı́tko Ano , resp. OK v tomto okně). 4. Začneme vytvářet soubor odpovědı́ autounattend.xml tak, že v SIM v podokně Soubor odpovědı́ klepneme pravým tlačı́tkem na položku Vytvořit nebo otevřı́t soubor odpovědı́ a vybereme Nový soubor odpovědı́. 5. Naplnı́me soubor odpovědı́ tak, že v podokně Bitová kopie tak, že postupně projdeme položky zde uvedené (jsou ve stromové struktuře) a na ty, které budeme chtı́t zařadit, klepneme pravým tlačı́tkem myši. V zobrazeném kontextovém menu klepneme na konkrétnı́ položku, kterou chceme vložit do souboru odpovědı́. Takto můžeme napřı́klad stanovit, jak se má rozdělit pevný disk apod. 6. Položka, kterou jsme vybrali v podokně Bitová kopie, se objevı́ i v podokně Soubor odpovědı́, taktéž ve stromové struktuře. Procházı́me jednotlivé položky; po klepnutı́ na položku se ve vedlejšı́m podokně Vlastnosti zobrazı́ konkrétnı́ vlastnosti vybrané položky, které můžeme pozměnit. 7. Po provedenı́ všech potřebných změn uložı́me vytvořený soubor odpovědı́ pod názvem autounattend.xml na pevný disk a pak zkopı́rujeme na disketu nebo USB flash disk, a to do kořenového adresáře (nesmı́ být v žádné složce!). (Přesun k cı́lovému počı́tači) 8. Na počı́tači, kde chceme provést tento typ instalace, vložı́me do přı́slušné mechaniky/konektoru disketu nebo USB flash disk se souborem odpovědı́. 9. Dále do DVD mechaniky vložı́me instalačnı́ DVD Windows. P 6.3 INSTALACE WINDOWS 185 10. Restartujeme tento počı́tač a necháme proběhnout instalaci. Soubor odpovědı́ by měl být automaticky rozpoznán a použit. Kdyby došlo k nějaké chybě (napřı́klad kdyby nebylo správně detekováno médium se souborem odpovědı́, probı́hala by instalace klasickým způsobem, zadávali bychom všechny informace „ručně“. Bezobslužná instalace podle referenčnı́ho počı́tače představuje možnost nainstalovat a nakonfigurovat referenčnı́ počı́tač (včetně instalace aplikacı́), vytvořit bitovou kopii takto nakonfigurovaného systému a použı́t pro instalaci dalšı́ch počı́tačů. Oproti předchozı́mu postupu je výhodou instalace „hotového“ systému na všechny počı́tače. Předně potřebujeme referenčnı́ (výchozı́) počı́tač s nainstalovaným operačnı́m systémem a všemi aplikacemi, nakonfigurovaný. Tento počı́tač nebude v dané instalaci použı́ván pro běžnou práci, protože v následujı́cı́m postupu z něj budou některé důležité informace odstraněny. Postup: 1. Nainstalujeme a nakonfigurujeme referenčnı́ počı́tač. Ručně smažeme vše, co nelze zpracovat jinak a přitom to v bitové kopii nechceme (napřı́klad některé aplikace, nepotřebné uživatelské účty, dočasné soubory apod.). 2. Vytvořı́me soubor odpovědı́ stejným způsobem, jak bylo popsáno v předchozı́m textu (můžeme ho nazvat napřı́klad sysprep.xml, je to celkem jedno). Soubor odpovědı́ můžeme vytvořit na referenčnı́m počı́tači, ale protože je k tomu obvykle třeba Windows AIK, většinou jej vytvářı́me jinde (třeba na serveru). Několik ukázek takového souboru je napřı́klad na http://www.svrops.com/svrops/articles/sysprepvista.htm. 3. Soubor odpovědı́ umı́stı́me na referenčnı́ počı́tač do adresáře ...\System32\Sysprep. 4. Na referenčnı́m počı́tači spustı́me nástroj Přı́prava systému (Sysprep) popsaný na straně 182. Sysprep připravı́ tento počı́tač pro vytvořenı́ bitové kopie – odstranı́ všechny „specifické“ informace (identifikátory HW a SW, autentizačnı́ informace apod.). Jedná se o nástroj s grafickým rozhranı́m (vidı́me na obrázku 6.3), ve kterém provedeme tyto kroky: • zaškrtneme pole Zobecnit (Generalize), • v rozbalovacı́m seznamu Akce čištěnı́ systému (System Cleanup Action) zvolı́me Zobrazit prostředı́ při prvnı́m zapnutı́ počı́tače (Enter System Out-of-Box Experience (OOBE)) • v rozbalovacı́m seznamu Možnosti vypnutı́ (Shutdown Options) necháme volbu pro restart. To vše můžeme souhrnně provést přı́kazem sysprep /oobe /generalize /shutdown /unattend:sysprep.xml (zadáme takový název souboru odpovědı́, který jsme vytvořili). 5. Po restartu nabootujeme Windows PE (měli bychom se předem přesvědčit, že v BIOSu je nastaveno jako prvnı́ bootovánı́ z datového média, na kterém máme Windows PE). 6. Vytvořı́me obraz referenčnı́ho počı́tače pomocı́ nástroje XImage, který je součástı́ Windows AIK, a pokud jsme Windows PE vytvořili výše popsaným způsobem, tak tento nástroj máme k dispozici ve Windows PE. Ted’ záležı́ na tom, kam vlastně chceme obraz uložit. Může to být na výměnné médium, ale je třeba počı́tat s tı́m, že půjde o poměrně mnoho dat. • Jestliže chceme obraz ukládat na sı́t’, měli bychom se nejdřı́v připojit k serveru, který bude úložištěm: net use Z: \\server\adr_instalace /user:doména\uživatel P 6.3 INSTALACE WINDOWS 186 (přı́kaz net jsme se učili na straně 31), zadali jsme pı́smeno, pod kterým má být sı́t’ový disk připojen, pak server a adresář na něm (doplnı́me podle skutečnosti), dále je důležité se na serveru přihlásit pod uživatelským jménem s dostatečně vysokými přı́stupovými oprávněnı́mi k zadanému adresáři, také doplnı́me podle skutečnosti. Budeme požádáni o zadánı́ hesla. • Pokud chceme obraz uložit na výměnné médium, stačı́ ho připojit (pro zjednodušenı́ budeme předpokládat, že je také dostupné pod pı́smenem Z:. Také by mohl nastat problém se souborovým systémem – napřı́klad na USB flash disk nelze ukládat tak velké soubory, pokud je naformátován souborovým systémem FAT (což obvykle je), takže bychom jej měli předem naformátovat na NTFS. V takovém přı́padě by bylo lepšı́ použı́t spı́še externı́ pevný nebo SSD disk s vhodným souborovým systémem. 7. Obraz systému vytvořı́me přı́kazem imagex /capture c: z:\winXXX.wim ”Komentář” /compress maximum /check (capture znamená zachytit), což znamená, že vytvářı́me co nejvı́ce komprimovaný obsah disku C:, ukládáme do zadaného WIM souboru a chceme provést kontrolu integrity výsledného souboru (poslednı́ parametr). Komentář může usnadnit rozpoznávánı́, pokud máme vytvořeno vı́ce obrazů. Soubor můžeme pojmenovat jakkoliv (jen přı́pona je důležitá), pı́smena XXX mohou být třeba verze Windows nebo bližšı́ určenı́ typu klienta. Pokud ukládáme na sı́t’, nemusı́me použı́t syntaxi s pı́smenem jednotky, ale můžeme napsat UNC cestu (pak je zbytečné připojovat sı́t’ový disk k jednotce přı́kazem net use z předchozı́ho bodu, ovšem zadánı́ hesla se nevyhneme). (Přesun k cı́lovému počı́tači nebo přı́stup přes sı́t’) 8. Na cı́lovém počı́tači opět nabootujeme Windows PE a připojı́me úložiště, na kterém máme uložen obraz systému (sı́t’ový disk nebo výměnné médium). 9. Pokud je to nutné (často je), vytvořı́me na disku oddı́l pro instalaci. Pro tento účel můžeme použı́t přı́kazy diskpart (vytvořenı́ oddı́lu) a format (vytvořenı́ souborového systému, pravděpodobně NTFS). S oběma nástroji jsme se seznámili v předchozı́ch kapitolách. 10. Aplikujeme (načteme) sejmutý obraz, který jsme vytvořili na referenčnı́m počı́tači: imagex /apply z:\winverzexxx.wim ”Komentář” c: (všimněte si, že posloupnost parametrů určujı́cı́ch WIM soubor a disk je opačná oproti posloupnosti při použitı́ přepı́nače /capture). Nástroj ImageX lze použı́vat kromě jiného i pro offline práci s vytvořeným obrazem. Obraz připojı́me do souborového systému parametrem /mountrw (podrobnosti v nápovědě přı́kazu), pak s nı́m pracujeme napřı́klad v Průzkumnı́kovi (můžeme přidávat nebo odstraňovat soubory, aktualizovat apod.), po provedených změnách musı́me obraz odpojit parametrem /unmount. Bitovou kopii referenčnı́ho počı́tače můžeme vytvořit a přenést na sı́t’ také jinak než pomocı́ nástroje ImageX – s využitı́m služby WDS. Úkoly 1. Zjistěte, co vše lze dělat pomocı́ ImageX (jaké má parametry apod.). C 6.4 AKTUALIZACE SYSTÉMU 187 2. Nemusı́te znát výše popsané postupy do podrobna, ale shrňte si, co vše k bezobslužným instalacı́m potřebujete. 3. OEM prodejci často využı́vajı́ OOBE (Out-Of-Box Experience) pro úpravy instalace Windows, také existuje možnost vytvořit soubor oobe.xml (pro Windows od verze Vista). Pokuste se zjistit (třeba na internetu), co vše lze takto ovlivňovat. Dobrým zdrojem může být napřı́klad adresa http://www.windowsnetworking.com/articles tutorials/Deploying-Vista-Part9.html, kde najdeme velmi zajı́mavý seriál o nasazenı́ Windows Vista (a novějšı́ch verzı́). 6.3.4 R Služba pro nasazenı́ systému Windows (WDS) Služba pro nasazenı́ systému Windows (WDS, Windows Deployment Service) je nástupcem služby RIS ve Windows od verze Vista. Narozdı́l od bezobslužné instalace z DVD umožňuje instalovat také po sı́ti, a narozdı́l od staršı́ služby RIS je odstraněna závislost na hardwaru (lze instalovat i na počı́tače s různým hardwarovým vybavenı́m, s pouhým rozlišenı́m na 32- nebo 64bitovou architekturu). P Stejně jako RIS, také WDS je služba na straně serveru, musı́me tedy mı́t v sı́ti server Windows Server 2008 nebo novějšı́. V sı́ti je vyžadováno funkčnı́ Active Directory, DHCP a DNS server. Aby WDS mohla řádně fungovat, musı́ být na serveru nainstalována a musı́ obsahovat • alespoň jednu spouštěcı́ bitovou kopii, která sloužı́ ke startu klientského počı́tače přes sı́t’(lze pracovat na klientovi, i vzdáleně, ale systém běžı́ na serveru), ale také např. k řı́zenı́ instalace klientského počı́tače z některé instalačnı́ bitové kopie, nemusı́me vytvářet Windows PE, • alespoň jednu instalačnı́ bitovou kopii (z té se instalujı́ klientské počı́tače). Ve Windows Server 2008 se pracuje s rolemi, z nichž jedna je také WDS. Tedy instalace WDS probı́há přidánı́m této role. Instalujeme běžným způsobem jako cokoliv jiného – na serveru máme k dispozici jakousi hlavnı́ grafickou konzolu Správce serveru (Server Manager) dostupnou hned z tlačı́tka Start, v této konzole najdeme instalovánı́ nové role a několika klepnutı́mi myšı́ přidáme roli WDS. Popis činnosti a správy WDS je nad rámec těchto skript, proto nezbývá než odkázat na literaturu (vše je popsáno prakticky v každé knize určené pro správce Windows serveru). WDS dokáže ulehčit mnohé z úkolů, které jsme probı́rali výše o instalaci Windows. O instalaci Windows najdeme dalšı́ informace na adresách http://drnek.spaces.live.com/blog/cns!509D00E35B2D7B2C!198.entry http://technet.microsoft.com/en-us/library/cc749003%28WS.10%29.aspx http://technet.microsoft.com/en-us/library/cc749447%28WS.10%29.aspx 6.4 Aktualizace systému Podpora aktualizacı́ je součástı́ rozhranı́ Windows od verze 98, pod názvem Windows Update – v novějšı́ch verzı́ch českých variant systému Automatické aktualizace. Microsoft stanovil druhé úterý každého měsı́ce pro den pravidelných bezpečnostnı́ch záplat (tomu dni se také řı́ká „Patch Day“, den záplat), ale bezpečnostně závažné záplaty jsou distribuovány i mimo tyto dny. O 6.5 CHYBY PŘI BĚHU APLIKACÍ A SYSTÉMU 188 Z předchozı́ho semestru už vı́me, jaké typy aktualizacı́ Windows existujı́ a jak lze řı́dit jejich využı́vánı́ na lokálnı́m počı́tači. Jestliže však ve většı́ organizaci chceme zajistit aktualizaci všech počı́tačů v sı́ti, nenı́ vhodné nechávat každého uživatele zvlášt’stahovat aktualizace ze serveru Microsoft Update. Obvyklým řešenı́m je stanovenı́ lokálnı́ho serveru WSUS (Windows Server Update Services), který stahuje aktualizace z webu Microsoftu a dále je distribuuje v lokálnı́ sı́ti. Server WSUS (samozřejmě softwarový server, ne kus hardwaru) lze stáhnout ze stránek http://technet.microsoft.com/enus/wsus/default.aspx. Na téže stránce najdeme také návod k instalaci (dokonce v češtině). Samotnou instalacı́ nás provázı́ průvodce (můžeme instalovat bud’ z grafického režimu formou přidánı́ role, a nebo jendoduše spuštěnı́m instalačnı́ho souboru), tedy jen potvrzujeme a zadáváme přı́padné pozměňujı́cı́ informace. Měli bychom si předem rozmyslet, kam budou ukládány aktualizace stáhnuté z internetu (dostatečně velký adresář nebo disk), také bychom měli vědět, který webový server máme nainstalován (to administrátoři obvykle vědı́) a který databázový systém použı́váme (stačı́ napřı́klad MySQL). Někdy je nutné upravit firewall a proxy server (pokud je použı́váme) tak, aby WSUS server měl bezproblémový přı́stup k aktualizacı́m na webu Microsoftu. Použı́vajı́ se porty 80 (pro HTTP) nebo 443 (pro HTTPS a SSL). Konfigurace stahovánı́ aktualizacı́ (které balı́čky se majı́ stahovat včetně jazykových verzı́ a verzı́ systému, jak často apod.) se provádı́ obvykle v konzole Update Services na serveru WSUS. Je to běžná konzola s unifikovaným grafickým rozhranı́m, jaké známe napřı́klad z konzoly Správa počı́tače (compmgmt.msc). Dále je nutné nakonfigurovat klientské počı́tače v sı́ti. Nejobvyklejšı́ možnostı́ je využitı́ zásad skupiny (v minulém semestru jsme se s nimi seznámili spı́še na lokálnı́m počı́tači, ale jde o zásady použitelné předevšı́m na úrovni lokálnı́ sı́tě). V konzole Zásady skupiny (mı́stně nebo vzdáleně na lokálnı́m počı́tači) vybereme v části konfigurace počı́tače větev Šablony pro správu, podvětev Součásti systému Windows a najdeme Windows Update (pokud tam nenı́, musı́me importovat soubor wuau.adm přes kontextové menu položky Šablony pro správu). V tomto uzlu nás zajı́majı́ položky P $ $ • Konfigurace automatických aktualizacı́ – poklepeme na položku, povolı́me, určı́me, zda se aktualizace majı́ přı́mo stahovat, nebo jestli se má pouze zobrazit upozorněnı́, atd., • Určenı́ umı́stěnı́ intranetové služby MS Update – poklepeme, povolı́me, zadáme adresu našeho WSUS serveru (do obou polı́ – pro zjišt’ovánı́ aktualizacı́ i statistik). Počı́tače v sı́ti lze rozdělit do skupin (to je ostatně obvyklé zvláště ve velkých sı́tı́ch) a použı́vat pro ně různé konfigurace i co se týče aktualizacı́. Přes konzolu automatických aktualizacı́ na serveru také můžeme kromě jiného sledovat stav aktualizacı́ na jednotlivých počı́tačı́ch. Úkoly 1. Ověřte si, jak vlastně jsou nastaveny automatické aktualizace na vašem počı́tači – zda jsou stahovány a instalovány automaticky. 2. Pokud na svém počı́tači nemáte v Zásadách skupiny položku Windows Update, importujte jejı́ ADM soubor výše popsaným způsobem. 3. Podı́vejte se, jak jsou v této položce nastaveny zásady, předevšı́m odkud stahujete aktualizace. C 6.5 CHYBY PŘI BĚHU APLIKACÍ A SYSTÉMU 6.5 189 Chyby při běhu aplikacı́ a systému Někdy se stane, že se aplikace při své práci dostane do nekonečné smyčky nebo dojde k uváznutı́ při čekánı́ na prostředek (bude probı́ráno na přednáškách), a nereaguje. U Win aplikacı́ to poznáme ve Správci úloh (známe z předchozı́ho semestru) označenı́m „neodpovı́dá“ u této aplikace. Ve Správci úloh také můžeme tuto aplikaci násilně ukončit označenı́m aplikace a stisknutı́m tlačı́tka Ukončit úlohu. Pokud je některá aplikace spuštěna v celoobrazovkovém režimu (DOS aplikace, Flash, prezentace – PowerPoint, Adobe Reader), a „zasekne se“ nebo nenabı́zı́ možnost pro své ukončenı́, přesuneme se do Windows, kde se dá „zlikvidovat“: Alt+Enter Alt+Tab Ctrl+Esc O $ (do okna), pak v kontextovém menu tlačı́tka aplikace na Hlavnı́m panelu zvolı́me Zavřı́t, (přepnutı́ úlohy), podobně jako v předchozı́m přı́padě, nebo (otevřenı́ menu Start), podobně jako v předchozı́ch přı́padech, Ctrl+Alt+Del nebo Ctrl+Shift+Esc zobrazı́me Správce úloh, v něm aplikaci ukončı́me. Jestliže je poškozen některý z chráněných systémových souborů (nebo přepsán při instalaci nové aplikace), lze ho opravit programem System File Checker. Tento program obnovuje systémové soubory ze zálohy. Spustı́me ho přı́kazem sfc (vlastně ho už známe) při použitı́ vhodných parametrů (viz nápovědu přı́kazu – napřı́klad je možné spustit okamžitou kontrolu, kontrolu při přı́štı́m spuštěnı́ Windows nebo pravidelnou kontrolu při každém spuštěnı́. Modrá obrazovka („obrazovka smrti“, BSOD – Blue Screen of Death, podle terminologie Microsoftu „obrazovka Stop“) se zobrazı́ při narušenı́ jádra systému (chybějı́cı́ nebo poškozená část systému, zaseknutı́ systémové části, prováděnı́ některého kódu ve smyčce, spuštěnı́ vı́ce antivirových programů či firewallů zároveň, . . . ), někdy za to může virus. Modrou obrazovku generuje vždy jádro systému. Často je jedinou možnostı́ restart počı́tače. Pokud se tato obrazovka objevı́ při startu systému, je to zřejmě způsobeno nesprávnou instalacı́ nebo konfiguracı́ některého zařı́zenı́. Řešenı́m je spustit Windows v nouzovém režimu a prohlédnout protokol bootlog.txt nebo ntbtlog.txt. Pokud se objevı́ modrá obrazovka, systém (s NT jádrem) vytvořı́ soubor výpisu stavu paměti, ze kterého je možné zjistit přesnou přı́činu tohoto stavu (je použitelný také v přı́padě, že se nepodařı́ nastartovat systém, jen zkopı́rujeme soubor): • omezený výpis paměti (ve složce Windows\Minidump na systémovém disku, zabı́rá jen 64 kB paměti), obsahuje pouze zásobnı́k vlákna, které způsobilo pád jádra, • výpis stavu paměti jádra (tamtéž, rozsáhlejšı́), obsahuje výpis paměti použı́vané jádrem, • úplný výpis stavu paměti (v souboru Memory.dmp na systémovém disku, zabı́rá mı́sto odpovı́dajı́cı́ fyzické kapacitě operačnı́ paměti plus 1 MB) a obsahuje výpis paměti jak jádra, tak i uživatelského prostoru (tj. všech běžı́cı́ch procesů). O tom, který výpis bude generován, rozhodujeme pomocı́ nástroje Systém, záložka Upřesnit, Spuštěnı́ a zotavenı́ systému, tlačı́tko Nastavenı́ (nejobvyklejšı́ volbou je minidump, omezený výpis paměti). Použitelný je také soubor Pagefile.sys na systémovém disku (stránkovacı́ soubor, obsahuje celou logickou pamět’). O P P 6.5 CHYBY PŘI BĚHU APLIKACÍ A SYSTÉMU 190 V souboru s výpisem paměti jako takovém bychom se jen těžko orientovali. Pro jeho analýzu se použı́vajı́ nástroje na laděnı́ jádra. Informace najdete v přı́loze a nebo na adrese http://www.zezula.net/cz/prog/pm os debug.html. Jestliže se objevı́ chyba při startu Windows z těchto způsobů: (nelze nastartovat Windows), reagujeme některým $ 1. Použijeme některou možnost pro nouzový režim (stiskneme F8 při startu systému, viz str. 172), může to být i obnovenı́ pomocı́ Poslednı́ známé platné konfigurace. V nouzovém režimu můžeme pro obnovenı́ systému použı́t mimo jiné i nástroj Obnovenı́ systému (od verze XP), obnovit registr ze zálohy, spouštět různé programy včetně nástrojů pro konfiguraci a úpravu registru (samozřejmě podle typu spuštěnı́ nouzového režimu). 2. Spustı́me Konzolu pro zotavenı́ nebo Windows PE, platı́ pro systémy s NT jádrem). 3. Ve Windows NT 4.x a 2000 lze vytvořit disk se zálohou systému – Záchrannou a opravnou disketu (v nástroji Zálohovánı́, možnost Záchranná opravná disketa), a to včetně registru, ten můžeme vedle dalšı́ch možnostı́ opravy využı́t v Konzole pro zotavenı́, volba Opravit . . . pomocı́ procesu záchranné opravy, možnost ručnı́ opravy. Záchranný disk musı́me předem vytvořit!!! 4. Ve Windows XP je možnost vytvořenı́ záchranné opravné diskety nahrazena možnostı́ Automatické obnovenı́ systému, dostupnou (kromě jiných umı́stěnı́) v nástroji Zálohovánı́ (ntbackup.exe). Systém zálohujeme v době, kdy je funkčnı́ (také v nástroji Zálohovánı́). Vytvořenou zálohu (datové médium s vlastnı́ zálohou a disketu se zálohou konfigurace disku) máme možnost obnovit také v přı́padě, že se nepodařı́ spustit Windows: při spuštěnı́ počı́tače nabootujeme z instalačnı́ho CD. Brzy po startu počı́tače (ještě v textové části instalace) se objevı́ (na krátkou dobu!) výzva „Stiskněte klávesu F5 pro spuštěnı́ Automatického obnovenı́ systému.“ Stiskneme klávesu F5 a dále provedeme to, co po nás proces bude chtı́t (předevšı́m bychom měli mı́t připraven datový nosič se zálohou). 5. V systému s DOS jádrem můžeme nabootovat ze spouštěcı́ diskety. Tu vytvořı́me v nástroji Přidat nebo odebrat programy, záložka Spouštěcı́ disketa. Po naformátovánı́ můžeme na disketu zkopı́rovat pár nástrojů, které bychom mohli přı́padně potřebovat, musı́ to být programy nezávislé na registru, DLL knihovnách apod. Takto vytvořená disketa neumožňuje přı́stup na disky NTFS (pokud neseženeme prográmek, který to „zařı́dı́ “). 6. Použijeme jiné nástroje, které máme momentálně k dispozici (jsou také specializované nástroje použitelné pro tyto účely). Spouštěcı́ disketu pro bootovánı́ vytvořenou ve Windows 9x nebo ME lze ve skutečnosti použı́t i ve Windows 2000/XP. Můžeme ji dokonce v těchto systémech i vytvořit (i když při jejı́m použitı́ můžeme mı́t k dispozici méně možnostı́ než u spouštěcı́ diskety vytvořené ve Windows s DOS jádrem), a to tak, že do disketové mechaniky zasuneme disketu, zobrazı́me jejı́ kontextové menu (třeba v Průzkumnı́kovi) a vybereme Naformátovat. V možnostech formátovánı́ použijeme volbu Vytvořit spouštěcı́ disketu MSDOS. Ve skutečnosti je to spouštěcı́ disketa Windows ME (po nabootovánı́ z této diskety si to ostatně můžeme ověřit přı́kazem VER). Ukázka je na obrázku 6.4. $ 6.5 CHYBY PŘI BĚHU APLIKACÍ A SYSTÉMU 191 Obrázek 6.4: Vytvořenı́ spouštěcı́ diskety ve Windows XP Startovacı́ diskety pro různé verze Windows jsou ke staženı́ na mnoha mı́stech na internetu, napřı́klad na www.bootdisk.com (je tam také spousta dalšı́ch užitečných informacı́ včetně HowToGuides – „Jak na to“). Obsah standardnı́ startovacı́ diskety můžeme doplnit některými užitečnými programy, které se mohou hodit, pokud Windows nelze spustit, přı́padně část obsahu nahradit jinými programy. Doporučuje se napřı́klad přidat nástroje ntfsdos (http://www.sysinternals.com, pro read-only podporu NTFS disků), Shsucdx (http://www.geocities.com/jadoxa/shsucdx, podpora CD-ROM, náhrada mscdex.exe), přı́padně pkunzip.exe (a co se dá, předem zabalı́me do ZIP archivu, program pkunzip to v přı́padě potřeby rozbalı́). Chyby na ovladači: Ve Windows XP máme v přı́padě instalace chybného ovladače možnost vrátit změny na ovladači. Ve Správci zařı́zenı́ (ten je dostupný v nástroji Systém, karta Hardware) najdeme zařı́zenı́, které dělá problémy, zobrazı́me jeho vlastnosti a na kartě Ovladač použijeme tlačı́tko Vrátit změny ovladače. To je samozřejmě použitelné pouze tehdy, když se dostaneme do grafického prostředı́ Windows, funkce má pouze odbourat nutnost ovladač ručně odinstalovat a nainstalovat ten původnı́. $ $ Jinou možnostı́ nápravy je návrat k poslednı́ funkčnı́ konfiguraci nebo nástroj Obnovenı́ systému. Ovladače zařı́zenı́ mohou být v čerstvě uvedené verzi Windows velký problém. Za určitých okolnostı́ je možné použı́t režim kompatibility pro ovladače – pokud je ovladač nebo alespoň jeho instalačnı́ program reprezentován spustitelným souborem, ve Vlastnostech zástupce tohoto programu nastavı́me režim kompatibility tak, jak bylo výše popsáno. Úkoly 1. Vyzkoušejte zobrazenı́ startovacı́ nabı́dky při startu operačnı́ho systému a prohlédněte si položky zobrazované nabı́dky. Spust’te systém v nouzovém režimu. C 6.6 SPRÁVA SOFTWARU 192 2. Zjistěte, jaký typ výpisu stavu paměti při modré obrazovce je generován a kam konkrétně se ukládá. Zjistěte, zda má být systém při modré obrazovce automaticky restartován. 3. Zobrazte nápovědu programu System File Checker (sfc) a zjistěte, co znamená použitı́ přepı́načů /quiet a /cancel. 4. Vyzkoušejte, jak je možné vrátit změny na ovladači nebo ovladač odinstalovat (nemusı́te postup dovést až do konce). 5. Prohlédněte si seznam bodů obnovy, které jsou vytvořeny za poslednı́ týden. 6.6 Správa softwaru 6.6.1 Instalace aplikacı́ Většina aplikacı́ dnes nabı́zı́ instalačnı́ proces, který provede vše potřebné od detekce ovladačů přes editaci registru a registraci DLL knihoven až po přesun adresářů a souborů na pevný disk. Tento instalačnı́ proces si programátor bud’ vytvořı́ sám, a nebo využije některý existujı́cı́ program, který pouze upravı́. Instalačnı́ programy využı́vajı́ do určité mı́ry službu Služba Windows Installer zabudovanou do Windows, ale jinak se jejich vlastnosti mohou hodně lišit. Hodně použı́vaný je nástroj InstallShield Developer (http://www.installshield.com), který nabı́zı́ prakticky vše, co si programátor může přát, ale možná i z toho důvodu jsou použı́vány i jiné programy, napřı́klad taktéž velmi silný, ale přehlednějšı́ Wise Installation System (http://www.wise.com), CreateInstall (http://www.createinstall.com), nebo Inno Setup (http://www.jrsoftware.org, freeware, je velmi jednoduchý, třebaže použitelný). Služba Windows Installer: Tato služba zaznamenává všechny změny, které jsou prováděny v systému během instalace aplikacı́ a zajišt’uje možnost vrátit provedené změny při nesprávně provedené instalaci (automaticky vytvářı́ body obnovy). Dokáže také zabránit některým konfliktům mezi aplikacemi způsobeným aktualizacemi sdı́lené dynamické knihovny (dřı́ve nainstalované aplikace mohou mı́t s touto knihovnou po aktualizaci problémy). Některé aplikace (např. MS Word) využı́vajı́ i dalšı́ funkci této služby, a to instalace některých součástı́ až při prvnı́m použitı́ (instalace „na vyžádánı́“ – součásti se při samotné instalaci produktu nenainstalujı́, ale až ve chvı́li, kdy je některý uživatel chce poprvé použı́t, což může být nebezpečná záludnost – kdo má mı́t pořád po ruce instalačnı́ médium?). Automatizace instalace softwaru: Pomocı́ nástroje Zásady skupiny můžeme na počı́tačı́ch v doméně se službou Active Directory řı́dit instalaci následujı́cı́m způsobem: aplikaci neinstalujeme osobně, ale „přenecháme tuto čest“ uživateli, i když mu neponecháme mnoho volnosti a proces bude automatizovaný. Aplikaci můžeme • přiřadit počı́tači – aplikace se tvářı́, jakoby byla již nainstalována, jejı́ odkaz je napřı́klad v menu Start ï Programy, ale samotná instalace se spustı́ v okamžiku, kdy se uživatel počı́tače pokusı́ aplikaci poprvé použı́t. P $ P P 6.6 SPRÁVA SOFTWARU 193 • přiřadit uživateli – podobně jako předchozı́, ale aplikace je „nasimulována“ v menu Start ï Programy pouze při přihlášenı́ toho uživatele (a to v jakémkoliv počı́tači, ke kterému se může přihlašovat), kterému je přiřazena, po „spuštěnı́“ se nainstaluje tak, aby byla dostupná tomuto uživateli. • publikovat – uživatel může sám rozhodnout, jestli si aplikaci nainstaluje; aplikace je uvedena v nástroji Přidat nebo odebrat programy. Pro instalaci můžeme na lokálnı́m počı́tači použı́t nástroj Přidat nebo odebrat programy z Ovládacı́ch panelů, ale pokud chceme instalovat ze serveru na klientské počı́tače, tento postup nenı́ moc praktický. K automatizované instalaci aplikacı́ můžeme ve Windows Server 2003 použı́t Systems Management Server (SMS), a to během instalace systému i později. Tento způsob je vhodný zvláště pro rozsáhlé instalace. SMS umožňuje při instalaci použı́vat obrazy – SMS vytvořı́ obraz referenčnı́ho počı́tače, pak na tento počı́tač nainstalujeme aplikaci, SMS vytvořı́ znovu obraz a porovná rozdı́ly. Tyto rozdı́ly jsou pak aplikovány při vzdálené instalaci téže aplikace na ostatnı́ch počı́tačı́ch v sı́ti. $ Tato metoda se může zdát výhodná a někdy může ušetřit hodně času, ale poměrně často se při takovéto instalaci aplikacı́ z obrazu setkáváme s problémy (instalace někdy nenı́ provedena zcela korektně). Od verze 2008 se mı́sto SMS použı́vá System Center Configuration Manager (ConfMgr, také SCCM). 6.6.2 Instalačnı́ soubory aplikacı́ Pokud chce aplikace využı́vat pokročilejšı́ možnosti služby Windows Installer, stačı́ vytvořit instalačnı́ soubor s přı́ponou MSI. Soubory MSI jsou instalačnı́ balı́čky, jde o obdobu instalačnı́ch balı́čků, které známe z Linuxu. V těchto souborech bývá (skoro) všechno, co je třeba při instalaci aplikace, ale MSI soubor může být doprovázen jednı́m nebo vı́ce soubory s přı́ponou CAB, ve kterých kromě dat může být uložena bezpečnostnı́ informace (včetně digitálnı́ho podpisu). P Kromě msi jsou použı́vány ještě dalšı́ přı́pony, napřı́klad MSP pro záplaty (patch) nebo MST pro transformace (tento soubor lze vytvořit zároveň se souborem MSI, obsahuje transformace, které je nutné provést po instalaci, napřı́klad v registru, často jsou takto řešeny jazykové varianty). Na Přı́kazovém řádku můžeme použı́t nástroj msiexec, který instaluje (nebo odinstaluje) zadaný MSI balı́ček. msiexec /? zobrazı́ se okno (v grafickém režimu) s nápovědou msiexec /i cesta\balı́ček.msi nainstalujeme zadaný balı́ček msiexec /x cesta\balı́ček.msi odinstalujeme zadaný balı́ček do zadaného LOG souboru se zapı́še informace o průběhu instalace; tı́mto způsobem můžeme zjistit, proč instalace aplikace selhává msiexec /i cesta\balı́ček.msi /L*V logsoubor.log instalace balı́čku zadaného pomocı́ GUID (GUID zjistı́me napřı́klad v LOG souboru podle předchozı́ho přı́kazu), tento postup někdy funguje i v přı́padě, že odinstalace aplikace se nedařı́ při zadánı́ názvu balı́čku msiexec /x {56D35A37-90B7-45BC-B3AA-9C5233F8E3D7} msiexec /ju cesta\balı́ček.msi přiřadı́ (inzeruje) aplikaci uživateli (právě přihlášenému) $ 6.6 SPRÁVA SOFTWARU msiexec /jm cesta\balı́ček.msi 194 přiřadı́ aplikaci všem uživatelům počı́tače (tj. počı́tači) administrativnı́ (sı́t’ová) instalace – jsme dotázáni na mı́sto, kam má být aplikace umı́stěna, a potom se balı́ček na zadaném mı́stě rozbalı́ podobně, jako by se opravdu instaloval, ale neprovedou se žádné změny v systému (předpokládáme, že jde o server, tedy aplikace nebude provozována na serveru), vytvořı́ se „menšı́“ MSI balı́ček, který je již dostupný klientským počı́tačům (publikován) msiexec /a cesta\balı́ček.msi msiexec /a soubor.msi /p záplata.msp použitı́ záplaty na aplikaci, která byla publikována na sı́ti Dalšı́mi přepı́nači lze napřı́klad podrobně řı́dit logovánı́, zakázat zobrazovánı́ grafického rozhranı́ instalátoru (pro bezobslužný mód instalace), apod. Pomocı́ Active Directory můžeme instalovat po sı́ti takto: • přihlásı́me se na server, který je doménovým řadičem Active Directory, a to jako Domain/Administrator, • provedeme administrativnı́ instalaci (msiexec /a), ted’ by nám mělo být známo umı́stěnı́ MSI souboru ve sdı́lené složce na tomto serveru (tato složka musı́ být přı́stupná všem klientům, na kterých chceme instalovat), • na serveru spustı́me MMC konzolu Group Policy Management (správa zásad skupiny), zobrazı́ se struktura položek, ve které najdeme Group Policy Objects (GPO), • v kontextovém menu položky zvolı́me Nový (New), vytvořı́me nový GPO (vpodstatě jde o novou zásadu, která má být aplikována na zadané počı́tače), vhodně nazveme (podle instalované aplikace), • po vytvořenı́ musı́me GPO nastavit – klepneme na vytvořenou položku a nastavı́me vše, co potřebujeme (v pravém podokně na všech záložkách), napřı́klad určı́me objekty, na které se má zásada aplikovat (v našem přı́padě počı́tače), • potom v kontextovém menu vytvořeného GPO zvolı́me Edit; otevře se konzola Group Policy pro tuto položku, ve které najdeme Computer Configuration ï Software Settings ï Software Installation, v kontextovém menu této položky zvolı́me New ï Package a najdeme MSI balı́ček, který jsme vytvořili na začátku tohoto postupu, • dále určı́me, jestli na balı́ček chceme aplikovat nějaké transformace (volba Advanced – rozšı́řené možnosti nasazenı́), v tom přı́padě musı́me ve vlastnostech položky „nat’ukat“ přı́slušné volby pro transformace, potvrdı́me, • v konzole Group Policy pro námi vytvořený GPO ještě nastavı́me podrobnosti instalace – najdeme Computer Configuration ï Administrative Templates ï Windows Components ï Windows Installer a nastavı́me zde zásady podle našich požadavků (napřı́klad můžeme nastavit, že se má aplikace instalovat se zvýšenými oprávněnı́mi apod.). Možných postupů je vı́ce. Konkrétně pro jednotlivé produkty se můžeme podı́vat napřı́klad na adresy http://www.adobe.com/devnet/acrobat/pdfs/gpo ad 8.pdf http://www.python.org/download/releases/2.4/msi/ 6.6 SPRÁVA SOFTWARU 195 InstallShield vytvářı́ mı́sto MSI souborů spustitelné instalačnı́ EXE soubory. Hlavnı́ spustitelný soubor instalace se většinou nazývá setup.exe a podporuje některé běžné přepı́nače (napřı́klad pro vytvořenı́ souboru odpovědı́ setup.iss, bezobslužné instalace apod.). $ pokud nemáme soubor odpovědı́, takto ho vytvořı́me (spustı́ se modelová instalace, ve které „naklikáme“ vše potřebné a všechna zvolená nastavenı́ se uložı́ do souboru ...\windows\setup.iss), vytvořený soubor odpovědı́ pak přesuneme do složky, ve které máme instalačnı́ soubor setup.exe setup.exe /r pokud máme ve stejné složce i soubor odpovědı́ setup.iss, je takto spuštěna bezobslužná instalace setup.exe /s Zajı́mavý článek o instalátorech aplikacı́ najdeme napřı́klad na http://unattended.sourceforge.net/installers.php. Úkoly 1. Zobrazte nápovědu přı́kazu msiexec a zjistěte, co vše lze během činnosti tohoto programu ukládat do LOG souboru a jakým způsobem se tyto volby nastavujı́. 2. Na internetu zjistěte, jaké parametry (kromě výše uvedených) může mı́t setup.exe vytvořený programem InstallShield. 6.6.3 C R IntelliMirror Technologie IntelliMirror sloužı́ k centrálnı́ správě softwaru, uživatelských dat a nastavenı́ v lokálnı́ sı́ti. Většina možnostı́, které nabı́zı́, vyžaduje použı́vánı́ služby Active Directory, ale některé možnosti mohou být použı́vány i v sı́ti bez Active Directory (samozřejmě potřebujeme sı́t’ se serverem, na kterém je nainstalována některá serverová verze Windows od 2000). P Technologie IntelliMirror umožňuje napřı́klad • konfiguraci nastavenı́ uživatelů a počı́tačů, • nastavenı́ zabezpečenı́ v doméně, • použı́vánı́ přihlašovacı́ch a odhlašovacı́ch skriptů, • správu cestovnı́ch profilů, • centrálnı́ instalaci a aktualizaci softwaru v sı́ti. Jak bylo výše uvedeno, IntelliMirror je poměrně úzce svázán s Active Directory. S některými položkami Active Directory týkajı́cı́mi se IntelliMirror jsme vlastně už pracovali (napřı́klad v sekci o instalaci softwaru to byly položky Administrative Templates, Software Installation apod.). Centrálnı́ instalace a aktualizace softwaru: Tento úkol se provádı́ pomocı́ Zásad skupiny (Group Policy Management) ve službě Active Directory. Můžeme tak bez nutnosti fyzické návštěvy u konkrétnı́ho počı́tače instalovat software, inovovat na novou verzi, aktualizovat operačnı́ systém (opravné balı́čky, bezpečnostnı́ záplaty). Ukázku jsme už viděli, můžeme software přiřadit či publikovat. 6.6 SPRÁVA SOFTWARU 196 Úkoly Ne každý má přı́stup k serveru, ale některé z výše popsaných položek si můžeme prohlédnout i na desktopové variantě Windows (kromě variant Home). Spustı́me Zásady skupiny (gpedit.msc) a v Konfiguraci počı́tače (Computer Configuration) najdeme • uzel Nastavenı́ softwaru (Software Settings) – je možné, že v něm nic nenı́, • uzel Šablony pro správu ï Součásti systému Windows ï Služba Windows Installer (Administrative Templates ï Windows Components ï Windows Installer) – podı́vejte se, jak jsou zde nastaveny zásady. C Přı́lohy pro pokročilé Přı́loha A Laděnı́ programů a jádra Windows Zde se budeme věnovat nástrojům usnadňujı́cı́m sledovánı́ a nalezenı́ chyb při běhu procesů, služeb, ovladačů a samotného jádra. A.1 Princip laděnı́ Debuggery jsou nástroje pro laděnı́ programů nebo jádra operačnı́ho systému. Ve Windows máme k dispozici jako výchozı́ debugger Dr. Watson, ale rozsáhlejšı́ programovacı́ prostředı́ tento jednoduchý debugger nahrazujı́ vlastnı́m programem. P Laděnı́ jádra se použı́vá nejen ke sledovánı́ operacı́ v jádru probı́hajı́cı́ch a sdı́lených prostředků, ale také tı́mto způsobem můžeme zjistit důvod chybného chovánı́ aplikace nebo ovladače. Přes debugger se připojı́me k běžı́cı́mu procesu a máme možnost zkoumat (a ovlivňovat) jeho adresový prostor a různé vlastnosti. Laděnı́ jádra lze provádět různými nástroji, které si obvykle musı́me pro tento účel nainstalovat – napřı́klad Windows Debugging Tools od Microsoftu (konkrétně nás zajı́má WinDbg nebo jeho textová obdoba kd.exe) nebo LiveKD od Sysinternals. Oba tyto programy jsou volně ke staženı́ na serveru Microsoftu. A.2 Dr. Watson DrWatson je aplikace, která může zjistit přı́činu chyb při běhu aplikacı́ včetně součástı́ systému. Je dostupná v nástroji Systémové informace (Start ï Programy ï Přı́slušenstvı́ ï Systémové nástroje, v menu Nástroje) nebo spuštěnı́m programu drwtsn32.exe. Použitı́ této aplikace má smysl předevšı́m pro programátory, kteřı́ tak mohou své aplikace ladit, odchytávat chyby. Dr. Watson ukládá všechny ladicı́ informace do protokolu (drwtsn32.log), který si pak programátor může prohlédnout. Můžeme také určit, co se do protokolu bude 198 $ A.3 WinDbg 199 ukládat, napřı́klad zda se má pro moduly aplikace uložit tabulka symbolů, kontexty procesů (viz kapitolu o procesech), apod. Jak bylo výše poznamenáno, debugger Dr. Watson bývá často nahrazován jinými programy obvykle při instalaci rozsáhlejšı́ch programovacı́ch prostředı́. Který debugger je nastaven, zjistı́me v registru v klı́či HKLM/Software/Microsoft/Windows NT/CurrentVersion/AeDebug v řetězcové hodnotě Debugger, ve které je uložen nástroj s celou cestou. Pokud chceme z nějakého důvodu dočasně využı́t program Dr. Watson a pak se vrátit k právě nastavenému, provedeme to takto: $ • najdeme výše popsanou hodnotu v registru, • exportujeme tento klı́č do REG souboru, • na Přı́kazovém řádku nebo v menu Start ï Spustit zadáme drwtsn32 -i • použı́váme program Dr. Watson, • vrátı́me do registru původnı́ nastavenı́ spuštěnı́m REG souboru vytvořeného v druhém bodu tohoto výčtu (třeba poklepánı́m na tento soubor). Úkoly 1. Zjistěte, který debugger je na vašem počı́tači nastaven. C 2. Spust’te okno aplikace Dr. Watson a zjistěte v něm, kam se ukládá soubor protokolu, kam se ukládá stav systému, co vše se má uložit apod. A.3 WinDbg A.3.1 Instalace a nastavenı́ programu Instalace: Předpokládejme, že budeme chtı́t použı́t program WinDbg. Na stránkách http://www.microsoft.com zadáme do vyhledávacı́ho okýnka řetězec windbg , ve výsledcı́ch vyhledávánı́ zvolı́me hned prvnı́ možnost („Install Debugging Tools . . . “) a vybereme si verzi pro náš systém (nejnovějšı́, poměrně často se měnı́). Stáhne se soubor s přı́ponou MSI, který spustı́me a projdeme instalacı́. V nabı́dce Start ï Programy se objevı́ položka Debugging Tools for Windows ï WinDbg. Ve složce, do které byl program nainstalován, je také textová obdoba programu kd.exe, která má prakticky stejné funkce, až na grafické rozhranı́. $ A.3 WinDbg 200 Úpravy: Zprovozněnı́ programu zahrnuje několik úprav. Vytvořı́me adresář (složku) s názvem symbols, a to někde v adresáři, do kterého se nainstaloval program, napřı́klad C:\Program Files\Debugging Tools for Windows\symbols. Spustı́me WinDbg, v menu najdeme File ï Symbol File Path a zadáme tento řetězec s cestou k vytvořenému adresáři symbols: srv*C:\cesta_k_adresáři_symbols*http://msdl.microsoft.com/download/symbols Napřı́klad (v adrese je opravdu msdl, ne msdn): srv*C:\Program Files\Debugging Tools for Windows\symbols*http://msdl.mi,→ crosoft.com/download/symbols Do zvoleného adresáře (předem vytvořeného) si debugger sám stáhne soubory, které potřebuje pro laděnı́. Předpokládá se, že máme přı́stup na internet, v opačném přı́padě musı́me vytvořit sady symbolů „ručně“. Informace o způsobu vytvořenı́ sady symbolů najdeme v nápovědě. Obrázek A.2: Vloženı́ adresy pro zı́skánı́ symbolů do WinDbg Pokud máte možnost, pokuste se nainstalovat a zprovoznit program WinDbg a vyzkoušejte dále popsané postupy. Úkoly A.3.2 Práce se souborem výpisu při zhroucenı́ Windows Pokud dojde k závažnému problému, jsou veškeré potřebné informace o průběhu selhánı́ zapsány ve speciálnı́m souboru (obvykle memory.dmp). Název a umı́stěnı́ tohoto souboru najdeme podle popisu v kapitole 6.5 v odstavci Modrá obrazovka na straně 189. Následujı́cı́ postup lze provést jen tehdy, když soubor s výpisem stavu systému existuje (tj. když nastala chyba v jádře a objevila se modrá obrazovka). V rozhranı́ WinDbg zvolı́me File ï Open Crash Dump, najdeme daný soubor, jeho otevřenı́ trvá několik desı́tek sekund. Zobrazı́ se obsah daného DMP souboru, najdeme ho na obrázku A.3 na straně 201. Z tohoto základnı́ho výpisu lze zjistit pouze obecné informace. Na řádku „Probably caused by“ najdeme název ovladače nebo modulu jádra, který pravděpodobně chybu způsobil, informace o něm zobrazı́ přı́kaz lm popsaný v následujı́cı́ sekci. K podrobnějšı́m se dostaneme použitı́m přı́kazu, který je nám ve výpisu doporučen (napı́šeme ho do řádku na spodnı́m okraji okna) – přı́kaz začı́ná symbolem „!“ jako většina přı́kazů ve WinDbg: !analyze -v Dostaneme analýzu souboru výpisu, ze které je obvykle možné zjistit důvod havárie. Výpis je zachycen na obrázku A.4. Je zde uveden název procesu, při jehož zpracovánı́ došlo k chybě (část „PROCESS_NAME“), a také by nás měl zajı́mat výpis obsahu zásobnı́ku (část „STACK_TEXT“) tohoto procesu. Ze zásobnı́ku totiž poznáme, které funkce byly právě ve zpracovánı́, když došlo k chybě. C A.3 WinDbg 201 Obrázek A.3: Načtenı́ DBG souboru do programu WinDbg Zásobnı́k čteme odspoda. Z ukázkového výpisu vidı́me, že funkce s adresou 0x7c90eb94 uvnitř adresového prostoru procesu zavolala funkci KiFastCallEntry v modulu nt (to je ntoskrnl), která zavolala funkci NtDeviceIoControlFile v témže modulu, atd. Poslednı́ (na vrcholu zásobnı́ku) je volánı́ chybového ovladače myfault. Pokud přı́mo nedošlo ke zhroucenı́ jádra systému (modrá obrazovka), nenı́ standardně výpis stavu systému generován. Když však přesto chceme takový soubor vytvořit, připojı́me se k lokálnı́mu jádru operačnı́ho systému (postup je popsán v sekci A.3.3) a použijeme v rozhranı́ WinDbg přı́kaz .dump /m c:\tmp\memory.dmp (přı́padně jiný název souboru, tečka na začátku řádku je součástı́ přı́kazu). Přepı́nač /m způsobı́ vygenerovánı́ minimálnı́ho výpisu obsahu paměti (minidump), jiné přepı́nače zjistı́me zadánı́m přı́kazu bez jakýchkoliv parametrů. A.3.3 Práce ve WinDbg bez načtenı́ DBG souboru A.3 WinDbg 202 Obrázek A.4: Výsledky analýzy DBG souboru ve WinDbg Přı́kazový řádek debuggeru se zobrazı́ až po načtenı́ některého DMP souboru, a nebo po připojenı́ k jádru některého počı́tače. Ve Windows XP a Windows Server 2003 (a vyššı́ch) máme možnost se připojit i k lokálnı́mu jádru, ve staršı́ch verzı́ch však pouze k jádru systému na jiném počı́tači. Programu WinDbg tedy musı́me sdělit, že chceme pracovat na lokálnı́m (nebo vzdáleném) počı́tači. V menu najdeme File ï Kernel Debug a zvoObrázek A.5: Funkce Kernel Debug lı́me pro připojenı́ k lokálnı́mu jádru záložku Local, pro připojenı́ k jádru na jiném počı́tači vybı́ráme mezi záložkami podle typu připojenı́ k tomuto počı́tači (výchozı́ je COM, znamená to použitı́ COM portu nebo virtuálnı́ho sériového rozhranı́, dalšı́ možnostı́ je 1394, což je FireWire rozhranı́, a nebo USB 2.0). Pak už se zobrazı́ okno, na jehož spodnı́m konci můžeme zadávat přı́kazy – je na obrázku A.6. Zatı́mco při analýze dmp souboru byl v přı́kazovém řádku prompt kd>, při laděnı́ lokálnı́ho jádra máme prompt lkd>. Dále můžeme zadávat přı́kazy (některé začı́najı́ symbolem !, to jsou tzv. rozšı́řenı́). Napřı́klad přı́kaz !process vypı́še informace o právě běžı́cı́m procesu. Pokud máme spuštěny spı́še interak- $ A.3 WinDbg 203 Obrázek A.6: Kernel Debug na lokálnı́m počı́tači tivnı́ procesy, tak se pravděpodobně vypı́še proces Idle (nečinný, ve skutečnosti nejde o proces) nebo WinDbg, takže tento přı́kaz má smysl spı́še tehdy, když chceme zjistit, který proces dlouhodobě zabı́rá procesor (napřı́klad se mohl dostat do nekonečné smyčky). Na obrázku A.7 vidı́me výpis stavu běžı́cı́ho procesu s tı́m, že při prvnı́m provedenı́ přı́kazu byl procesor přidělen procesu WinDbg, při druhém provedenı́ přı́kazu to byl program s obrazem Lin.exe. V tomto rozhranı́ můžeme použı́t i dalšı́ podobné přı́kazy, napřı́klad !process 0 0 pro výpis všech aktivnı́ch procesů (dva parametry v hodnotě 0), zobrazı́ detailnı́ informace o daném procesu a jeho vláknech (musı́me zadat adresu procesu, kterou zı́skáme napřı́klad z výpisu předchozı́ho přı́kladu, je to prvnı́ čı́selný údaj o každém procesu v seznamuk anebo jeho CID, které je také součástı́ výpisu), viz obrázek A.8, !process adresa_začátku_prostoru_procesu !thread pro výpis běžı́cı́ho vlákna, pro výpis konkrétnı́ho vlákna, adresu zı́skáme z výpisu přı́kazu !process s adresou procesu v parametru, !thread adresa_vlákna zobrazı́ obsah bloku PEB (něco jako PCB procesu), tedy soubor obrazu, načtené moduly, adresu heapu (haldy) procesu, hodnoty proměnných prostředı́ procesu, atd., je nutné zadat adresu PEB, kterou zı́skáme napřı́klad pomocı́ přı́kazu !peb adresa_peb_procesu !process 0 0 zobrazı́ vlákna, která jsou ve stavu připraven (čekajı́ na procesor), pokud jsou spuštěny spı́še interaktivnı́ procesy, je seznam obvykle prázdný, !ready vypı́še moduly (načtené i nenačtené) včetně obrazu (tj. názvu spustitelného souboru), lm i vypı́še veškeré dostupné informace o zavedených modulech – parametr o znamená „pouze zavedené moduly“, parametr v určuje „upovı́daný mód“ (verbose), tedy vypı́še všechny dostupné informace, lm ov $ A.3 WinDbg 204 Obrázek A.7: Výpis stavu běžı́cı́ho procesu lm e vypı́še moduly, které majı́ problém se zavedenı́m symbolů (tento výpis by měl být pokud možno prázdný, v opačném přı́padě je modul nesprávně naprogramován), zobrazı́ podrobné informace o načteném modulu, zadáme vždy adresu, která je na výpisu modulů (dle předchozı́ch přı́kazů) uvedena na začátku řádku jako startovnı́, !lmi adresa_začátku_modulu A.3 WinDbg 205 Obrázek A.8: Informace o procesu zobrazı́ informaci o kernel zásobnı́cı́ch spuštěných vláken, ve výpisu najdeme ID procesu a vlákna (tyto údaje jsou v prvnı́m sloupci odděleny tečkou), adresu vlákna, délku běhu, stav a momentálnı́ adresu vrcholu zásobnı́ku, !stacks zobrazı́ seznam objektů výkonné části (sdı́lených), které jsou momentálně vlastněny, všechny (i nepoužı́vané) zobrazı́me použitı́m s parametrem -d, !locks !vm zobrazı́ podrobné informace o virtuálnı́ paměti (včetně jejı́ho využı́vánı́ jednotlivými procesy), vypı́še veškeré informace o zadaném objektu typu token – token je objekt, ve kterém jsou uloženy bezpečnostnı́ informace (napřı́klad přı́stupová oprávněnı́, SID souvisejı́cı́ch účtů a skupin apod.), čı́slo tokenu zı́skáme takto: !token čı́slo_tokenu • přı́kazem !process 0 0 vypı́šeme seznam procesů, ve kterém najdeme ten proces, který nás zajı́má, zjistı́me jeho CID, • zjištěné CID použijeme jako parametr přı́kazu !process (jako jediný parametr), tam najdeme řádek Token, na něm je čı́slo tokenu. A.3 WinDbg 206 výpis hlavičky objektu (velká pı́smena u názvu struktury musı́ být, také pozor na podtržı́tka), adresu objektu zı́skáme z různých výpisů; napřı́klad pokud chceme vypsat informace o hlavičce objektu procesu (proces je také objekt), vypı́šeme si informaci o daném procesu přı́kazem dt _OBJECT_HEADER adresa_objektu !process adresa_procesu (adresu procesu zı́skáme dle výše uvedeného popisu tohoto přı́kazu), hledaná adresa objektu je na řádku ObjectHeader. Přı́kaz bez zadánı́ adresy vypı́še pouze strukturu typu hlavičky objektu. !object \device zobrazı́ seznam objektů typu zařı́zenı́, a to adresu, typ a název, !devobj nějaké_zařı́zenı́ vypı́še informaci o objektu typu zařı́zenı́, zařı́zenı́ může být zadáno adresou nebo (od Windows 2000) názvem, obojı́ zjistı́me z výpisu předchozı́ho přı́kazu, !devstack nějaké_zařı́zenı́ vypı́še informace o objektech zařı́zenı́ přidružených k danému zařı́zenı́, vypı́še informace o zadaném ovladači; ovladač je zadán adresou, kterou zı́skáme napřı́klad z výpisu přı́kazu !drvobj nějaký_ovladač 7 !devobj (údaj je označen jako DriverObject), čı́slo 7 na konci přı́kazu určuje, že se majı́ také vypsat rutiny nabı́zené ovladačem včetně jejich přı́stupových bodů. Na obrázku A.10 je výstup tohoto přı́kazu a předchozı́ch dvou, týká se jednoho z USB rozbočovačů. Přı́kazů je mnohem vı́ce, jejich seznam a popis najdeme také v nápovědě dostupné z prostředı́ WinDbg. Obrázek A.9: Výstup přı́kazů !stacks a !locks (prvnı́ výpis je velmi dlouhý, jeho část byla odstraněna) A.3.4 Funkce napojenı́ se na proces A.3 WinDbg 207 Obrázek A.10: Výstup přı́kazů !devobj, !devstack a !drvobj Někdy je třeba kontrolovat nebo ovlivňovat běh procesu a jeho adresový prostor. $ WinDbg nabı́zı́ tuto možnost, ale musı́me počı́tat s tı́m, že běh procesu, na který se napojı́me, se značně zpomalı́. V menu nástroje WinDbg je volba File ï Attach to a Process. Po jejı́m vybránı́ se zobrazı́ okno, ve kterém se můžeme napojit na některý spuštěný proces. V okně s procesy klepneme na proces, jehož běh nás zajı́má, jeho PID se automaticky vložı́ do řádku pro výběr ID procesu. Dále bychom měli klepnout na volbu Noninvasive, která zajistı́, že adresový prostor procesu nebude debuggerem narušováno (ovšem při invazivnı́m napojenı́ máme možnost proces doopravdy ladit, tedy napřı́klad kromě přidávánı́ breakpointů také měnit obsah registrů, pamět’ových mı́st apod.). Při invazivnı́m napojenı́ je standardně po ukončenı́ laděnı́ proces automaticky ukončen. Na obrázku A.11 je ukázka výběru neinvazivnı́ho napojenı́ na proces Kalkulačka (calc.exe). Obrázek A.11: Napojenı́ na proces A.3 WinDbg 208 Obrázek A.12: Zobrazená okna Command, Call Stack a Disassembly Některé informace o běhu procesu můžeme zı́skat z oken, která lze otevřı́t přes nabı́dku View. Na obrázku A.12 vidı́me otevřená okna Command (pro zadávánı́ přı́kazů debuggeru), Call Stack (obsah kernel zásobnı́ku vláken) a Disassembly (zpětné přeloženı́ strojových instrukcı́ do assembleru). Dále zde najdeme napřı́klad okno s obsahem registrů procesoru nebo okno s obsahem pamět’ové oblasti. Také je k dispozici okno Watch pro sledovánı́ proměnných, které se použı́vá způsobem obvyklým v běžných programovacı́ch prostředı́ch. V menu také najdeme nabı́dku Debug. Některé položky nabı́dky jsou určeny spı́še pro invazivnı́ laděnı́, jiné lze použı́t i při neinvazivnı́m. Opět jde o běžné možnosti nabı́zené debuggery v programovacı́ch prostředı́ch. Je tady také volba Stop Debugging, kterou bychom měli správně ukončit každé laděnı́ procesu. Literatura Základnı́ stránky o Windows: [1] Microsoft Technet [online]. URL: http://technet.microsoft.com/ [2] Microsoft Support [online]. URL: http://support.microsoft.com [3] Licence na Microsoft.com [online]. URL: http://www.microsoft.com/cze/licence/default.mspx Dalšı́: [4] AITKEN, P. G. Windows Script Host 2.0. Praha, Grada Publishing, 2001. [5] ALLEN, R. – LOWE-NORRIS, A. G. Active Directory. Praha, Grada Publishing, 2005. [6] BORN, G. Skriptujeme operace na PC pomocı́ Microsoft Windows Script Host 2.0. Brno, Computer Press, 2001. [7] HOLČÍK, T. Stručná historie Windows [online]. URL: http://www.zive.cz/clanky/strucna-historie-windows/sc-3-a-115491/default.aspx [8] KAČMÁŘ, D. Programujeme v COM a COM+. Brno, Computer Press, 2000. [9] Knihy s vývojářskou tematikou [online]. URL: http://www.microsoft.com/cze/msdn/csebooks/ [10] KRAVAL, I. – IVACHIV, P. Základy komponentnı́ technologie COM. Brno, Computer Press, 2001. [11] KWOLEK, J. Problematika IRQ – sdı́lenı́, konflikty, PCI [online]. Živě.cz. Dostupné na: http://www.zive.cz/clanky/problematika-irq—sdileni-konflikty-pci/irq—what-the-hell/ sc-3-a-1399-ch-16552/default.aspx [12] LAURIE, V. The Command Line in Windows [online]. URL: http://commandwindows.com/ 209 210 [13] LOCKHART, E. Bezpečnost sı́tı́ na maximum. Brno, Computer Press, 2005. [14] Microsoft Corporation. Microsoft Windows XP Professional Resource Kit. Brno, Computer Press, 2004. [15] MOSKOWITZ, J. Zásady skupiny, profily a IntelliMirror ve Windows 2003, 2000 a XP. Brno, Computer Press, 2006. [16] MS-DOS [online]. URL: http://ms-dos.wz.cz/ [17] MS Windows Academic Program [online]. URL: http://www.microsoft.com/resources/sharedsource/windowsacademic/default.mspx [18] OSIF, M. Windows Server 2003. Praha, Grada, 2003. Většina stran dostupná na http://books.google.cz/books?id=FEbKcbgfKdIC&printsec=frontcover#v=onepage [19] PHELPS, E. Using Rundll [online]. URL: http://www.ericphelps.com/batch/rundll/ [20] POKORNÝ, J. Úvod do .NET Framework. Brno, Computer Press, 2000. Soubory ke staženı́ na knihy.cpress.cz/DataFiles/Book/00000896/Download/frameworknet.zip [21] SOLOMON, D. A. Windows NT pro administrátory a vývojáře. Brno, Computer Press, 1999. [22] STANEK, W. R. Přı́kazový řádek Microsoft Windows. Brno, Computer Press, 2005. [23] Uniblue Process Library [online]. URL: http://www.liutilities.com/products/wintaskspro/processlibrary/ [24] Windows API Reference [online]. URL: http://msdn.microsoft.com/en-us/library/aa383749%28VS.85%29.aspx. [25] Rob van der WOUDE. PowerShell [online]. URL: http://www.robvanderwoude.com/powershell.php [26] ŽEMBER, M. Exploity [online]. URL: http://www.ms.mff.cuni.cz/˜zembm2am/exploity/exploity.html
Podobné dokumenty
Praktikum z operacˇnıch syste´mu
z operačních systémů. Obsahuje pouze část věnovanou základům správy operačního systému Windows.
stáhnout zde - Petr Korviny
1.4 Určovánı́ vah kritériı́ - zadávánı́, výpočet, uloženı́
V této části bude vysvětlen postup při určovánı́ důležitosti jednotlivých kritériı́. U vı́cekriteriálnı́ch
metod, jež...
Praktikum z operacˇnıch syste´mu
Kromě toho, že EULA silně omezuje možnosti využitı́ softwaru pod nı́ distribuovaného,
obsahuje také klauzuli o tom, že autor neodpovı́dá za škody vzniklé provozovánı́m softwaru. Tato kl...
isass.exe objekt nebyl nalezen
restartování počítače zadejte příkaz exit. Úplný seznam příkazů nástroje Recovery Console
přikládám na konci dokumentu v sekci zdroje jako link.
Nástroj Recovery Console jde přidat do úvodní spoušt...
Operační systémy - Střední škola AGC as
Adresářová struktura, SED - stream editor, příkazy, regulární výrazy, přesměrování vstupu a výstupu
Správa systému Linux
Souborové systémy, proces init, superserver inetd a xinetd, virtuální soubor...
Správa diskových jednotek a systémů souborů
se však nedělí na oddíly, ale na svazky. Svazek se velmi podobá oddílu. Nejčastějším typem svazku je
jednoduchý svazek. Jednoduchý svazek se nachází na jediném disku a umožňuje spustit operační
sys...
Technické vybavenı osobnıch pocıtacu
Technické vybavenı́ osobnı́ch počı́tačů
Otázky ke zkoušce, rok 2015/16
RNDr. Šárka Vavrečková, Ph.D.
Poslednı́ aktualizace: 13. ledna 2016
Následujı́cı́ otázky jsou členěny tematicky....