Linux

[Astuce] Monter une image disque VirtualBox sous Linux

0

Introduction

J’ai besoin de transférer des fichiers lourds (quelques Gio) depuis le disque dur virtuel d’une machine VirtualBox vers la machine hôte. La machine virtuelle est sous Windows, mais les additions invités ne fonctionnent pas, et je ne désire pas modifier la configuration réseau pour mêler mon réseau local à celui de la machine virtuelle. Pour pouvoir transférer mes fichiers, je vais donc devoir monter l’image disque de ma machine virtuelle.

Émuler un périphérique bloc

Sous Linux, une manière de créer des périphériques blocs dynamiquement est de recourir au module noyau nbd. NBD est un protocole similaire à iSCSI, qui permet de créer des périphériques blocs à partir d’un serveur. On charge le module nbd avec la commande suivante :

sudo modprobe nbd max_part=8

Vous devriez voir apparaître plusieurs entrées nbd0, nbd1, etc. dans le répertoire/dev.

On cherche à faire de notre image disque VirtualBox un périphérique bloc, et pour ce faire, nous allons utiliser le serveur NBD qemu-nbd (sur certaines distributions, il est contenu dans un paquet qemu-utils). On le lance ainsi :

sudo qemu-nbd --connect=/dev/nbd0 monimagedisque.vdi

Si vous inspectez encore une fois le répertoire /dev, de nouvelles entrées sont arrivées pour représenter les différentes partitions contenues dans l’image disque, sous la forme nbd0p0, nbd0p1, etc.

Monter les partitions

Dans mon cas l’image contient deux partitions (la première contient le bootloader, la seconde l’OS et mes données), et je ne vais monter que la seconde (nbd0p1). On commence par créer un dossier dans lequel sera monté la partition :

sudo mkdir /mnt/vbpart1

Ensuite on peut monter la partition avec la commande mount :

sudo mount /dev/nbd0p1 /mnt/vbpart1

Si la commande mount s’exécute correctement, vous devriez pouvoir accéder aux fichiers de la partition dans le point de montage que vous avez configuré.

Démonter les partitions et arrêter le serveur nbd

La procédure à suivre se déroule en deux étapes. D’abord on démonte la ou les partitions montées :

sudo umount /dev/nbd0p1

Une fois toutes les partitions démontées du périphérique nbd0, on peut procéder à l’extinction du serveur NBD :

sudo qemu-nbd -d /dev/nbd0

[Sans contact] Un lecteur/encodeur RFID pour moins de 10€

0

J’avais besoin d’un lecteur/encodeur RFID pour un projet personnel, alors je me suis renseigné sur internet, et j’ai vu beaucoup de recommandations pour le lecteur/encodeur ACR122U, qu’on trouve un peu partout (eBay, Amazon, etc.) pour une trentaire d’euros. Je trouvais cela cher pour un dispositif RFID, j’ai donc cherché une solution alternative plus économique.

La solution trouvée consiste à associer un module RFID destiné à des projets électroniques à base d’Arduino à un adaptateur USB-UART.

Module NFC

Il faut acheter un module NFC basé sur la puce PN532 mais attention, toutes les cartes ne sont pas identiques ! En effet, la puce PN532 peut être exploitée par 3 interfaces (I²C, SPI, UART), et en fonction du choix du fabricant, il est parfois uniquement possible d’utiliser une des trois interfaces. Pour ma part, j’ai le module ElecHouse rouge :

Il dispose de deux interrupteurs pour sélectionner le mode d’interface à utiliser (appelé HSU sur le module : High Speed UART). On le trouve pour environ 5€ en provenance de la Chine.

Adaptateur USB-UART

Votre ordinateur étant peu probablement doté d’une interface UART accessible (sauf si vous utilisez un ordinateur embarqué, type Raspberry Pi), il nous faudra une interface USB-UART. On en trouve pour quelques euros sur internet. J’utilise pour ma part un adaptateur basé sur la puce FT232R :

Connection électrique entre adaptateur USB-UART et carte NFC

À l’aide d’un cable mâle-mâle, il faut effectuer les connexions suivantes :

  • VCC UART -> VCC NFC
  • GND UART -> GND NFC
  • TX UART -> RX NFC
  • RX UART -> TX NFC

