Archives de catégorie : Linux

Fonctionnalités du noyau Linux (Episode 1) – Architecture et processus

Fonctionnalités du noyau Linux (Episode 1)

La tâche la plus difficile qu’on puisse concevoir en informatique est d’écrire un noyau de système d’exploitation. Seuls les développeurs les plus talentueux peuvent se lancer dans une telle tâche. Nous allons découvrir pourquoi en étudiant de plus près les fonctionnalités assurées par le noyau Linux, qui assure les fonctions d’un noyau Unix classique.

Le noyau Linux a été développé depuis 1991, initialement par un jeune informaticien finlandais nommé Linus Torvalds, puis au fil des années qui ont suivi avec la contribution de dizaines de milliers de développeurs dans le monde. Au fil des années, le noyau Linux est devenu ni plus ni moins que le plus grand projet collaboratif de l’histoire de l’humanité. La taille du code source du noyau Linux est réputée dépasser aujourd’hui plus de 40 millions de lignes de code : principalement du C, un peu d’assembleur, et une dynamique naissante pour y introduire du Rust.

Pour comprendre les fonctions qu’assure ce noyau, commençons par les aspects architecturaux de base.

La figure ci-dessus présente ce qui se passe sur une machine Linux allumée. La partie basse représente le matériel physique de la machine (clés USB, disques durs, cartes réseaux, clavier, souris, écran, etc.).

La partie milieu représente le noyau Linux. Seul ce noyau peut accéder au matériel, que ce soit en lecture ou en écriture.

La partie haute représente les applications qui tournent sur la machine (Firefox, etc.). Les applications ne peuvent en aucun cas accéder directement au matériel, elles ne peuvent que demander au noyau de le faire. Pour recueillir ces demandes, le noyau met à disposition des applications des appels systèmes, qui peuvent être appelés par les applications.

Parmi les applications, une a une importance particulière : le gestionnaire d’interface graphique. Historiquement les systèmes Unix, dont Linux, fonctionnaient avec un gestionnaire d’interface graphique appelé X-Window. X-Window avait des qualités : il était notamment nativement réseau, c’est-à-dire qu’une application lancée sur une machine A pouvait demander à apparaitre à l’écran d’une machine B. Pour cela il y avait une simple variable d’environnement à changer pour que le routage des fenêtres soit différent (on tapait par exemple export DISPLAY=machine_B :0 et l’application tournait sur la machine A mais ses fenêtres apparaissaient sur la machine B. C’était une époque très cool, on pouvait faire des plaisanteries envoyées sur les machines des copains). Mais X-Window avait aussi des défauts (parait-il), notamment de sécurité.

Sur les systèmes Linux modernes, Xfree86 (l’implémentation libre de X-Window) a donc été remplacé par Wayland, qui a les qualités et défauts inverses. Il n’a plus de problème de sécurité, il est probablement plus performant, mais il n’est plus réseau comme l’était X-Window.

Bref, quoi qu’il en soit, que l’on utilise X-Window ou Wayland, il y a toujours besoin de cette application un peu spéciale qu’est le gestionnaire d’interface graphique. Cette application gère les fenêtres graphiques et donc propose des primitives appelables par des environnements de bureau comme Gnome ou KDE, ou directement par vos applications graphiques si vous en programmez vous-même.

Continuer la lecture

Tutoriel Linux : auto héberger ses codes source avec Forgejo

Forgejo est une plateforme d’hébergement de code, de suivi de bugs et de révision de code, à installer sur vos propres serveurs. Elle permet à une équipe de gérer ses dépôts Git, ses tickets (issues), ses demandes de fusion (pull requests) et ses wiki, le tout dans une interface proche de GitHub ou GitLab. Elle intègre également un système d’automatisation (Forgejo Actions) pour exécuter des tests ou des tâches à chaque mise à jour du code.

Forgejo est né en octobre 2022. À cette date, la société Gitea Ltd, à but lucratif, a pris le contrôle du projet Gitea, sans consultation préalable de la communauté. En réaction, un groupe d’anciens mainteneurs de Gitea et de contributeurs du logiciel libre a proposé de créer un fork (une bifurcation) sous l’égide de Codeberg e.V.. La proposition a été acceptée le 16 novembre 2022, et le projet a été annoncé officiellement le 15 décembre 2022.

Initialement présenté comme un « soft fork » (un fork qui suit encore de près Gitea), Forgejo a ensuite pris ses distances. En février 2024, il est devenu un « hard fork », affirmant des choix de gouvernance et de développement durablement différents.

