Pohľad pod kapotu Chrome OS

To, že desktopové aplikácie a aj samotný desktop sa skôr či neskôr presunie na web, bolo jasné už takmer po zrode JavaScriptu, takže vzhľad Chrome OS je do značnej miery predvídateľný. A to, že to bol Google, kto vydal cloudový OS, je tiež úplne prirodzené. Skúsme sa však vzdialiť od nekonečnej debaty o budúcnosti desktopu, ktorú rozdúchava konzervatívna časť IT ľudí, a pozrime sa na Chrome OS z pohľadu technickej implementácie.

cesta do oblakov

Google ohlásil Chrome OS v lete 2009 a už v novembri ho predviedol verejnosti a verejne sprístupnil zdrojový kód pod názvom Chromium OS. Vtedy bol operačný systém celkom jednoduchý a bol to celoobrazovkový prehliadač Chrome, ktorý bežal nad výrazne obmedzenou distribúciou Ubuntu. Implementoval všetky rovnaké mechanizmy na izoláciu kariet prehliadača a doplnkov, rovnaký viacprocesový model prehliadača, ale vo všeobecnosti sa operačný systém v ničom nelíšil.

Počas nasledujúcich piatich rokov Google neustále, ale v skutočnosti nepropagoval svoju prácu, vyvíjal Chrome OS. Popri tom vydala takzvané Chromebooky a Chromeboxy, ktoré si obľúbili Unixoidi, ktorí hneď po kúpe zbúrali Chrome OS. Postupne Google opustil Ubuntu v prospech Gentoo (zrejme preto, aby mohol zostavovať balíčky bez „zbytočných“ závislostí na ňom a buchtách Hardened verzie distribučnej súpravy) a nahradil režim jedného okna štandardným multi -režim okna pre stolné počítače so štandardným panelom úloh nižšie. Google to v prvých verziách Chrome OS zámerne zavrhol, pretože OS bol zameraný na netbooky s ich malými obrazovkami, ale používatelia to zjavne neocenili.

Nechýbajú ani offline webové aplikácie (dostupné aj v bežnom Chrome) a napokon podpora množstva aplikácií pre Android. Posledná udalosť sa očakávala po tom, čo vedenie vývoja oboch operačných systémov prešlo do rúk Sundara Pichaia, ktorý bol vždy zodpovedný za vývoj Chrome, Chrome OS a webových aplikácií Google.

Chrome OS sa vyvíja spolu so samotným prehliadačom, takže ich verzie sú rovnaké. V čase písania tohto článku to bola verzia 41, ale na rozdiel od prehliadača Chrome OS nemá zostavy pripravené na inštaláciu, s výnimkou oficiálne podporovaných Chromebookov a Chromeboxov. Na webe je však celkom možné nájsť neoficiálne zostavy založené na zdrojoch OS Chromium. Napríklad si vždy môžete stiahnuť denné zostavy pre x86, x64 a ARM. Stačí zapísať jeden z nich na USB flash disk a spustiť z neho. Treba sa však pripraviť na to, že sa nespustia všetky komponenty stroja (v mojom prípade mi odpadol touchpad). Chromium OS navyše nepodporuje Flash, DRM a Netflix, no má prístup ku konzole s právami root.

Základné pojmy

Kľúčovou myšlienkou Chrome OS je, že vo všeobecnosti ide o OS tenkého klienta, kde je všetko okrem GUI a prehliadača na webe. Bez internetového pripojenia a účtu Google totiž operačný systém používateľa dovnútra ani nepustí (aspoň prvýkrát). Google ponúka ukladanie súborov na váš Disk Google (spoločnosť dáva kupujúcim Chromebooku 100 GB), nastavenia, rozšírenia a nainštalované aplikácie sa synchronizujú štandardným spôsobom pre prehliadač Chrome. Na tlač sa odporúča použiť službu Google Cloud Print.

V ruskej realite tento prístup nič nedáva a vytvára veľa ťažkostí, ako aj vo zvyšku sveta. Chrome OS je však budúcnosťou Google a tento model práce umožnil programátorom implementovať množstvo zaujímavých architektonických rozhodnutí a bezpečnostných prístupov. O čom si povieme vo zvyšku článku.

Všetko to začína systémom BIOS