Si votre adaptateur est doté d’un cavalier permettant la sélection de la tension VCC, mettez-le en position 3V3. Sinon assurez-vous que votre adaptateur avec des niveaux de tension 0-3V3.

Configuration pour l’utilisation avec libnfc

Sur Linux, la majorité des outils permettant de travailler sur le NFC sont écrits avec la bibliothèque libnfc (installée par défaut sur Kali Linux, disponible dans les dépôts Fedora). Pour pouvoir utiliser notre lecteur/encodeur avec libnfc, il va falloir créer un fichier de configuration.

On va d’abord avoir besoin de connaître le nom du fichier de l’adaptateur USB-UART. En ayant l’adaptateur débranché, listez les périphériques série sur votre système avec la commande :

ls /dev/tty*

Branchez l’adaptateur et répétez l’opération. La nouvelle entrée correspond à celle de votre adaptateur (par exemple dans mon cas /dev/ttyUS3).

Dans le dossier /etc/nfc/devices.d/, créez un fichier monrfid.conf (le nom du fichier importe peu, l’extension par contre oui), en prenant soin de remplacer le chemin du fichier de votre adaptateur USB-UART :

name = "Mon adaptateur RFID maison"
connstring = "pn532_uart:/dev/ttyUSB3"

Votre lecteur/encodeur NFC est prêt à être utilisé !

[Mémo] Démarrer des instances OpenVPN avec systemd

0

Remarque préliminaire : cet article traite du démarrage d’instances d’OpenVPN sur un système Linux, ici une Debian Stretch, avec systemd. Il ne traite pas de la manière dont on configure une instance OpenVPN (paramètres et clés).

Avec SysV, un démon maître était lancé et chaque instance à démarrer automatiquement se faisait par configuration dans le fichier « /etc/default/openvpn » (du moins sur les Debian-like).

systemd est conçu pour gérer nativement ces problématiques de multi-instances, alors autant en profiter.

Contexte

Supposons que votre ordinateur portable nécessite d’être raccordé à trois infrastructures distantes via VPN, dont une de manière permanente. Imaginez que vous êtes un prestataire qui prend le contrôle à distance chez ses clients, tout en gardant en permanence un lien vers son serveur NAS à la maison,

On a donc 3 configurations différentes que nous appellerons « maison », « client-a » et « client-b ». Ces trois configurations et tous les fichiers nécessaires (notamment les clés) se placent dans leurs dossiers respectifs. Ce qui donne :

$ ls /etc/openvpn
client   client-a   client-b   maison   server

Cela dit, on remarque la présence de deux dossiers supplémentaires appelés « client » et « server ». Ils sont liés au fonctionnement prédéfini par les gabarits d’unités systemd pour OpenVPN 2.4.

Mise en œuvre

Pour chaque dossier créé, on trouve un certain nombre d’éléments, dont le fichier de configuration. Voici un exemple :

$ ls /etc/openvpn/maison
maison.conf   shared.key

Remarque : on pourrait tout bourrer comme des sagoins dans le dossier « client », mais je ne trouve pas ça très propre et très maintenable si les tunnels se multiplient.

Cependant, c’est bien le dossier « client » qui va faire foi dans un premier temps, vu la manière dont le gabarit est construit. Un simple lien symbolique suffit :

# ln -s /etc/openvpn/maison/maison.conf /etc/openvpn/client/maison.conf

Le gabarit n’est pas amorçable directement, il faut nommer explicitement une instance. Ici le fichier s’appelle « maison.conf ». Inscrire l’instance « maison » (qui ira bien chercher « maison.conf » dans le dossier « client ») est enfantin :

# systemctl enable openvpn-client@maison
Created symlink /etc/systemd/system/multi-user.target.wants/openvpn-client@maison.service → /lib/systemd/system/openvpn-server@.service.

Désormais, le VPN vers la maison se lance automatiquement au démarrage du système !

Et pour lancer les autres instances, pas besoin de les inscrire, systemd se débrouille à partir du nom indiqué pour retrouver ses petits.

