Търсене под капака на Chrome OS

Това, че настолните приложения и самият десктоп рано или късно ще се преместят в мрежата, беше ясно почти след раждането на JavaScript, така че появата на Chrome OS е до голяма степен предвидима. И това, че Google пусна облачната ОС, също е напълно естествено. Но нека се опитаме да се отдалечим от безкрайния дебат за бъдещето на работния плот, разпален от консервативната част от ИТ хората, и да погледнем Chrome OS от гледна точка на техническата реализация.

път към облаците

Google обяви Chrome OS през лятото на 2009 г. и още през ноември я демонстрира на обществеността и направи изходния код публично достъпен под името Chromium OS. Тогава операционната система беше доста проста и представляваше браузър Chrome на цял екран, работещ върху силно съкратена дистрибуция на Ubuntu. Той внедри всички същите механизми за изолиране на раздели и добавки на браузъра, същия многопроцесен модел на браузъра, но като цяло операционната система не се различаваше по нищо особено.

През следващите пет години Google непрекъснато, но без да рекламира работата си, разработи Chrome OS. По пътя той пусна така наречените Chromebook и Chromebox, които станаха популярни сред Unixoids, които разрушиха Chrome OS веднага след покупката. Постепенно Gooogle изостави Ubuntu в полза на Gentoo (очевидно, за да може да създава пакети без „безполезни“ зависимости за него и кифлите на Hardened версията на комплекта за разпространение) и замени режима на един прозорец със стандартния multi -прозоречен режим за настолни компютри със стандартна лента на задачите отдолу. Google умишлено го изостави в първите версии на Chrome OS, тъй като операционната система беше насочена към нетбуци с малки екрани, но очевидно потребителите не го оцениха.

Има и офлайн уеб приложения (достъпни и в обикновен Chrome) и накрая поддръжка за редица приложения за Android. Последното събитие беше очаквано, след като ръководството на разработката на двете операционни системи премина в ръцете на Сундар Пичай, който винаги е отговарял за разработката на Chrome, Chrome OS и уеб приложенията на Google.

Chrome OS се развива заедно със самия браузър, така че версиите им са еднакви. Към момента на писане това беше версия 41, но за разлика от браузъра, Chrome OS няма компилации, готови за инсталиране, с изключение на официално поддържаните Chromebook и Chromebox. Въпреки това е напълно възможно да намерите неофициални версии, базирани на източници на Chromium OS в мрежата. Например, винаги можете да изтегляте ежедневни компилации за x86, x64 и ARM. Достатъчно е да запишете един от тях на USB флаш устройство и да стартирате от него. Трябва обаче да сте подготвени, че не всички компоненти на машината ще стартират (в моя случай падна тъчпада). Освен това Chromium OS не поддържа Flash, DRM и Netflix, но има достъп до конзолата с root права.

Основни понятия

Основната идея зад Chrome OS е, че като цяло това е операционна система с тънък клиент, където всичко освен GUI и браузъра е в мрежата. Всъщност без интернет връзка и акаунт в Google операционната система дори няма да пусне потребителя вътре (поне за първи път). Google предлага да запазвате файлове във вашия Google Drive (компанията дава на купувачите на Chromebook 100 GB), настройките, разширенията и инсталираните приложения се синхронизират по стандартния начин за браузъра Chrome. За печат се препоръчва да използвате Google Cloud Print.

В руските реалности този подход не дава нищо и създава много трудности, както и в останалия свят. Но Chrome OS е бъдещето на Google и този модел на работа позволи на програмистите да внедрят редица интересни архитектурни решения и подходи за сигурност. За което ще говорим в останалата част на статията.

Всичко започва с BIOS

Докато Chromium OS може да работи на компютри със стандартен BIOS, Chromebook са базирани на CoreBoot. И това не е просто една от техническите им характеристики, а умишлена оптимизация. CoreBoot е напълно 32-битов "BIOS", лишен от баласта на много код за инициализация на хардуер, безполезен в наши дни. Заедно с оптимизациите на Google, той е в състояние да извърши студен старт от натискане на бутона за захранване до зареждане на ядрото само за част от секундата.

След това CoreBoot намира дяла за зареждане на GPT и зарежда в паметта двоичен файл, съдържащ bootloader u-boot (обикновено се използва във вградената електроника) и Linux ядрото, след което дава контрол на u-boot и почти стандартната процедура за зареждане за Linux дистрибуции започва, включително монтиране на основния дял, стартиране на демоните, графичната система и накрая интерфейса.

Интересното в цялата тази процедура е, че буутлоудъра с ядрото и root FS имат "резервни копия" в отделни секции и тази функция се използва за актуализиране на ОС и връщане назад в случай на повреда. По време на автоматична актуализация Chrome OS изобщо не докосва текущата инсталация, а вместо това записва нова версия на операционната система в самите „резервни дялове“, които стават „текущи“ след рестартиране. В случай на повреда при зареждане на нова версия на операционната система, ще се извърши обратен суап и потребителят ще има достъп до известна работеща система (самата система може да разбере, че е стартирала успешно и да постави съответния флаг на текущите GPT дялове).

Освен това, на всеки етап от прехвърлянето на контрола от един компонент към друг (например от CoreBoot към u-boot), цифровият подпис се проверява (в случай на root FS, блокова проверка на контролната сума в движение), ако не съвпада, системата също ще се върне към предишната версия. . Това работи, защото дяловете с текущата версия на системата са монтирани само за четене и потребителят не може дори случайно да ги промени.

ИНФО

