Regarder sous le capot de Chrome OS

Le fait que les applications de bureau, et le bureau lui-même, passera tôt ou tard sur le Web, était clair presque après la naissance de JavaScript, de sorte que l'apparition de Chrome OS est largement prévisible. Et que ce soit Google qui a sorti le système d'exploitation cloud est également tout à fait naturel. Mais essayons de nous éloigner du débat sans fin sur l'avenir du bureau, allumé par la partie conservatrice des informaticiens, et regardons Chrome OS du point de vue de la mise en œuvre technique.

route vers les nuages

Google a annoncé Chrome OS à l'été 2009 et déjà en novembre en a fait la démonstration au public et a rendu le code source accessible au public sous le nom de Chromium OS. À l'époque, le système d'exploitation était assez simple et consistait en un navigateur Chrome plein écran fonctionnant au-dessus d'une distribution Ubuntu fortement simplifiée. Il a implémenté tous les mêmes mécanismes pour isoler les onglets et les plug-ins du navigateur, le même modèle multi-processus du navigateur, mais en général, le système d'exploitation ne différait en rien de spécial.

Au cours des cinq années suivantes, Google a continuellement, mais pas vraiment annoncé son travail, développé Chrome OS. En cours de route, il a sorti les soi-disant Chromebooks et Chromebox, qui sont devenus populaires parmi les Unixoids, qui ont démoli Chrome OS immédiatement après l'achat. Petit à petit, Gooogle a abandonné Ubuntu au profit de Gentoo (apparemment, afin de pouvoir construire des packages sans dépendances "inutiles" pour lui et les buns de la version Hardened du kit de distribution) et a remplacé le mode mono-fenêtre par le multi standard -mode fenêtre pour les ordinateurs de bureau avec une barre des tâches standard ci-dessous. Google l'a délibérément abandonné dans les premières versions de Chrome OS car le système d'exploitation était orienté vers les netbooks avec leurs petits écrans, mais les utilisateurs ne semblaient pas l'apprécier.

Il existe également des applications Web hors ligne (disponibles également dans Chrome standard) et, enfin, la prise en charge d'un certain nombre d'applications Android. Ce dernier événement était attendu après que la direction du développement des deux systèmes d'exploitation soit passée entre les mains de Sundar Pichai, qui a toujours été responsable du développement des applications Web Chrome, Chrome OS et Google.

Chrome OS évolue avec le navigateur lui-même, donc leurs versions sont les mêmes. Au moment de la rédaction de cet article, il s'agissait de la version 41, mais contrairement au navigateur, Chrome OS n'a pas de versions prêtes à être installées, à l'exception des Chromebooks et Chromebox officiellement pris en charge. Cependant, il est tout à fait possible de trouver des builds non officiels basés sur les sources de Chromium OS sur le Web. Par exemple, vous pouvez toujours télécharger des versions quotidiennes pour x86, x64 et ARM. Il suffit d'écrire l'un d'entre eux sur une clé USB et de démarrer à partir de celle-ci. Cependant, il faut être prêt à ce que tous les composants de la machine ne démarrent pas (dans mon cas, le pavé tactile est tombé). De plus, Chromium OS ne prend pas en charge Flash, DRM et Netflix, mais il a accès à la console avec les droits root.

Concepts de base

L'idée clé derrière Chrome OS est que, dans l'ensemble, il s'agit d'un système d'exploitation client léger où tout, sauf l'interface graphique et le navigateur, se trouve sur le Web. En fait, sans connexion Internet et compte Google, le système d'exploitation ne laissera même pas entrer l'utilisateur (du moins pour la première fois). Google propose d'enregistrer des fichiers sur votre Google Drive (la société offre aux acheteurs de Chromebook 100 Go), les paramètres, les extensions et les applications installées sont synchronisés de manière standard pour le navigateur Chrome. Pour l'impression, il est suggéré d'utiliser Google Cloud Print.

Dans les réalités russes, cette approche ne donne rien et crée beaucoup de difficultés, et dans le reste du monde aussi. Mais Chrome OS est l'avenir de Google, et ce modèle de travail a permis aux programmeurs de mettre en œuvre un certain nombre de décisions architecturales et d'approches de sécurité intéressantes. C'est ce dont nous parlerons dans la suite de l'article.