# systemctl start openvpn-client@client-a

Remarques

Le paquet OpenVPN exploite donc désormais les services systemd, et non plus les scripts de type UNIX System V. Pour bien décortiquer l’affaire, il faut donc comprendre le fonctionnement des « unités » systemd. La petite bête réside dans ce paragraphe (en langue de Shakespeare) :

Optionally, units may be instantiated from a template file at runtime. This allows creation of multiple units from a single configuration file. If systemd looks for a unit configuration file, it will first search for the literal unit name in the file system. If that yields no success and the unit name contains an « @ » character, systemd will look for a unit template that shares the same name but with the instance string (i.e. the part between the « @ » character and the suffix) removed. Example: if a service getty@tty3.service is requested and no file by that name is found, systemd will look for getty@.service and instantiate a service from that configuration file if it is found.

Soit en gros : il détecte la présence d’un arobase, donc il suppose une instanciation. Il extrait le nom de l’instance entre le ‘@’ et le ‘.’, et lance le gabarit (reconnaissable au ‘@.service’) avec en paramètre le nom de l’instance.

Le paquet lui-même installe ces fichiers :

# ls -l /lib/systemd/system/openvpn*
-rw-r--r-- 1 root root 707 juil. 18 22:15 /lib/systemd/system/openvpn-client@.service
-rw-r--r-- 1 root root 780 juil. 18 22:15 /lib/systemd/system/openvpn-server@.service
-rw-r--r-- 1 root root 320 juil. 18 22:15 /lib/systemd/system/openvpn.service
-rw-r--r-- 1 root root 894 juil. 18 22:15 /lib/systemd/system/openvpn@.service

Dans le fichier « openvpn-client@.service », on trouve ces directives (parmi d’autres) :

WorkingDirectory=/etc/openvpn/client
[...]
ExecStart=/usr/sbin/openvpn --suppress-timestamps --nobind --config %i.conf

Et voilà grosso modo comment systemd s’y retrouve pour lancer des instances différentes à partir d’un même fichier. Même principe pour le gabarit « openvpn-server ».

Et les deux derniers ? Ce sont les versions pour OpenVPN 2.3, que je recommande d’abandonner si vous le pouvez. Ces instances cherchent leur configuration dans le dossier « /etc/openvpn » et sont lancées de manière significativement différentes. Si vous n’êtes pas un expert OpenVPN, ou ne recherchant pas explicitement ces détails de lancement, vous pouvez les abandonner sans regret. Sachez qu’un OpenVPN 2.4 peut parfaitement discuter avec un OpenVPN 2.3 moyennant de les laisser s’entendre sur les algorithmes et certains paramètres nouvellement introduits : c’est testé et approuvé !

systemd, faut en manger ! C’est bon ! (Mais des fois ça croque un peu sous la dent…)

[Debian] Basculer la mise en réseau de System V à systemd

1

Depuis Debian Jessie (8.X), systemd se fait de plus en plus présent dans la distribution, et permet d’effectuer une migration en douceur au fil des versions. Parmi celles à noter, je voudrais vous faire découvrir la partie mise en réseau élémentaire.

L’objectif est de remplacer la gestion classique avec l’ensemble ifupdown et le client DHCP de l’ISC. On pourra même supprimer les paquets à la fin de la migration. Pour corser les choses, je vais appliquer ce cas d’usage à un VPS 2016 chez OVH, dont la gestion manuelle révèle quelques surprises.

Testez vos configurations dans une machine virtuelle ! Ça vous évitera des surprises en production. Et lisez cet article en entier avant de vous lancer : systemd est super, mais aussi super chiant parfois…

Configurer systemd

La configuration des éléments réseau de systemd se fait dans le dossier /etc/systemd/network. Pour ce qui nous concerne, on va créer un fichier avec en préfixe un nombre quelconque, par exemple « 30 » puis un nom représentatif pour vous, je prendrai « wired » pour mes liens filaires, et l’extension « .network ». Dans cet exemple, ca me donne donc « 30-wired.network ».

(suite…)

[Mémo] Chiffrer un disque dur externe sous Linux

1