Gouvernance du projet

Forgejo est placé sous la tutelle de Codeberg e.V., une association à but non lucratif et démocratique, dédiée au logiciel libre, enregistrée à Berlin. Codeberg e.V. possède les noms de domaine de Forgejo et fournit des ressources.

La gouvernance du projet est définie collectivement par ses contributeurs, avec un processus de décision ouvert et transparent. Tout le développement, les tests et les publications sont réalisés exclusivement avec des logiciels libres. En août 2024, Forgejo a adopté la licence GNU GPL version 3 ou ultérieure.

Installation sous Docker

L’installation se fait grâce à un conteneur docker, il faut donc que votre serveur soit prêt à lancer des services docker. Si ce n’est pas le cas, vous trouverez le guide d’installation docker sous Ubuntu ici et celui de Devuan ici.

Continuer la lecture

Tutoriel Linux : Auto-héberger son agrégateur de nouvelles (RSS)

Il y a beaucoup de manières de consommer les actualités : soit en allant voir site par site, soit en utilisant un agrégateur de nouvelles qui pré-digère les actualités et les centralise.

Il y a beaucoup de logiciels agrégateurs de nouvelles qui existent, mais ici nous allons utiliser Fusion, à installer via docker soit sur son PC perso, soit sur un serveur.

Avec un tel agrégateur de nouvelles nos préférences de lecture ne sont pas connues de tiers, et nos flux de lecture d’articles seront accessibles depuis n’importe quel appareil avec un simple navigateur web, y compris sur un smartphone, l’interface web de fusion étant prévue pour s’adapter au format du lecteur.

Nous allons ni plus ni moins bâtir notre journal d’actualités en ligne, privé.

Fusion permet de s’abonner à tout flux RSS disponible sur Internet, et classer les flux par groupe (Actualités, Tech, Sport, Cuisine, …)

Installation de Fusion sur le serveur

L’installation se fait grâce à un conteneur docker, il faut donc que votre serveur soit prêt à lancer des services docker. Si ce n’est pas le cas, vous trouverez le guide d’installation docker sous Ubuntu ici et celui de Devuan ici.

Nous allons créer un répertoire fusion-docker et y mettre le fichier docker-compose.yml

cd
mkdir fusion-docker
cd fusion-docker

Dans le fichier docker-compose.yml, nous allons mettre (remplacer mot de passe par le mot de passe que vous choisissez) :

services:
  fusion:
    image: ghcr.io/0x2e/fusion:latest
    container_name: fusion
    restart: unless-stopped
    environment:
      - TZ=UTC
      - PASSWORD=motdepasse
    volumes:
      - ./fusion-data:/data
    ports:
      - "8080:8080"

Le service Fusion se lance par la commande :

docker compose up –d

Pour utiliser le service, il faut se connecter sur http://serveur:8080

Continuer la lecture

Tutoriel Linux : auto-héberger Siyuan, le Notion gratuit

Notion est devenu au fil des années l’outil de référence pour la prise de notes des jeunes. C’est un produit très bon mais pas donné, et qui ne propose pas de version auto-hébergeable.

Siyuan est la réponse chinoise à Notion. Si le produit n’est pas donné non plus, du moins en version nomale en ligne (sur le modèle de Notion), la différence est qu’on peut l’auto-héberger facilement et surtout gratuitement sur un serveur. C’est cette fonctionnalité d’auto-hébergement gratuite que nous allons utiliser dans ce tutoriel.

Au niveau des fonctionnalités, Siyuan permet de faire pratiquement tout ce que l’on peut faire sur Notion en termes de prise de notes. Une application Android existe également mais elle ne permet de se connecter que sur le serveur officiel payant de Siyuan, pas aux instances d’auto-hébergement gratuites.

Installation de la version auto-hébergeable de Siyuan sur un serveur Linux

Continuer la lecture

Tutoriel Linux : TorServ le serveur web Tor qui tient dans un binaire

TorServ est un serveur web statique « durci » (hardened) qui a une particularité unique : il intègre nativement le réseau Tor et se configure tout seul pour devenir un service caché (hidden service) .

Concrètement, il vous suffit de lancer le programme dans un dossier contenant vos fichiers HTML, et en quelques secondes, votre site est accessible via une adresse en .onion​ sur le dark web, sans aucune configuration complexe.

L’objectif principal est de permettre la publication anonyme et la résistance à la censure, même dans des environnements à haut risque. Le projet est open-source et écrit en Go .

