Linux documentation Project (CS) / Průvodce správce operačního systému Linux
Previous Content Next Up

 

8. Přihlašování do systému a ukončování sezení

Tato kapitola by potřebovala citát. Má někdo nějaký návrh?

    Tato část knihy popisuje, co se v systému děje poté, co se do něj uživatel přihlásí a zahájí sezení a následně se ze systému odhlásí. Dále budou detailněji popsán různé interakce některých procesů běžících na pozadí, při zahajování a ukončování sezení používané "log"-soubory, konfigurační soubory a další.

8.1 Přihlašování přes terminály

    Na obrázku 8.1 je graficky zobrazený algoritmus přihlášení uživatele do systému přes terminál. V prvním kroku si proces init ověří, zda běží program getty pro dané terminálové spojení (nebo konzolu). Program getty sleduje terminál a čeká na uživatele, jenž by mu sdělil, že se chce přihlásit do systému (obvykle tím, že stiskne některou klávesu na klávesnici terminálu). Když proces getty zjistí, že uživatel něco napsal na klávesnici, vypíše na obrazovku uvítací zprávu. Ta je uložená v souboru /etc/issue. Pak vyzve uživatele, aby zadal své uživatelské jméno a nakonec spustí program login. Program login dostane zadané uživatelské jméno jako parametr a následně vyzve uživatele, aby zadal přístupové heslo. Je-li heslo zadáno správně, program login spustí příkazový interpret vybraný podle nastavení konfigurace pro přihlášeného uživatele. V opačném případě se program login jednoduše ukončí, a tím se ukončí i celý proces přihlašování (většinou až poté, co uživatel dostane další možnost zadat správné uživatelské jméno a přístupové heslo). Proces init rozpozná, že byla procedura přihlašování ukončena a spustí pro daný terminál novou instanci programu getty.

    Je důležité si uvědomit, že jediným novým procesem je ten, jenž vytvoří program init (použitím systémového volání fork). Procesy getty a login nahrazují právě tento nový proces (použitím volání systému exec).

    V případě přihlašování po sériových linkách se pro sledování aktivity uživatelů používá zvláštní program proto, že někdy může být (a tradičně bývá) poměrně složité zjistit, kdy je terminál po nečinnosti opět aktivní. Program getty rovněž přizpůsobuje přenosové rychlosti a další nastavení pro konkrétní spojení. Takovéto změny parametrů připojení jsou obzvlášť důležité v případě, že systém odpovídá na příchozí modemové žádosti o připojení. V tomto případě se totiž přenosové parametry běžně mění případ od případu.

    V současnosti se používá několik různých verzí programů getty a init. Mají samozřejmě své výhody i nevýhody. Je dobré si přečíst dokumentaci k verzím, které jsou součástí vašeho systému, ale rozhodně neuškodí ani informace o jiných verzích. Další dostupné verze programu lze vyhledat pomocí "Mapy programového vybavení pro Linux" (The Linux Software Map). V případě, že nemusíte obsluhovat příchozí volání se žádostmi o přihlášení, nebudete se pravděpodobně muset programem getty zabývat, avšak podrobnější informace o programu init pro vás budou i nadále důležité.