Tout commence avec le BIOS

Alors que Chromium OS peut fonctionner sur des ordinateurs avec un BIOS standard, les Chromebooks sont basés sur CoreBoot. Et ce n'est pas seulement une de leurs caractéristiques techniques, mais une optimisation délibérée. CoreBoot est un "BIOS" entièrement 32 bits dépouillé du lest de beaucoup de code d'initialisation matérielle inutile de nos jours. Avec les optimisations de Google, il est capable d'effectuer un démarrage à froid en appuyant sur le bouton d'alimentation pour charger le noyau en une fraction de seconde.

Ensuite, CoreBoot trouve la partition de démarrage GPT et charge en mémoire un binaire contenant le chargeur de démarrage u-boot (il est généralement utilisé dans l'électronique embarquée) et le noyau Linux, après quoi il donne le contrôle à u-boot, et la procédure de démarrage presque standard pour les distributions Linux commence, y compris le montage de la partition racine, le démarrage des démons, le système graphique et enfin l'interface.

La chose intéressante à propos de toute cette procédure est que le chargeur de démarrage avec le noyau et le FS racine ont des "copies de sauvegarde" dans des sections séparées, et cette fonctionnalité est utilisée pour mettre à jour le système d'exploitation et la restauration en cas d'échec. Lors d'une mise à jour automatique, Chrome OS ne touche pas du tout à l'installation actuelle, mais écrit à la place une nouvelle version du système d'exploitation sur les mêmes "partitions de sauvegarde" qui deviennent "actuelles" après un redémarrage. En cas d'échec lors du chargement d'une nouvelle version du système d'exploitation, un échange inversé se produira et l'utilisateur pourra accéder à un système de travail connu (le système lui-même est capable de comprendre qu'il a démarré avec succès et de mettre le drapeau approprié sur les partitions GPT actuelles).

De plus, à chaque étape du transfert de contrôle d'un composant à un autre (par exemple, de CoreBoot à u-boot), la signature numérique est vérifiée (dans le cas du FS racine, vérification de la somme de contrôle des blocs à la volée), si il ne correspond pas, le système reviendra également à la version précédente. . Cela fonctionne car les partitions avec la version actuelle du système sont montées en lecture seule et l'utilisateur ne peut même pas les modifier accidentellement.

INFO

L'EEPROM du Chromebook contient non seulement deux copies du micrologiciel (dont une de sauvegarde), mais également un micrologiciel de récupération non réinscriptible qui vous permet de démarrer le système à partir d'une clé USB ou d'une carte mémoire et de vérifier et de restaurer le système.

En plus de CoreBoot, l'EEPROM de tout Chromebook comprend SeaBIOS, une implémentation de BIOS ouverte qui vous permet d'installer Windows ou Linux sur votre appareil sans aucun problème.

Le Linux omniprésent

Les versions actuelles de Chrome OS sont basées sur Gentoo Linux, à l'exception du fait que Upstart d'Ubuntu est utilisé à la place du système d'initialisation OpenRC standard de la distribution. Comparé à une distribution Linux classique, le système est considérablement réduit, il n'y a donc rien de spécial à télécharger ici et il démarre en une seconde. Il n'y a pas de terminal standard, mais un shell local est disponible via.

En y exécutant la commande shell, nous aurons accès au bash standard avec les droits root (dans Chromium OS, bien sûr) et nous pourrons explorer le système. Il existe des démons rsyslogd que nous connaissons tous, dbus-daemon (D-Bus est utilisé dans Chrome OS pour échanger des données entre le navigateur et le reste du système), wpa_supplicant (authentification dans les réseaux Wi-Fi), dhcpcd, x, ModemManager ( fonctionne avec les modems 3G), udev, ConnMan (gère les connexions réseau) plus une douzaine de démons spécifiques à Chrome OS chargés, entre autres, de mettre à jour le système (update_engine), de travailler avec le module TPM (chapsd), de chiffrer la maison répertoire (cryptohomed), débogage (debugd) et autres tâches.