Zatiaľ čo Chromium OS môže bežať na počítačoch so základným BIOSom, Chromebooky sú založené na CoreBoot. A to nie je len jedna z ich technických vlastností, ale zámerná optimalizácia. CoreBoot je plne 32-bitový „BIOS“ zbavený balastu množstva hardvérového inicializačného kódu, ktorý je v dnešnej dobe zbytočný. Spolu s optimalizáciami Google je schopný vykonať studený štart od stlačenia tlačidla napájania až po načítanie jadra za zlomok sekundy.

Ďalej CoreBoot nájde zavádzaciu oblasť GPT a načíta do pamäte binárny súbor obsahujúci zavádzač u-boot (zvyčajne sa používa vo vstavanej elektronike) a linuxové jadro, po ktorom dáva kontrolu nad u-bootom a takmer štandardnú zavádzaciu procedúru. pre linuxové distribúcie, vrátane vášho pripojenia koreňového oddielu, spustenia démonov, grafického systému a nakoniec rozhrania.

Zaujímavosťou celého tohto postupu je, že bootloader s jadrom a koreňovým FS má v samostatných sekciách „záložné kópie“ a táto funkcia slúži na aktualizáciu OS a rollback v prípade zlyhania. Počas automatickej aktualizácie sa OS Chrome vôbec nedotkne aktuálnej inštalácie, ale namiesto toho zapíše novú verziu operačného systému do tých „záložných oddielov“, ktoré sa po reštarte stanú „aktuálnymi“. V prípade zlyhania pri načítavaní novej verzie OS dôjde k spätnému swapovaniu a používateľ bude môcť pristupovať k známemu fungujúcemu systému (samotný systém je schopný pochopiť, že sa úspešne zaviedol a umiestniť príslušný príznak na aktuálnych oddieloch GPT).

Okrem toho v každej fáze prenosu kontroly z jedného komponentu na druhý (napríklad z CoreBoot na u-boot) sa digitálny podpis overí (v prípade koreňového FS overenie kontrolného súčtu blokov za chodu), ak nezodpovedá, systém sa tiež vráti k predchádzajúcej verzii. Funguje to tak, že partície s aktuálnou verziou systému sú pripojené len na čítanie a používateľ ich nemôže ani náhodou zmeniť.

INFO

EEPROM Chromebooku obsahuje nielen dve kópie firmvéru (z ktorých jedna je záložná), ale aj neprepisovateľný obnovovací firmvér, ktorý umožňuje zaviesť systém z USB kľúča alebo pamäťovej karty a skontrolovať a obnoviť systém.

Okrem CoreBoot obsahuje EEPROM každého Chromebooku aj SeaBIOS, otvorenú implementáciu systému BIOS, ktorá vám umožňuje bez problémov nainštalovať Windows alebo Linux do vášho zariadenia.

Všadeprítomný Linux

Súčasné verzie Chrome OS sú založené na Gentoo Linuxe, s výnimkou toho, že namiesto štandardného OpenRC init systému distribúcie sa používa Upstart Ubuntu. V porovnaní s bežnou linuxovou distribúciou je systém značne oklieštený, takže tu nie je nič špeciálne na stiahnutie a štartuje za sekundu. Neexistuje žiadny bežný terminál, ale je k dispozícii miestny shell crosh.

Vykonaním príkazu shell v ňom získame prístup k štandardnému bashu s právami root (samozrejme v Chromium OS) a budeme môcť skúmať systém. Existujú démoni rsyslogd, ktorých všetci poznáme, dbus-daemon (D-Bus sa používa v Chrome OS na výmenu údajov medzi prehliadačom a zvyškom systému), wpa_supplicant (overovanie v sieťach Wi-Fi), dhcpcd, x, ModemManager ( práca s 3G modemami), udev, ConnMan (spravuje sieťové pripojenia) plus viac ako tucet démonov špecifických pre OS Chrome zodpovedných okrem iného za aktualizáciu systému (update_engine), prácu s modulom TPM (chapsd), šifrovanie domácnosti adresár (cryptohomed), ladenie (debugd) a ďalšie úlohy.

Špeciálne miesto tu zaujíma démon session_manager, ktorý je zodpovedný za inicializáciu vysokoúrovňovej časti OS. Medzi jeho úlohy patrí:

  1. Spustite X server.
  2. Inicializujte premenné prostredia pre prehliadač Chrome.
  3. Vytvorte potrebné pravidlá pre adresáre, súbory a cgroups pre Chrome.
  4. Spustite Chrome.
  5. Spustite udalosť Upstart-prompt-visible, ktorá spôsobí zobrazenie prihlasovacieho okna na obrazovke.