Afin de ne plus chercher partout « comment je m’y étais pris la dernière fois » pour fabriquer mon disque dur externe chiffré, je me suis fait un petit mémo. L’objectif est donc d’utiliser LUKS, et quelques lignes de commande.

J’avais un disque dur SATA de 500 Go, récupéré dans une de mes anciennes machines, que je voulais transformer en disque de sauvegarde. J’ai donc utilisé un dock USB, puis branché sur une machine Linux.

Toutes les commandes se font en root ou bien préfixées par sudo. Moi je suis plutôt root sur mes machines, surtout quand j’enchaîne les commandes à privilèges (quitte à faire un sudo /bin/bash…) Mais c’est un vieux troll poilu une autre histoire…

Première étape : le repartitionnement

Fdisk est votre ami.

Fdisk vous affiche les partitions d’un disque donné :

# fdisk -l /dev/sdb

Mais fdisk est avant-tout interactif. Voici ce que ça donne :

# fdisk /dev/sdb

Avec o (lettre o minuscule) : je crée une table des partitions vide, donc je vide en une fois toutes les partitions existantes.

Avec n : je crée une partition. En laissant les valeurs par défaut, la partition occupera l’espace maximal disponible. (suite…)

[Découverte] Monter des images DMG sous Linux avec darling-dmg

0

Si vous êtes un ancien utilisateur de Macintosh, il y a de fortes chances que vous ayez quelques images au format DMG qui traînent quelque part, sur un vieux disque dur ou sur des CD.

Jusqu’ici, la seule méthode pour monter une image disque DMG consistait à convertir l’image DMG en ISO (avec dmg2iso), puis monter la partition HFS+ de l’image ISO (avec le module noyau hfsplus). C’est un processus fastidieux et qui nécessite les privilèges root, mais qui a le mérite d’exister ; si vous êtes curieux, je vous invite à lire cette question sur Ask Ubuntu.

J’ai découvert récemment l’utilitaire darling-dmg qui permet de monter des images DMG très simplement sous Linux. darling-dmg se présente sous la forme d’un pilote FUSE (Filesystem in UserSpacE, système de fichier en espace utilisateur) : plutôt que de créer un module noyau pour implémenter le système de fichier, un pilote FUSE est un programme qui est exécuté par l’utilisateur. Cela ouvre la porte à des systèmes de fichiers farfelus, comme par exemple GmailFS qui permettait d’utiliser sa boîte Gmail comme un espace de stockage, mais cela permet aussi de limiter les kernel panics quand le pilote plante, ce qui arrive parfois avec le module hfsplus…

darling-dmg est un sous-projet du projet Darling. Ce projet à pour vocation de permettre aux linuxiens de faire tourner des applications compilées pour Mac OS X, un peu à la manière de Wine. (suite…)

[Client léger] Exemple de mise en route de ThinStation

0

Introduction

En début d’année, nous nous étions posés la question de recycler un poste Asus EeeBox en un client léger qui soit à la fois capable de gérer du RDP et du 5250. Après quelques recherches, nous avons découvert que ThinStation pouvait répondre à ce besoin. Nous n’avons jamais exploité cette solution mais voici un aperçu rapide d’une mise en route basique.

Matériel utilisé

  • Clé USB
  • Un Asus EeeBox B202
  • Connexion Internet
  • Environ 1 heure

Création de l’environnement de préparation de l’ISO

On commence par télécharger la dernière version de ThinStation, ainsi que l’utilitaire Rufus, qui permettra de créer une clef USB bootable.

C’est à partir de cette clef USB que l’on va faire démarrer la machine à utiliser pour la préparation de l’ISO finale. (suite…)

[Tutoriel] Émuler Mac OS 9 sous Linux et macOS avec QEMU

0

Bien que Mac OS 9 soit officiellement mort il y a plus d’une quinzaine d’années, il est parfois utile d’avoir une machine virtuelle à disposition pour -par exemple- récupérer des données provenant d’un vieux Mac. Pendant longtemps, SheepShaver a été l’émulateur de choix pour avoir une machine virtuelle sous Mac OS 9. Malheureusement, il est un peu bogué, et en raison de choix techniques douteux pour l’adressage mémoire, on est obligé de bidouiller sérieusement la configuration du système d’exploitation hôte (malheureusement sans garantie de résultat).