Une place spéciale est ici occupée par le démon session_manager, qui est responsable de l'initialisation de la partie de haut niveau du système d'exploitation. Ses tâches comprennent :

  1. Démarrez le serveur X.
  2. Initialiser les variables d'environnement pour le navigateur Chrome.
  3. Créez les répertoires, fichiers et règles de groupes de contrôle nécessaires pour Chrome.
  4. Lancez Chrome.
  5. Lancez l'événement Upstart login-prompt-visible, qui fera apparaître la fenêtre de connexion à l'écran.

Au cours de ce processus, tous les composants responsables de la formation du "bureau" (à l'exception de la fenêtre de connexion) ne sont pas lancés. Il est rendu par le navigateur lui-même, en s'appuyant sur le framework Aura, qui comprend des fonctions graphiques et de fenêtrage de bas niveau (hard accéléré via DRI), et l'environnement de bureau Ash, qui rend la barre des tâches, les décorations de fenêtre, Google Now et d'autres éléments d'interface standard. Bien qu'ils fassent partie du navigateur Chrome, ils s'exécutent néanmoins à l'intérieur de plusieurs processus indépendants.

INFO

En cas d'échec du démarrage du système, qui est enregistré si le processus du navigateur ne peut pas être démarré dans les 30 secondes, Chromium OS démarre automatiquement le serveur SSH et redémarre l'interrogation du noyau pour le matériel à l'aide de la commande udevtrigger.

Grâce à l'intégration d'Aura et d'Ash dans Chrome lui-même, vous pouvez obtenir le bureau Chrome OS sur n'importe quel système d'exploitation en lançant le navigateur avec l'indicateur --open-ash.

Sécurité

En plus des méthodes déjà discutées pour assurer la sécurité et l'intégrité des données, telles que le démarrage sécurisé du système, un répertoire personnel crypté avec des données mises en cache (le cryptage est effectué séparément pour chaque utilisateur), ainsi que les méthodes Chrome standard pour isoler les processus, les plugins et Native Client du système (ici, le mécanisme seccomp-bpf, qui permet de filtrer les appels système), Chrome OS utilise un certain nombre d'autres approches de sécurité.

Au centre d'entre eux se trouve minijail, une petite application utilisée pour isoler les services système (démons) et d'autres composants du système. Il s'agit d'une application très flexible qui vous permet d'exécuter des fonctions telles que donner à l'application des "capacités" ou les révoquer (capacités - un sous-système spécial du noyau Linux pour donner aux binaires non SUID des capacités root), le verrouiller dans un chroot, révoquer la racine droits, fixer des limites sur les ressources (rlimits), placer le processus dans des espaces de noms dédiés (à la manière de LXC et Docker) et lui appliquer des règles de cgroups.

Si vous regardez la sortie de ps aux|grep minijail (voir capture d'écran) sur un système en cours d'exécution, vous pouvez voir que minijail est utilisé pour lancer des démons avec certains paramètres, mais le nombre de ces démons par rapport à tous ceux qui s'exécutent sur le système n'est pas si grand. Selon les documents des développeurs, minijail devrait être considérablement étendu à l'avenir et l'appliquer à un nombre beaucoup plus grand de composants système, y compris la pile graphique et Chrome. Pour l'instant, ce qui est, est.

D'autres mesures de sécurité incluent l'utilisation d'indicateurs de compilateur pour minimiser le risque de rupture de pile (-fno-delete-null-pointer-checks, -fstack-protector, FORTIFY_SOURCE), l'utilisation d'un ASLR "renforcé" (Address space layout randomization ) mécanisme dans le noyau Linux (correctif PaX), utilisant des capacités au lieu des binaires SUID lorsque cela est possible, restrictions sur le chargement des modules du noyau, utilisation du module TPM (dans les Chromebooks) pour stocker les clés de chiffrement du disque et le mot de passe de l'utilisateur, interdisant à l'utilisateur d'exécuter régulièrement Les binaires ELF, et quelques autres techniques assez standard, dont beaucoup chevauchent Android et Hardened Gentoo.

conclusion

Bien sûr, Chrome OS est bien plus complexe que ce que j'ai pu décrire dans cet article. Il a beaucoup de nuances et un grand nombre d'idées intéressantes. Vous pouvez lire tout cela sur le site Web du projet Chromium, car les auteurs sont ouverts aux développeurs tiers et ont rédigé une très bonne documentation.

2022 wisemotors.com. Comment ça fonctionne. Fer. Exploitation minière. Crypto-monnaie.