Počas tohto procesu sa nespustia žiadne komponenty zodpovedné za vytvorenie „pracovnej plochy“ (s výnimkou prihlasovacieho okna). Vykresľuje ho samotný prehliadač, pričom sa spolieha na framework Aura, ktorý obsahuje nízkoúrovňové grafické a okenné funkcie (tvrdo akcelerované cez DRI), a desktopové prostredie Ash, ktoré vykresľuje panel úloh, dekorácie okien, Google Now a ďalšie štandardné prvky rozhrania OS. Sú síce súčasťou prehliadača Chrome, no napriek tomu bežia v rámci niekoľkých nezávislých procesov.

INFO

V prípade zlyhania zavádzania systému, ktoré sa zaznamená, ak proces prehliadača nemožno spustiť do 30 sekúnd, OS Chromium automaticky spustí server SSH a reštartuje dopytovanie jadra na hardvér pomocou príkazu udevtrigger.

Vďaka integrácii Aura a Ash do samotného prehliadača Chrome môžete získať pracovnú plochu Chrome OS na akomkoľvek OS spustením prehliadača s príznakom --open-ash.

Bezpečnosť

Okrem už diskutovaných metód na zaistenie bezpečnosti a integrity údajov, ako je bezpečné spustenie systému, šifrovaný domovský adresár s údajmi vo vyrovnávacej pamäti (šifrovanie sa vykonáva samostatne pre každého používateľa), ako aj štandardné metódy Chrome na izoláciu procesov, pluginy a Native Client zo systému (tu mechanizmus seccomp-bpf, ktorý vám umožňuje filtrovať systémové volania), Chrome OS používa množstvo ďalších bezpečnostných prístupov.

Ústrednou z nich je minijail, malá aplikácia používaná na izoláciu systémových služieb (démonov) a iných systémových komponentov. Ide o veľmi flexibilnú aplikáciu, ktorá vám umožňuje vykonávať funkcie, ako je napríklad prideľovanie „schopností“ aplikácii alebo ich odvolávanie (spôsobilosti je špeciálny subsystém jadra Linuxu, ktorý poskytuje binárnym súborom, ktoré nie sú SUID, niektoré možnosti root), uzamknutie v chroot, odvolanie root práva, nastaviť limity na zdroje (rlimits), umiestniť proces do vyhradených menných priestorov (na spôsob LXC a Docker) a aplikovať naň pravidlá cgroups.

Ak sa pozriete na výstup ps aux|grep minijail (pozri snímku obrazovky) na spustenom systéme, môžete vidieť, že minijail sa používa na spúšťanie démonov s určitými nastaveniami, ale počet takýchto démonov v pomere ku všetkým tým, ktorí bežia v systéme nie je taká veľká. Podľa dokumentov vývojárov sa minijail plánuje v budúcnosti výrazne rozšíriť a aplikovať ho na oveľa väčší počet komponentov systému vrátane grafického zásobníka a prehliadača Chrome. Zatiaľ čo je, je.

Medzi ďalšie bezpečnostné opatrenia patrí použitie príznakov kompilátora na minimalizáciu rizika prerušenia zásobníka (-fno-delete-null-pointer-checks, -fstack-protector, FORTIFY_SOURCE), použitie „zosilnenej“ ASLR (náhodnosť rozloženia adresného priestoru ) mechanizmus v linuxovom jadre (patch PaX), ktorý tam, kde je to možné, používa funkcie namiesto binárnych súborov SUID, obmedzenia načítania modulov jadra, používanie modulu TPM (v Chromebookoch) na ukladanie kľúčov na šifrovanie disku a hesla používateľa, ktoré používateľovi zakazujú bežné spúšťanie ELF binárne súbory a niektoré ďalšie celkom štandardné techniky, z ktorých mnohé sa prekrývajú s Androidom a Hardened Gentoo.

závery

Chrome OS je, samozrejme, oveľa zložitejší, ako som dokázal opísať v tomto článku. Má veľa odtieňov a obrovské množstvo zaujímavých nápadov. O tom všetkom si môžete prečítať na stránke projektu Chromium, keďže autori sú otvorení vývojárom tretích strán a napísali veľmi dobrú dokumentáciu.