J’ai découvert récemment que QEMU, un logiciel qui permet d’émuler des systèmes informatiques, permet depuis quelques années d’émuler un Macintosh PowerPC. Cet article montre comment on peut mettre en place en moins d’une dizaine de minutes une machine virtuelle Mac OS 9 avec QEMU. (suite…)

[Tutoriel] Installation de Passbolt sur Debian Stretch

3

Introduction

Passbolt est un gestionnaire de mots de passe à vocation collaborative. Il est composé d’un serveur centralisant les mots de passe sous forme chiffrée et d’extensions pour navigateurs Web. Son installation n’est pas tout à fait triviale et nécessite un article dédié. Je vous conseille de lire l’article une fois jusqu’au bout avant de vous lancer dans l’installation du produit.

Cette article n’aurait pas de raison d’être si, d’une part il n’était pas écrit en français alors que la grande majorité de la littérature sur Passbolt est en anglais, et si d’autre part, je n’avais pas eu envie de sortir des sentiers battus par les tutoriels d’installation, outre le fait d’être tombé sur des petits bogues ou des raccourcis documentaires engendrant des problèmes.

Fonctionnalités

Passbolt permet de générer, stocker et partager des mots de passe, le tout sous forme chiffrée. Plus techniquement, il s’appuie sur GnuPG et OpenPGP pour effectuer le chiffrement et le partage des clés.

D’une certaine manière, il n’y a pas de « coffre-fort » dédié par utilisateur. Toutes les clés sont stockées au même endroit. En revanche, n’importe qui ne peut pas lire n’importe quelle clé : il faut qu’il soit inscrit sur chaque clé pour pouvoir la déchiffrer. Soit dit autrement : il existe autant de coffres-fort que de clés. Les utilisateurs admis dans ces coffres possèdent l’un des trois niveaux de privilèges suivant : Peut lire, Peut mettre à jour, Est propriétaire.

Le premier, comme son nom l’indique, ne peut que consulter le mot de passe et ses métadonnées, le second peut modifier le mot de passe stocké, tandis que le propriétaire peut partager ou révoquer le partage du mot de passe.

Enfin, il est possible d’accéder à Passbolt en ligne de commandes, mais ce moyen n’est pas décrit de manière détaillée dans cet article. Globalement, on y trouve des actions d’administration, rien de plus, vous en verrez quelques-unes plus loin.

(suite…)

[Astuces] Connexion automatique en SSH avec PuTTY

0

Lorsque vous gérez un parc important de serveurs, il peut devenir vite fastidieux de retenir tous les identifiants et mots de passe, voire même de les saisir plusieurs fois par jour, des fois même par heure. Dans mon cas, c’est principalement l’administration de machines Linux avec PuTTY qui nécessitait un coup de main.

Objectif : se connecter en quelques clics à un serveur Linux en SSH à l’aide de clés depuis une machine Windows.

Remarque : la configuration du serveur SSH n’est pas dans le périmètre de cet article. Une brève recherche sur n’importe quel moteur du Web vous retournera une surabondance de littérature à ce sujet. On partira donc du principe que votre serveur SSH est configuré et fonctionnel. De même, la gestion de l’authentification par clé publique et les manipulations à effectuer côté serveur ne sont pas détaillées.

Génération d’une paire de clés

La suite logicielle PuTTY propose l’outil PuTTY Key Generator, que vous trouverez en tant que PuTTYgen dans le menu Démarrer. Il est très simple à utiliser.

Génération d’une paire de clés avec PuTTY Key Generator

Au lancement, le logiciel ne contient aucune clé. Un clic sur Generate, comme son nom l’indique, vous permettra de générer une clé. L’aléa de génération est pris à l’aide des mouvements de votre souris dans une zone vide située sous la barre de progression. Vous la verrez avancer à chaque déplacement de votre pointeur.

Dès la génération terminée, des éléments supplémentaires apparaissent, dont les champs de mot de passe permettant de protéger la clé privée. Laissez ces champs vides pour la suite de l’article. (suite…)

Go to Top