- Зміст статті Що десктопні програми, та й сам десктоп рано чи пізно переїде в Інтернет, було зрозуміло...
- базові концепції
- Все починається з BIOS
- INFO
- всюдисущий Linux
- INFO
- Безпека
- висновки
Зміст статті
Що десктопні програми, та й сам десктоп рано чи пізно переїде в Інтернет, було зрозуміло чи не після народження JavaScript, тому поява Chrome OS багато в чому передбачувано. І що хмарну ОС випустила саме Google, теж абсолютно закономірно. Але давай спробуємо відійти від нескінченних дебатів про майбутнє десктопа, що розпалюють консервативною частиною айтішників, і подивимося на Chrome OS з точки зору технічної реалізації.
Дорога в хмари
Google анонсувала Chrome OS влітку 2009 року і вже в листопаді продемонструвала її публіці і виклала исходники у відкритий доступ під ім'ям Chromium OS. Тоді операційка була досить проста і являла собою запущений на повний екран браузер Chrome, який працює поверх сильно урізаного дистрибутива Ubuntu. У ній були реалізовані всі ті ж механізми ізоляції вкладок браузера і плагінів, все та ж многопроцессность модель роботи браузера, але в цілому нічим особливим операційка не відрізнялася.
Протягом наступних п'яти років Google безперервно, але не особливо афішуючи свою роботу розвивала Chrome OS. Попутно вона випускала так звані Chromebook'і і Chromebox'и, що стали популярними серед юніксоід, які зносили Chrome OS відразу після покупки. Поступово Gooogle відмовилася від Ubuntu на користь Gentoo (судячи з усього - щоб отримати можливість складання пакетів без «непотрібних» для неї залежностей і плюшки Hardened-версії дистрибутива) і замінила-таки одновіконний режим на стандартний для десктопів багатовіконний зі стандартною панеллю задач знизу. Google свідомо відмовилася від нього в перших версіях Chrome OS, оскільки ОС була орієнтована на нетбуки з їх невеликими екранами, але, судячи з усього, користувачі цього не оцінили.
З'явилися і офлайнові веб-додатки (доступні також в звичайному Chrome) і, нарешті, підтримка ряду додатків для Android. Остання обставина стало цілком очікуваним після того, як керівництво розробкою обох операційних систем перейшло в руки Сундара Пічая (Sundar Pichai), який завжди був відповідальним за розвиток Chrome, Chrome OS і веб-додатків Google.
Chrome OS розвивається разом з самим браузером, тому їх версії збігаються. На момент написання статті це була версія 41, але на відміну від браузера у Chrome OS немає готових збірок для установки за винятком офіційно підтримуваних Chromebook'ов і Chromebox'ов. Однак в Мережі цілком можна знайти неофіційні збірки на базі початкових кодів Chromium OS. наприклад, тут завжди можна скачати щоденні збірки для x86, x64 і ARM. Досить записати одну з них на флешку і завантажитися з неї. Однак треба бути готовим, що не всі компоненти машини заведуться (в моєму випадку відвалився тачпад). До того ж Chromium OS не підтримує Flash, DRM і Netflix, зате в ній є доступ до консолі з правами root.
Робочий стіл Chrome OS з вікном налаштувань і панеллю
базові концепції
Ключова ідея Chrome OS в тому, що за великим рахунком це ОС для тонких клієнтів, де все, крім графічного інтерфейсу і браузера, знаходиться в Мережі. Фактично без підключення до інтернету і свого облікового запису Google операційка навіть не пустить користувача всередину (по крайней мере в перший раз). Файли Google пропонує зберігати в свій Google Drive (покупцям Chromebook'ов компанія дає 100 Гб), настройки, розширення і встановлені програми синхронізуються стандартним для браузера Chrome способом. Для друку пропонується використовувати Google Cloud Print.
У російських реаліях такий підхід нічого не дає і створює масу труднощів, та й в іншому світі теж. Але Chrome OS - це заділ Google на майбутнє, і така модель роботи дозволила програмістам реалізувати ряд цікавих архітектурних рішень і підходів до забезпечення безпеки. Про що ми і поговоримо в частині статті.
Все починається з BIOS
Незважаючи на те що Chromium OS може працювати на комп'ютерах зі стандартним BIOS, Chromebook'і базуються на CoreBoot. І це не просто одна з їх технічних особливостей, а навмисна оптимізація. CoreBoot - повністю 32-бітний «BIOS», позбавлений баласту з великої кількості коду ініціалізації обладнання, марного в наші дні. Укупі з оптимізаціями Google він здатний виконати холодний старт від натискання кнопки живлення до завантаження ядра буквально за частки секунди.
Далі CoreBoot знаходить завантажувальний розділ GPT і завантажує в пам'ять бінарник, що містить бутлоадер u-boot (він зазвичай використовується під вбудовується електроніці) і ядро Linux, після чого віддає управління u-boot, і починається майже стандартна для Linux-дистрибутивів процедура завантаження, що включає в себе монтування кореневого розділу, запуск демонів, графічної системи і, нарешті, інтерфейсу.
Цікаво у всій цій процедурі те, що у завантажувача з ядром і кореневої ФС є «резервні копії» в окремих розділах, і ця особливість використовується для оновлення ОС і відкату в разі збою. Під час автоматичного оновлення Chrome OS взагалі не чіпає поточну установку, а замість цього прописує нову версію ОС в ті самі «резервні розділи», які стають «поточними» після перезавантаження. У разі збою при завантаженні нової версії ОС відбудеться зворотна зміна місцями і користувач може отримати доступ до свідомо робочої системі (система сама здатна зрозуміти, що вона успішно завантажилася, і поставити відповідний прапор на поточні GPT-розділи).
Більш того, на кожному етапі передачі управління від одного компонента до іншого (наприклад, від CoreBoot до u-boot) відбувається звірка цифрового підпису (у разі кореневої ФС - по блоках звірка контрольних сум на льоту), при розбіжності якої система також відкотиться до минулій версії . Це працює, тому що розділи з поточною версією системи монтуються тільки на читання і користувач навіть випадково не зможе їх змінити.
Процес завантаження Chrome OS
INFO
EEPROM Chromebook'а містить не тільки дві копії firmware (одна з яких резервна), але і неперезапісиваемий recovery firmware, що дозволяє завантажити систему з USB-флешки або карти пам'яті і провести перевірку і відновлення системи.
Крім CoreBoot, EEPROM будь-якого Chromebook'а включає в себе SeaBIOS - відкриту реалізацію BIOS, яка дозволяє без зайвого клопоту встановити на пристрій Windows або Linux.
всюдисущий Linux
Поточні версії Chrome OS засновані на Gentoo Linux з тим винятком, що замість стандартної для даного дистрибутива системи ініціалізації OpenRC тут задіяний убунтовскій Upstart. У порівнянні зі звичайним дистрибутивом Linux система сильно урізана, тому завантажувати тут особливого годі й стартує вона буквально за секунду. Звичайного терміналу немає, але є місцевий shell crosh, доступний за.
Linux і в Chrome OS Linux
Виконавши в ньому команду shell, ми отримаємо доступ до стандартного bash з правами root (в Chromium OS, природно) і зможемо дослідити систему. Тут є всім нам відомі демони rsyslogd, dbus-daemon (D-Bus використовується в Chrome OS для обміну даними між браузером і іншими частинами системи), wpa_supplicant (аутентифікація в Wi-Fi-мережах), dhcpcd, ікси, ModemManager (робота з 3G -модеми), udev, ConnMan (управляє з'єднаннями з мережею) плюс більше десятка специфічних для Chrome OS демонів, що відповідають в тому числі за оновлення системи (update_engine), роботу з TPM-модулем (chapsd), шифрування домашнього каталогу (cryptohomed), налагодження (debugd) та інші завдання.
Особливе місце тут займає демон session_manager, відповідальний за ініціалізацію високорівневою частини ОС. У його завдання входить:
- Запустити X-сервер.
- Ініціалізувати змінні оточення для браузера Chrome.
- Створити необхідні каталоги, файли і правила cgroups для Chrome.
- Запустити Chrome.
- Викликати Upstart-подія login-prompt-visible, в результаті чого на екрані з'явиться вікно логіна.
Під час цього процесу дійсно не запускаються будь-які компоненти, що відповідають за формування «робочого столу» (за винятком вікна логіна). Його отрисовкой займається сам браузер, покладаючись на фреймворк Aura, що включає в себе низькорівневі функції для роботи з графікою і вікнами (з хардварний прискоренням через DRI) і оточення робочого столу Ash, яке отрісовиваєт панель задач, декорації вікон, Google Now і інші стандартні елементи інтерфейсу ОС. Будучи частиною браузера Chrome, вони, тим не менш, працюють всередині декількох незалежних процесів.
З чого складається Chrome OS
INFO
У разі збою завантаження системи, який реєструється, якщо процес браузера не може бути запущений в протягом 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. Поки ж що є, то є.
Демони, запущені під контролем minijail
З інших засобів забезпечення безпеки можна відзначити застосування прапорів компілятора для мінімізації ризику зриву стека (-fno-delete-null-pointer-checks, -fstack-protector, FORTIFY_SOURCE), задіяння «посиленого» механізму ASLR (Address space layout randomization) в ядрі Linux (патч PaX), використання capabilities замість SUID-бінарників де це можливо, обмеження на завантаження модулів ядра, використання модуля TPM (в Chromebook'ах) для зберігання ключів шифрування диска і пароля користувача, заборона на запуск звичайних ELF-бінарників користувачем і деякі інші цілком стандартні техніки, багато з яких перетинаються з Android і Hardened Gentoo.
висновки
Звичайно, Chrome OS набагато складніше, ніж я зміг описати в цій статті. У ній є безліч нюансів і величезна кількість цікавих ідей. Про все це можна почитати на сайті проекту Chromium , Благо автори відкриті по відношенню до стороннім розробникам і написали досить непогану документацію.