Les caractéristiques qui le rendent unique

TorServ ne se contente pas de « simplifier » la configuration d’un service Tor. Il est conçu dès le départ avec la sécurité et l’anonymat comme priorités absolues.

  • Zéro configuration : C’est sa promesse phare. L’outil contient tout le nécessaire (le binaire de Tor est inclus). On décompresse et on exécute .
  • Sécurité et anonymat avancés :
    • Aucune journalisation (No logs) : Par conception, TorServ n’enregistre aucune requête, ce qui le rend muet même en cas de compromission .
    • Pas d’exposition sur le clearnet : Le serveur web n’écoute que sur votre propre machine (127.0.0.1​). Il est donc impossible d’y accéder directement par une adresse IP classique .
    • Nettoyage des métadonnées : Il supprime automatiquement les données EXIF des images (JPEG, PNG, GIF, BMP) avant de les servir, évitant ainsi les fuites d’informations .
    • Obfuscation du trafic : Pour contrer l’analyse du trafic, il ajoute un délai aléatoire (entre 50 et 200ms) sur les réponses et uniformise la taille des paquets de données .
    • Piège à robots : Si un robot scanne votre site à la recherche de dossiers inexistants, TorServ lui renvoie lentement des données sans intérêt au lieu d’une erreur 404 classique .
    • Headers HTTP sécurisés : Il supprime les en-têtes qui pourraient fournir des informations sur le serveur (comme Date​, ETag​, Last-Modified​) .
  • Simplicité d’utilisation : Une fois lancé, le programme vous affiche directement votre nouvelle adresse .onion​. Vous n’avez rien d’autre à faire .
  • Sandboxing automatique : Si firejail​ est installé sur votre système, TorServ s’y exécutera automatiquement pour limiter les dégâts en cas de faille de sécurité .

Limitations importantes à connaître

Avant de vous lancer, il est crucial de comprendre les cas d’usage de TorServ et ses limites :

  • Contenu statique uniquement : Oubliez WordPress, PHP, bases de données ou formulaires interactifs. TorServ ne sert que des fichiers HTML, CSS, JavaScript et images .
  • Pas de support des PDF : Par mesure de sécurité (à cause des métadonnées et scripts potentiels), TorServ refuse de servir les fichiers PDF .
  • Pas de compression HTTPS/Gzip : La compression est désactivée pour prévenir certains types d’attaques (comme BREACH). Le chiffrement est de toute façon assuré par le réseau Tor .
  • Projet récent : Bien que fonctionnel, il n’a pas la maturité et la base d’utilisateurs d’un serveur comme Apache ou Nginx .

Guide d’installation et d’utilisation sur Ubuntu

Continuer la lecture

Tutoriel Linux : sauvegarder son serveur avec rsyncy

Lorsqu’on dispose d’un serveur en ligne, il est indispensable d’en sauvegarder les répertoires contenant les données que l’on ne veut surtout pas perdre. Mais il est aussi très important de sauvegarder les données stockées en bases de données.

Sous Linux il existe pléthore de logiciels spécialisés pour réaliser cela, mais nous allons voir ici comment le faire avec rsyncy

Sauvegarder le contenu des bases de données MySQL