8.2 Přihlášení prostřednictvím sítě

    Dva počítače, které jsou zapojené v jedné síti, jsou obvykle propojeny jediným fyzickým kabelem. Když spolu stanice prostřednictvím sítě komunikují, programy, které běží na každé z nich a podílejí se na vzájemné komunikaci, jsou propojeny virtuálními spojeními, tedy jakousi sadou imaginárních kabelů. Když spolu aplikace na obou koncích virtuálního spojení komunikují, mají pro sebe vyhrazenou vlastní "linku". Proto, že tato linka není skutečná, pouze imaginární, mohou operační systémy na obou počítačích vytvořit i několik virtuálních spojení sdílejících tutéž fyzickou linku. Takto spolu může s využitím jediného kabelu komunikovat několik programů bez toho, že by o ostatních spojeních věděly, nebo se o ně nějakým jiným způsobem staraly. Stejné fyzické médium může být sdíleno i několika počítači. Když pak existuje virtuální spojení mezi dvěma stanicemi, další počítače, které se komunikace neúčastní a sdílí tutéž fyzickou linku, toto spojení ignorují.

    Toto byl komplikovaný a možná až příliš odtažitý popis reality. Měl by ale stačit k pochopení důležitého rozdílu mezi přihlášením prostřednictvím sítě a normálním přihlášením přes terminál. Virtuální spojení se vytvoří v případě, že existují dva programy na různých stanicích a přejí si spolu komunikovat. Vzhledem k tomu, že je principiálně možné připojit se z kteréhokoliv počítače v síti na kterýkoliv jiný, existuje velké množství potenciálních virtuálních spojení. Díky tomu není praktické spouštět proces getty pro každé potenciální síťové přihlášení do systému.

    Proto také existuje jediný proces inetd (odpovídající procesu getty), který obsluhuje všechna síťová připojení. V případě, že proces inetd zaregistruje žádost o připojení ze sítě (tedy zaregistruje navázání nového virtuálního spojení s některým jiným počítačem zapojeným v síti), spustí nový proces obsluhující toto jediné přihlášení. Původní proces je nadále aktivní a dále čeká na nové požadavky o připojení.

Aby to nebylo až tak jednoduché, existuje pro připojení ze sítě víc komunikačních protokolů.

    Dva nejvýznamnější jsou telnet a rlogin. Kromě připojení do systému existuje i mnoho dalších druhů virtuálních spojení, která lze mezi počítači v síti navázat (síťové služby FTP, Gopher, HTTP a další). Bylo by neefektivní mít zvláštní proces, jenž by sledoval žádosti o navázání spojení pro každý typ připojení (službu). Místo toho existuje jediný proces, který umí rozeznat typ spojení a spustit správný program, jenž pak poskytuje odpovídající služby. Tímto procesem je právě proces inetd. Podrobnější informace uvádí "Průvodce správce sítě systému Linux".

8.3 Co dělá program login

    Program login se stará o autentizaci uživatele (kontroluje, zda bylo zadáno správné uživatelské jméno a přístupové heslo) a počáteční nastavení uživatelského prostředí nastavením oprávnění pro sériovou linku a spuštěním interpretu příkazů.

    Částí procedury úvodního nastavení uživatelského prostředí je i vypsání obsahu souboru /etc/motd (zkratka pro "message of the day" - zprávu pro tento den) a kontrola nově příchozí elektronické pošty.

Tyto kroky lze zakázat vytvořením souboru nazvaného .hushlogin v domovském adresáři uživatele.

    Existuje-li soubor /etc/nologin, jsou přihlášení do systému zakázána. Tento soubor je typicky vytvářen příkazem shutdown nebo příbuznými programy. Program login kontroluje, jestli tento soubor existuje, a v případě, že je tomu tak, odmítne akceptovat přihlášení a předtím, než se definitivně ukončí, vypíše obsah tohoto souboru na terminál.

    Program login rovněž zapisuje všechny neúspěšné pokusy o přihlášení do systémového "log" -souboru (pomocí programu syslog). Rovněž zaznamenává úspěšné i neúspěšné pokusy o přihlášení superuživatele. Oba druhy záznamů jsou užitečné při pátrání po případných "vetřelcích".

    Současně přihlášení uživatelé jsou zapsáni v seznamu /var/run/utmp. Tento soubor je platný jenom do dalšího znovuzavedení nebo zastavení systému, protože v průběhu zavádění systému se jeho obsah vymaže. Jinak jsou v souboru /var/run/utmp kromě seznamu všech poihlášených uživatelů a používaných terminálů (nebo síťových spojení), uvedené i další užitečné informace. Příkazy who, w a další podobné se dívají právě do souboru /var/run/utmp a zjišťují, kdo je k systému připojený.

    Všechna úspěšná přihlášení jsou zaznamenána do souboru /var/log/wtmp. Tento soubor se může bez omezení zvětšovat, proto je potřeba jej pravidelně mazat (například po týdnu) zadáním úkolu démonu cron.

Soubor wtmp lze procházet příkazem last.