EEPROM на Chromebook съдържа не само две копия на фърмуера (едното от които е резервно копие), но и фърмуер за възстановяване без възможност за презаписване, който ви позволява да стартирате системата от USB флаш устройство или карта с памет и да проверите и възстановите системата.

В допълнение към CoreBoot, EEPROM на всеки Chromebook включва SeaBIOS, отворена реализация на BIOS, която ви позволява да инсталирате Windows или Linux на вашето устройство без никакви проблеми.

Вездесъщият Linux

Текущите версии на Chrome OS са базирани на Gentoo Linux, с изключение на това, че Upstart на Ubuntu се използва вместо стандартната OpenRC система за стартиране на дистрибуцията. В сравнение с обикновената Linux дистрибуция, системата е значително съкратена, така че тук няма нищо специално за изтегляне и стартира само за секунда. Няма обикновен терминал, но има достъпен локален shell crosh чрез.

Изпълнявайки командата shell в него, ще получим достъп до стандартния bash с root права (в Chromium OS, разбира се) и ще можем да изследваме системата. Има демони rsyslogd, които всички познаваме, dbus-daemon (D-Bus се използва в Chrome OS за обмен на данни между браузъра и останалата част от системата), wpa_supplicant (удостоверяване в Wi-Fi мрежи), dhcpcd, x, ModemManager ( работа с 3G модеми), udev, ConnMan (управлява мрежовите връзки) плюс повече от дузина специфични за Chrome OS демони, отговорни, наред с други неща, за актуализиране на системата (update_engine), работа с TPM модула (chapsd), криптиране на дома директория (cryptohomed), отстраняване на грешки (debugd) и други задачи.

Специално място тук заема демонът session_manager, който отговаря за инициализирането на частта от високо ниво на ОС. Задачите му включват:

  1. Стартирайте X сървър.
  2. Инициализирайте променливите на средата за браузъра Chrome.
  3. Създайте необходимите директории, файлове и правила за cgroups за Chrome.
  4. Стартирайте Chrome.
  5. Задействайте събитието Upstart, което е видимо за влизане, което ще накара прозореца за влизане да се появи на екрана.

По време на този процес всички компоненти, отговорни за формирането на "работен плот" (с изключение на прозореца за влизане), не се стартират. Изобразява се от самия браузър, разчитайки на рамката Aura, която включва графики от ниско ниво и функции за прозорци (твърдо ускорено чрез DRI), и работната среда на Ash, която изобразява лентата на задачите, декорациите на прозорци, Google Now и други стандартни интерфейсни елементи OS. Въпреки че са част от браузъра Chrome, те все пак работят в няколко независими процеса.

ИНФО

В случай на грешка при зареждане на системата, която се регистрира, ако процесът на браузъра не може да бъде стартиран в рамките на 30 секунди, Chromium OS автоматично стартира SSH сървъра и рестартира запитването на ядрото за хардуер с помощта на командата udevtrigger.

Благодарение на интегрирането на Aura и Ash в самия Chrome, можете да получите работния плот на Chrome OS на всяка операционна система, като стартирате браузъра с флага --open-ash.

Безопасност

В допълнение към вече обсъдените методи за гарантиране на сигурността и целостта на данните, като защитено стартиране на системата, криптирана начална директория с кеширани данни (шифроването се извършва отделно за всеки потребител), както и стандартни методи на Chrome за изолиране на процеси, плъгини и Native Client от системата (тук механизъм seccomp-bpf, който ви позволява да филтрирате системни повиквания), Chrome OS използва редица други подходи за сигурност.

Централно сред тях е minijail, малко приложение, използвано за изолиране на системни услуги (демони) и други системни компоненти. Това е много гъвкаво приложение, което ви позволява да изпълнявате функции като даване на „възможности“ на приложението или отмяната им (capabilities е специална подсистема на ядрото на Linux за даване на не-SUID двоични файлове на някои root възможности), заключване в chroot, отмяна на root права, задайте ограничения на ресурсите (rlimits), поставете процеса в специални пространства от имена (по начина на LXC и Docker) и приложете правилата на cgroups към него.

Ако погледнете изхода на ps aux|grep minijail (вижте екранната снимка) на работеща система, можете да видите, че minijail се използва за стартиране на демони с определени настройки, но броят на тези демони по отношение на всички работещи в системата не е толкова голям. Според документите на разработчиците, minijail се планира да бъде значително разширен в бъдеще и да се приложи към много по-голям брой системни компоненти, включително графичния стек и Chrome. Засега каквото е, си е.

Други мерки за сигурност включват използването на флагове на компилатора за минимизиране на риска от прекъсване на стека (-fno-delete-null-pointer-checks, -fstack-protector, FORTIFY_SOURCE), използването на "подсилен" ASLR (рандомизация на оформлението на адресното пространство ) механизъм в ядрото на Linux (PaX кръпка), използване на възможности вместо SUID двоични файлове, където е възможно, ограничения за зареждане на модули на ядрото, използване на модула TPM (в Chromebook) за съхраняване на дискови ключове за криптиране и парола на потребителя, забрана на потребителя да изпълнява редовно ELF двоични файлове и някои други съвсем стандартни техники, много от които се припокриват с Android и Hardened Gentoo.

заключения

Разбира се, Chrome OS е много по-сложна, отколкото успях да опиша в тази статия. Има много нюанси и огромен брой интересни идеи. Можете да прочетете за всичко това на уебсайта на проекта Chromium, тъй като авторите са отворени за разработчици на трети страни и са написали много добра документация.