Allez sur votre serveur et dans un shell bash tapez (remplacez MonMotDePasse et mabase respectivement par le mot de passe et le nom de la base de données MySQL à sauvegarder :

mysqldump --user='root' --password='MonMotDePasse' mabase > mabase.sql

Cette commande produit un fichier mabase.sql qui est auto-porteur, c’est à dire que si un jour vous avez à restaurer la base de données, il suffira d’exécuter ce fichier sql par la commande ci-dessous, lancée depuis l’utilitaire mysql connecté à votre base de données vide (mysql -u utilisateur -p mabase) :

source ./mabase.sql;

Vous pouvez mettre autant de commandes mysqldump que vous le souhaitez dans un shell script bash, et ainsi créer autant de fichier .sql de sauvegarde que nécessaire, dans un répertoire que nous allons sauvegarder sur une machine distante grâce à rsyncy.

Rsyncy va vous permettre de respecter la règle de base pour les sauvegardes, à savoir : la règle du 3-2-1-1-0 :

  • 3 copies de sauvegarde
  • 2 supports différents
  • 1 sauvegarde hors site
  • 1 copie hors ligne
  • 0 erreur testée à la restauration

Rsync et rsyncy

Continuer la lecture

Tutoriel Linux : comment auto-héberger sa messagerie instantanée

Avec des messageries instantanées comme Whatsapp, Telegram ou Signal, il est si facile de communiquer avec ses amis, de s’échanger des photos, des documents, voire de s’appeler au téléphone ou en vidéo, le tout bien sûr chiffré de bout en bout.

Le problème sous-jacent est que, dans ces applications, vos données ne vous appartiennent pas. Elles sont stockées quelque part dans le cloud, chez Meta ou autre, vous ne les maîtrisez pas. Elles peuvent disparaître demain, les récupérer peut devenir payant ou impossible demain, vous subirez.

Si le produit ment et qu’il n’est pas chiffré de bout en bout, vos conversations sont lues par d’autres.

Il est pourtant très simple d’auto-héberger sa messagerie instantanée.

La question que vous vous posez peut-être est : « ok, si j’auto-héberge ma messagerie instantanée, est-ce-que je pourrai communiquer avec mes amis sur Whatsapp ou Telegram ? »

En fait nous allons utiliser le protocole Matrix, qui a été créé justement parce que ses créateurs se demandaient pourquoi un utilisateur d’une messagerie instantanée A (Whatsapp par exemple) ne pouvait pas converser avec les utilisateurs d’une messagerie B (Signal par exemple).

Ils se sont dit que, dans un monde idéal, il y aurait un seul langage universel pour toutes les messageries, tout le monde pouvant ainsi converser avec tout le monde, et chacun pouvant choisir son logiciel favori compatible de ce langage universel.

Du coup ils ont codé ce langage universel et appelé ce protocole Matrix.

L’état français a adopté ce protocole pour son application de messagerie instantanée ministérielle Tchap.

A l’exception de Tchap (qui est du Matrix mais sur un réseau privé dédié), toutes les instances Matrix sont en réseau.

Cela signifie que, si nous installons un serveur Matrix sur notre serveur Linux, non seulement nous pourrons converser à la sauce Whatsapp entre utilisateurs de cette messagerie, mais nous pourrons aussi converser avec les utilisateurs de toutes les autres instances Matrix existant sur Internet.

Dans ce réseau global Matrix, chaque utilisateur est identifié par une adresse du type @utilisateur:serveur

Si nous montons un serveur Matrix sur notre serveur dont le nom de domaine est votre_domaine.duckdns.org par exemple, alors l’utilisateur toto aura comme adresse Matrix @toto:votre_domaine.duckdns.org

Continuer la lecture

Tutoriel Linux : Installer Mullvad VPN sous Devuan

Dans un marché des VPN saturé de promesses parfois difficiles à vérifier, Mullvad VPN se distingue par une approche radicalement différente : placer la confidentialité au-dessus de tout, sans compromis. Basé à Göteborg, en Suède, et opérant sous la juridiction suédoise, ce service s’est forgé une réputation d’intégrité et de transparence inégalée . Son credo est simple : garantir un anonymat maximal à ses utilisateurs, quitte à concevoir un service qui ne pourrait même pas espionner ses propres clients si on le lui ordonnait.

Un processus d’inscription véritablement anonyme

L’engagement de Mullvad envers la confidentialité commence dès l’inscription. Fini les formulaires réclamant une adresse email, un nom ou un numéro de téléphone. Chez Mullvad, chaque nouvel utilisateur se voit attribuer un numéro de compte à 16 chiffres, qui lui sert à la fois d’identifiant et de mot de passe . Ce système garantit qu’aucune donnée personnelle n’est associée à votre activité en ligne. Pour pousser l’anonymat jusqu’au bout, Mullvad propose des options de paiement tout aussi discrètes : en plus des cartes de crédit et des cryptomonnaies classiques, il est possible de payer en liquide ou en chèque .

Une politique « No-Log » prouvée par les faits

La politique de non-conservation des logs de Mullvad est considérée comme l’une des plus robustes du secteur. Elle est si stricte que la société affirme qu’elle ne pourrait pas faire la différence entre un seul utilisateur possédant des centaines de comptes et des centaines d’utilisateurs distincts . Cette promesse a été mise à l’épreuve en avril 2023, lorsque la police suédoise a débarqué dans les locaux de Mullvad avec un mandat de perquisition pour récupérer des données sur ses utilisateurs. Le résultat est éloquent : la police est repartie les mains vides, Mullvad ayant été en mesure de démontrer que les données demandées n’existaient tout simplement pas . La société s’est même engagée à « fermer le service » s’il était un jour légalement contraint d’espionner ses utilisateurs .

Des audits de sécurité indépendants comme gage de confiance

Continuer la lecture

Linux : Gnome moderne et véloce sur un vieux PC avec Devuan

Vous avez un vieux PC, qui tourne sous Ubuntu, et vous constatez que, version après version, Ubuntu est de plus en plus lent. Vous êtes pourtant contraint de migrer car la durée de vie des versions d’Ubuntu, même LTS, est finalement assez courte.

Au final, années après années, votre PC sous Ubuntu devient plus lent, limite presqu’inutilisable maintenant tellement c’est lent.

Le problème n’est pas l’interface Gnome, qui deviendrait de plus en plus gourmande en ressources au fil de ses versions, mais systemd.

Pour comprendre ce qu’est systemd, il faut revenir aux origines du monde Unix, basé sur la philosophie KISS (Keep It Simple, Stupid), c’est à dire basé sur des briques logicielles simples, ne faisant qu’une chose mais la faisant de manière excellente.

L’exemple type est la commande Unix « sort« , qui permet de trier ce qu’on lui donne en entrée. Quel que soit votre talent, si vous programmez vous-même une fonction de tri, elle sera assurément moins performante que le programme sort. Pour une bonne et simple raison : il y a des gens dans le monde qui font des thèses de doctorat sur les algorithmes de tri, et les algorithmes les plus avancés dans la recherche sont implémentés dans la commande sort. Vous ne pourrez pas lutter avec l’un de vos programmes. C’est un exemple typique du KISS : la commande est simple, ne sait faire qu’une chose, mais le fait vraiment très très bien.

Conformément à la philosophie KISS, les systèmes Unix, dont Linux, démarrent traditionnellement en bootant le noyau, qui finit par donner la main à un programme d’initialisation dont le processus est lancé en ayant le PID 1. Ce programme a pour tâche de lancer tous les autres processus de sorte que le système entier soit opérationnel. Ce programme d’initialisation traditionnel est init, et provient de son ancêtre init system V.

Tout comme sort, init est léger, ne sait faire qu’une chose mais le fait très bien : lancer tout le système.

Tout allait bien jusqu’à ce qu’en 2010, un ayatollah de chez Red Hat, Lennart Poettering, change la donne en décrétant qu’init n’était plus assez bien, qu’il fallait l’abandonner au profit de son bébé systemd, qui ne respecte plus le principe KISS. En effet, systemd permet d’initialiser comme init, mais il donne également un cadre global pour créer des services (les services existent aussi sous System V, mais assurés par un autre programme qu’init).

Continuer la lecture

Linux : run0 ou la fin programmée de sudo ?

Pendant des décennies, la commande sudo a été la clé de voûte de l’administration des systèmes Unix et Linux, un passage obligé pour les administrateurs souhaitant effectuer des opérations privilégiées. Cependant, un vent de changement souffle sur l’écosystème Linux. Des annonces récentes et des décisions majeures de la part de distributions influentes comme Fedora et Ubuntu laissent entrevoir la disparition programmée de sudo au profit de nouvelles alternatives plus modernes et sécurisées. Le leader de cette révolution n’est autre que run0, un outil intégré à systemd qui promet de redéfinir notre rapport aux privilèges système.

Le talon d’Achille de sudo: une question de conception

Pour comprendre ce changement, il faut revenir sur la faille fondamentale de sudo. Depuis sa création dans les années 1980, cette commande repose sur un mécanisme ancien et risqué : le bit setuid.

Le problème est que sudo est un binaire appartenant à root avec le bit setuid activé (rws). Cela signifie qu’un utilisateur standard, en exécutant sudo, voit le processus s’exécuter avec les droits de root. Si le binaire présente des défauts, un attaquant peut injecter une exploitation qui sera alors exécutée avec les droits root.

La surface d’attaque de sudo est également pointée du doigt. Avec plus de 100 000 lignes de code (presque 150 000 lignes, ce qui peut étonner car basiquement sudo effectue un fork+exec, fonctionnalité qui peut s’écrire en moins de 100 lignes de code en langage C), la marge d’erreur est considérable. Cet héritage des débuts d’Unix est aujourd’hui perçu par de nombreux experts comme une anomalie : « SUID est un concept très étrange. Dans mon monde idéal, nous aurions un système d’exploitation qui n’utilise pas du tout SUID ».

run0: la réponse de systemd

Continuer la lecture