Oba soubory utmp i wtmp mají binární formát (viz manuálová stránka utmp), takže je nelze prohlížet bez speciálních programů.

8.4 X a xdm

META: X implementují přihlášení prostřednictvím procesu xdm a rovněž xterm .ls.

8.5 Řízení přístupu

    Databáze uživatelů je tradičně uložena v souboru /etc/passwd. Některé systémy používají tzv. stínová hesla. Přesouvají uživatelská přístupová hesla ze souboru /etc/passwd do souboru /etc/shadow. Sítě s velkým počtem počítačů, ve kterých se informace o uživatelských účtech sdílí pomocí systému NIS nebo nějakou jinou metodou, mohou databázi uživatelů automaticky kopírovat z jediného centrálního počítače na všechny ostatní stanice.

    Databáze uživatelů obsahuje nejenom hesla, ale i některé další informace o uživatelích, například jejich skutečná jména, domovské adresáře a interprety příkazů, jenž se implicitně spouští po přihlášení atd. Je potřeba, aby byly tyto informace o uživatelích v systému obecně dostupné a aby si je mohl každý přečíst. Kvůli tomu se heslo ukládá v zakódovaném tvaru. Má to ale jeden háček. Kdokoliv, kdo má přístup k databázi uživatelů, může s pomocí různých kryptografických metod hesla rozšifrovat i bez toho, že by se musel přihlásit k hostitelskému počítači. Systém stínových hesel se snaží zamezit možnosti prolomení přístupových hesel tím, že se přesouvají do jiného souboru, jenž je přístupný pouze superuživateli (hesla se i tak ukládají v zakódovaném tvaru). Avšak s pozdější instalací systému stínových hesel na systému, který jej nepodporuje, mohou vznikat různé potíže.

    Ať tak nebo onak, z bezpečnostních důvodů je důležité pravidelně ověřovat, jestli jsou všechna v systému používaná přístupová hesla netriviální, tedy taková, aby nebylo lehké je uhodnout. Lze použít například program crack, jenž zkouší hesla v /etc/passwd dekódovat.

Heslo, které se mu podaří uhodnout, nelze podle výše uvedeného považovat za spolehlivé.

    Program crack mohou samozřejmě zneužít i případní vetřelci, ale správci systému může jeho pravidelné používání pomoci preventivně omezit výběr nevhodných přístupových hesel.

    K volbě netriviálního přístupového hesla lze uživatele donutit i programem passwd. To je metoda, která je efektivnější především z hlediska zatížení procesoru, protože zpětná analýza zašifrovaných hesel programem crack je výpočetně o hodně náročnější.

Databáze skupin uživatelů je uložena v souboru /etc/group, u systémů se stínovými hesly v souboru /etc/shadow.group.

    Uživatel root se obvykle nemůže přihlásit z kteréhokoliv terminálu nebo počítače v síti, pouze z terminálu uvedeného v seznamu /etc/securetty. Pak je nutné mít k některému z těchto terminálů fyzický přístup. Avšak takovéto bezpečnostní opatření nelze považovat za dostatečné, protože je možné přihlásit se z kteréhokoliv jiného terminálu jako běžný uživatel a pro změnu uživatelských oprávnění použít příkaz su.

8.6 Spouštění interpretu příkazů

    Při startu každý interaktivní příkazový interpret (shell) automaticky spouští jeden či více předem určených souborů. Různé interprety spouští různé konfigurační soubory. Podrobnější informace najdete v dokumentaci k jednotlivým typům interpretů.

    Většina shellů nejdříve spustí některý globální soubor, například interpret Bourne shell (/bin/sh) a jeho klony spouští soubor /etc/profile, až poté spustí soubor .profile, jenž je uložen v uživatelově domovském adresáři. Soubor /etc/profile umožňuje správci systému nastavit běžné, implicitní uživatelské prostředí, například nastavením proměnné PATH, tak, aby zahrnovalo kromě obvyklých i lokální adresáře s příkazy. Soubor .profile zase umožňuje každému z uživatelů upravil si předem nastavené běžné prostředí podle svého vlastního vkusu.

Previous Content Next Up