Category Archives: Linux

Les articles sur les systèmes libre

Howto : Windows password recovery

Salut tout le monde, fait un bail que je n’ai plus rien publié donc voici un petit howto sur comment reprendre la main d’une machine windows xp/vista/seven quand on a perdu ses credentials.

Le howto est disponible sur Scribd : http://www.scribd.com/doc/55294877/chntpw

Et en téléchargement ici : chntpw

Je vais également publier courant de semaine prochaine 1 article et deux classes. Lesw deux classes : une première pour gérer les mmi (dans le but de lecture media), une second encapsulant de l’interop win32 permettant de manipuler l’écran et ses résolutions. L’ article : dev windows phone 7 ^^

A très bientôt

Migration de Debian 5 (Lenny) a Debian 6 (Squeeze)

Salut à tous, comme beaucoup, j’attends depuis longtemps la sortie de Debian 6 Squeeze et ça y est, la nouvelle mouture de Debian , nom de Code Squeeze (en rapport aux petits extra-terrestre vert de Toy Story) est disponible depuis peu.

Debian 6 introduit un système de boot « dependency based » (amorçage par dépendances) rendant le démarrage plus fiable et rapide grâce à l’exécution parallèle des scripts de démarrage. La prise en charge de LDAP a également été rajoutée mais également la configuration unifiée des claviers et la gestion des KMS.  Pour la liste complète veuillez-vous référer au site officiel de la distribution Debian. La migration de Debian 6 se fera avec l’outil de management de package apt.

Attention, il est plus que recommandé de faire un backup du système avant la migration ! De plus préparez-vous si vous a redémarrer votre machine (cette précision est importante pour les gens en environnement serveur)
Si vous rencontrez des problèmes lors de la migration, vous pouvez vous rendre sur le site de Debian.

Commençons maintenant la migration.
La première chose à faire est d’éditer /etc/apt/sources.list et remplacer « Lenny » par « squeeze ».

On met ensuite a jours la liste des package

apt-get update

Nous allons tout d’abord vérifier que l’espace disque est suffisant avec la commande suivant :

apt-get -o APT::Get::Trivial-Only=true dist-upgrade

Ensuite on passe a la mise a jours minimale des package :

apt-get upgrade

Les paquets a jours il nous faut mettre a jours notre kernel et udev. Pour récupérer la variante de votre noyau tapé la commande suivante :

dpkg -l “linux-image*” | grep ^ii

Ensuite installez le paquet linux image associé :

apt-get install linux-image-2.6-<variante>

Dans mon cas cela donne :

apt-get install linux-image-2.6-686

Et enfin udev :

apt-get install udev

Maintenant que les paquets, le kernel et udev sont à jours on redémarre la machine. (Nécessaire)

Le système redémarré nous pouvons faire la mise a jours complète du système. Cette commande installera les versions les plus récente de tous les packages, résoudra les problèmes de dépendances, installera des package supplémentaires si nécessaire et supprimera les paquets obsolètes et/ou conflictuels.

apt-get dist-upgrade

Par exemple durant l’upgrade, Bash pourra être remplacé par Dash (version plus light de Bash mais avec quelques fonctionnalités en moins) et Grub sera migré en Grub 2 ainsi que l’installation du système de chargement par dépendances.

Voila, si tout s’est bien passé vous avez maintenant votre système mis a jours avec Debian 6. Chez mois cette update n’a pris que 45 min +/-.

Si vous rencontrez des problèmes, le site de Debian fournit une documentation complète sur la migration du système.

Inform@tiquement
Istace Emmanuel

Howto : OTP pour SSH sous Debian GNU/Linux

Qu’est-ce que OTP ?

OTP signifie « One Time Password » ou Mot de passe a Usage Unique. C’est un mot de passe valable pour une seul session.

Pourquoi OTP ?

Le principal avantage de cette méthode est qu’elle ne permet pas de mettre en place de attaques par  rejeux. C’est-à-dire que si quelqu’un enregistre le traffic entre le client et le serveur puis rejoue ce traffic dans le but de s’authentifier, ce dernier ne pourra pas le pass n’etant valide que pour une session qui a déjà été consommé vu qu’il a pu l’enregistrer. OTP tire parti de nombres aléatoires afin de ne pas pouvoir prédire les OTP. (A l’inverse des Sequence Number sous NT4 par exemple).

Comment fonctionne OTP ?

Il y a 3 approches principales :

  • OTP basé sur la synchronisation entre le serveur et le client (valide pour une seule periode de temp).
  • La génération mathématique du password selon le précédent password.
  • L’utilisation de challenge et d’algorithmes mathématique et/ou un compteur.

Il y a plusieurs manières de faire parvenir au client le prochain OTP, avec des token electronique, un client web, d’autre avec un daemon qui tourne sur le mobile du client ou enfin, la plus simple, les OTP sont ecris sur une feuille emporté avec la machine. (La plus connue, mais la plus risqué !! )

Installation

Voici les paquets à installer pour faire fonctionner l’OTP sur Debian.

apt-get install libpam-opie opie-server opie-client

Configuration

Configuration OTP

Il est fortement recommandé de générer les OTP et les challenges en local sur la machine. En effet, si au moment de la création, via ssh par exemple, de vos OTP un hacker sniff votre communication,  il récupère alors les OTP, malgré le SSL dessus qui peut être Spoofé.

Nous allons maintenant générer un challenge OTP associé à votre compte avec un password.

debian:~# opiepasswd –c root
Updating root:
Using MD5 to compute reponses.
Enter new secret pass phrase : passwordopie
Again new secret pass phrase : passwordopie

ID root OTP key is 499 de8236
SLOB HOLM NARY MARE BOLO TORN
debian:~#

J’ai ici créé mon challenge pour me connecter. Mon password opie est « passwordopie » et mon password système est « password ». On vas ensuite généré 50  OTP pour root.

debian:~# opiekey -n 50 499 de8236
Using the MD5 algorithm to compute response.
Enter secret pass phrase : passwordopie
490 … ICI la liste des OTP
debian:~#

Nous avons maintenant créé nos OTP. Il ne nous reste plus qu’a intégré cela avec pam dans l’authentification SSH.

Configuration SSH

Pour permettre a ssh d’employer des OTP il faut modifier le fichier /etc/pam.d/sshd. On doit rajouter la ligne : auth sufficient pam_opie.so

Voici a quoi ressemble le mien :

debian:~# cat /etc/pam.d/sshd
# PAM configuration for the Secure Shell service
auth     sufficient pam_opie.so
auth     required    pam_unix.so
auth     required    pam_deny.so
session  required    pam_limits.so                # Limits
session  optional    pam_motd.so                  # MOTD
session  optional    pam_mail.so standard noenv   # MAILBOX
debian:~#

Se connecter

Un fois cela fait, redémarrez ssh et tentez de vous loguer en SSH.

login as: root
Password: password #celui du système
otp-md5 497 de8236 ext, Response: NIBS COME JILL BEAU ED MOB
Welcome Home Manu ^^
Last login: Fri Jan  7 00:12:11 2011 from 192.168.0.103
debian:~#

OTP Generator

Coté client j’utilise une petite applet java OTPGenerator qui est un s/Key Generator en Java et respecte le RFC 2289. Il dérive du projet JOTP de Harry Mantakos et reprend certaines de ses sources. Un lien vers le logiciel est fourni a la fin du howto. L’applet se trouve dans bin.

Dans password je renseigne passwordopie, le password donné lors de la création du challenge. Ensuite je renseigne la Sequence et le challenge que j’ai pour me connecter. Le hash doit être en MD5 (par defaut, le MD5 est utilisé). En fois cliqué sur calculé nous obtenons la clef a renseigné au serveur. Ici : NIBS COME JILL BEAU ED MOB

jsOTP(404)

jsOTP est un projet sous licence BSD de Jeremy Lin se composant de librairies javascript permettant de calculer ses Token en MD5, MD4, sha-1, ripemd-160 et de les traiter par lots.
Voici une implémentation que j’ai réalisé qui correspond a notre besoin en MD5 avec un format 6 mots. http://manu404.dyndns-home.com/jsotp404/

Il fonctionne en JavaScript avec JqueryUI. Une archive est disponible dans les ressources.

Référence

Logiciels

Documents

Liens

License

Copyright (c) 2011 Istace Emmanuel.
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant sections, with Front-Cover Texts : “Howto : OTP pour SSH sous Debian GNU/Linux, and no Back-Cover Texts.  A copy of the license is included in the section entitled “GNU Free Documentation License”.

Copyright (c) 2011 Istace Emmanuel.
Permission vous est donnée de copier, distribuer et/ou modifier ce document selon les termes de la Licence GNU Free Documentation License, Version 1.2 ou ultérieure publiée par la Free Software Foundation ; avec aucune section altérable, Avec le texte de première page de couverture suivant : « Howto : OTP pour SSH sous Debian GNU/Linux », sans texte de dernière page de couverture. Une copie de cette Licence est incluse dans la section appelée « GNU Free Documentation License » de ce document.

Howto RAID sous Debian GNU/Linux

Voici un howto sur comment utiliser dur RAID5 avec mdadm sous Debian GNU Linux. Une version PDF est disponible.

Introduction

A Propos

Ce Howto a été écrit dans le but monter un serveur avec l’utilisation de RAID sous un système Debian  Lenny 5.0 GNU/Linux. Ce document est sous licence FDL v1.2. Ce Howto s’intègre dans une série de howto destiné a créé un RAID avec LVM et Quota.

Licence

Copyright (c) 2011 Istace Emmanuel.
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant sections, with Front-Cover Texts : “Howto RAID LVM & Quota sous Linux”, and no Back-Cover Texts.  A copy of the license is included in the section entitled “GNU Free Documentation License”.

Copyright (c) 2011 Istace Emmanuel.
Permission vous est donnée de copier, distribuer et/ou modifier ce document selon les termes de la Licence GNU Free Documentation License, Version 1.2 ou ultérieure publiée par la Free Software Foundation ; avec aucune section altérable, Avec le texte de première page de couverture suivant : « Howto RAID LVM & Quota sous Linux », sans texte de dernière page de couverture. Une copie de cette Licence est incluse dans la section appelée « GNU Free Documentation License » de ce document.

Théorie

Un RAID est un ensemble de technique mise en œuvre sur plusieurs disques durs pour augmenter les performances, la sécurité ou la fault tolerance. Il y a 3 principaux types de RAID, le RAID 0, 1, 10 et 5.

RAID 0

Le RAID 0, aussi appelé striping consiste a répartir les données sur deux disque dur comme le montre le shema ci-dessous. Le premier bloc est sur sda et le second sur sdb. Sa capacité est egale a la taille du plus petit disque du RAID multiplié par le nombre de disque. Par exemple 1disque de 300Go et deux disque de 250Go en RAID 0 donnent une capacité totale de 750 Go (250 * 3). Malheureusement avec ce type de RAID il n’y a aucune redondance et donc, la perte d’un des disque provoque une perte de donnée.

RAID 1

Le RAID 1 ou mirroring consiste a utiliser n disque redondant (au minimum 2) et e copier sur chacun les mêmes données. Sa capacité est egale a celle du plus petit disque dur du RAID, au niveau de lka fiabilité par contre, le gain est évident. Elle accepte une déffaillance de n-1 disques. Ainsi, si nous mettons 4 disque de 200Go, nous aurons 200Go d’espace disponible et on pourra perdre 3 disque dur dans le RAID avant de perdre des données. Malheurement les couts sont proportionnelle au nombre de mirror alors que la capacité reste identique.

RAID 10 (ou RAID 1 + 0)

Ce type de RAID est un raid composé. Il consiste a créé un RAID 0 avec deux RAID 1. On a donc du striping de mirror. Il faut au minimum 4 disque pour créé un RAID 10. Sa capcité est egale a la taille du plus petit RAID1 multiplié par le nombre de RAID 1 dans le RAID0. Ainsi si je créé 2 RAID 1 composé de 2 disque de 200Go j’ai : 200Go * 2 = 400Go.

RAID 5

Le RAID5 se base sur le stripping et une parité. Chaque bande est donc constituée de N blocs de données et d’un bloc de parité. Ainsi, en cas de défaillance de l’un des disques de la grappe, pour chaque bande il manquera soit un bloc de données soit le bloc de parité. Si c’est le bloc de parité, ce n’est pas grave, car aucune donnée ne manque. Si c’est un bloc de données, on peut calculer son contenu à partir des N − 1 autres blocs de données et du bloc de parité. L’intégrité des données de chaque bande est préservée. Donc non seulement la grappe est toujours en état de fonctionner, mais il est de plus possible de reconstruire le disque une fois échangé à partir des données et des informations de parité contenues sur les autres disques. Le RAID5 utilise des Spare disque, disque qui sont mis en spool et monté puis reconstruit en cas de défaillance d’un des disque. Sa capacité est égale a la somme de la capacité des N – 1 disque. 3 disque de 200 Go en RAID5 fournissent donc 400 Go d’espace utile.

Mise en place sous Debian GNU Linux

L’outil mdadm

Cet outil sera utilisé pour créer et administrer notre RAID. S’il n’est pas présent sur votre système, installez le paquet.

root:~# apt-cache search mdadm
mdadm – tool to administer Linux MD arrays (software RAID)
root:~#

Son fichier de configuration se trouve dans /etc/mdadm/mdadm.conf sous Debian. Il est nécéssaire de formater les disque au type 0xFD (Linux RAID autodetect).

RAID 0

On va ici créer un RAID0, donc du striping. On aura donc un partie des données sur chacun des disques. Si vous utilisez une virtual machine mais en savez pas comment ajouter un disque dur, reportez-vous aux Annexes de ce HowTo pour VmWare Workstation et Oracle VirtualBox
Voici comment ce que l’on va faire :

On a donc deux partitions, sda et sdb que l’on montera en RAID 0.

root:~# mdadm –-create /dev/md0 –-level=raid0 –-raid-devices=2 /dev/sda /dev/sdb

–create /dev/md0     Création d’un RAID représenté par /dev/md0
–level=raid0         Type de raid a créé, ici raid0
–raid-devices=2      Nombre de disque dans le RAID
/dev/sda /dev/sdb     Devices du RAID

On peut maintenant créé notre filesystème sur le RAID

root:~# mkfs –t ext3 /dev/md0
root:~# mkdir /mnt/raid0
root:~# mount –t ext3 /dev/md0 /mnt/raid0

RAID 1

Passons au RAID 1, ici les données sont dupliquées sur chaque disque du RAID

Le principe est le même que en RAID0 mais avec un partition de secoure en plus et le level en raid1 et non raid0.

root:~# mdadm –-create /dev/md0 –-level=raid1 –-raid-devices=2 /dev/sda /dev/sdb -–spare-devices=1 /dev/sdd

–create /dev/md0     Création d’un RAID représenté par /dev/md0
–level=raid0         Type de raid a créé, ici raid0
–raid-devices=2      Nombre de disque dans le RAID
/dev/sda /dev/sdb     Devices du RAID
–spare-devices=1      Nombre de disque de secoure
/dev/sdd              Disques de secour a utilisé

On peut maintenant créé notre filesystème sur le RAID

root:~# mkfs –t ext3 /dev/md0
root:~# mkdir /mnt/raid1
root:~# mount –t ext3 /dev/md0 /mnt/raid1

RAID 10

Passons au RAID 10, nous allons pour cela créé deux matrices RAID 1 que l’on vas regrouper sur une matrice RAID 0.

On vas créé les deux matrices RAID 1

root:~# mdadm –-create /dev/md0 –-level=raid1 –-raid-devices=2 /dev/sda /dev/sdb
root:~# mdadm –-create /dev/md1 –-level=raid1 –-raid-devices=2 /dev/sdc /dev/sdd

Nos deux RAID 1 (/dev/md0 et /dev/md1) créé, on vas les regrouper dans un RAID 0

root:~# mdadm –-create /dev/md2 –-level=raid0 –-raid-devices=2 /dev/md0 /dev/md1

On peut maintenant créé notre filesystème sur le RAID0 de RAID1

root:~# mkfs –t ext3 /dev/md2
root:~# mkdir /mnt/raid10
root:~# mount –t ext3 /dev/md2 /mnt/raid10

RAID 5

Enfin le RAID 5, nous utiliserons ici 4  disques également dont un de secoure.

Le principe est le même que en RAID0 mais avec un partition de secoure en plus et le level en raid1 et non raid0.

root:~# mdadm –-create /dev/md0 –-level=raid5 –-raid-devices=3 /dev/sda /dev/sdb /dev/sdc -–spare-devices=1 /dev/sdd

On peut maintenant créé notre filesystème sur le RAID

root:~# mkfs –t ext3 /dev/md0
root:~# mkdir /mnt/raid5
root:~# mount –t ext3 /dev/md0 /mnt/raid5

Administration

Verifier le RAID

Il y a deux possibilities pour verifier l’etat du thread. Le fichier /proc/mdstat et la commande mdadm.

root:~# watch cat /proc/mdstat

Every 2,0s: cat /proc/mdstat                                                                                                                    Tue Jan  4 03:06:33 2011

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]

md0 : active (auto-read-only) raid5 sdb[0] sde[3](S) sdd[2] sdc[1] 208768 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]

md1 : active (auto-read-only) raid5 sdf[0] sdi[3](S) sdh[2] sdg[1] 208768 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]

resync=PENDING

unused devices: <none>

Ou bien mdadm –detail <device>

root:~# mdadm –detail /dev/md0
/dev/md0:
Version : 00.90
Creation Time : Tue Jan  4 01:24:08 2011
Raid Level : raid5
Array Size : 208768 (203.91 MiB 213.78 MB)
Used Dev Size : 104384 (101.95 MiB 106.89 MB)
Raid Devices : 3
Total Devices : 4
Preferred Minor : 0
Persistence : Superblock is persistent

Update Time : Tue Jan  4 01:46:14 2011
State : clean
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1

Layout : left-symmetric
Chunk Size : 64K

UUID : b8c892c6:c59a3628:f0e976dc:8f6e00c0
Events : 0.10

Number   Major   Minor   RaidDevice State
0       8       16        0      active sync   /dev/sdb
1       8       32        1      active sync   /dev/sdc
2       8       48        2      active sync   /dev/sdd
3       8       64        –      spare   /dev/sde

Ajouter un disque dur

Pour ajouter un disque dur a la matrice de RAID on utilise l’option –a de mdadm :

root:~# mdadm /dev/md0 –a /dev/sdx
mdadm: hot added /dev/sdax

Avec cela on ajoute sdx au Raid md0

Suprimer un disque dur

Pour enlever un disque dur de la matrice de RAID on utilise l’option –d de mdadm :

root:~# mdadm /dev/md0 –d /dev/sdc
mdadm: hot removed /dev/sdc

Ainsi on suprimme /dev/sdc de md0

Simuler une panne et remplacer un disque

Pour tester le bon fonctionnement du RAID il est intéressant de créé des pannes.

root:~# mdadm /dev/md0 –f /dev/sdd
mdadm: set /dev/sdd to faulty in /dev/md0

Ainsi le disque sdc est passé en faulty :

md0 : active (auto-read-only) raid5 sdb[0] sde[3](S) sdd[2](F) sdc[1] 208768 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]

Si un spare disk est présent, il sera automatiquement utilisé pour remplacer le disque déffecteux. Voici maintenant comment remplacer sdd, qui est maintenant « foutu » de notre RAID.

root:~# mdadm /dev/md0 –d /dev/sdd
mdadm: hot removed /dev/sdd

root:~# mdadm /dev/md0 –a /dev/sdr
mdadm: hot removed /dev/sdr

On a suprimer sdd du RAID et on a mis sdr a sa place. Si le RAID est complet, ce disque sera rajouté dans les spare disk en cas de futur panne.

Annexes

Annexe A : Ajout de disque dur sous VmWare Workstation

a.       Se rendre dans le menu de configuration du hardware de la VM. (Si elle est en exécution, double cliquer sur l’icône du disque dur en bas à droite)

b.      Cliquer sur Add

c.       Choisir Hard Disk puis suivant.

d.      Choisir Create a New Virtual Disk

e.      Choisir SCSI comme type de disque virtuel.

f.        Ici vous définissez la taille que vous désirez pour votre nouveau disque et cliquez sur suivant

g.       Sur la plupart du système, si vous ajoutez un disque, vous devrez redémarrer la VM.

Sources & Référence

Subversion avec Eclipse CDT ou : “Le combat entre l’homme et la machine”

Salut à tous, ça fait un bail donc voici un petit tips sur eclipse. Certains vont me regarder avec de grands yeux mais pour les besoin d’un cours je dois dev’ en C, après avoir passé du temps sur le primitif « standard windosien » codeblock puis du léger et classique avec gedit, une tentative d’EDI correcte avec l’ in-ergonomique kdevelop et un gros retour aux sources sous emacs, Eclipse CDT est finalement l’environnement qui m’a séduit le plus. Ergonomique, fonctionnel, valgrind/autotools/etc intégré, extensible à souhait, robuste enfin bref, je pense avoir trouvé enfin mon bonheur. Seul soucis, j’utilise pour le contrôle de source SVN et non CVS. En effet, si CVS est intégré nativement à Eclipse, il n’en va pas de même pour SVN.

N’ayant que très peu utiliser eclipse par le passé, l’installation d’un client svn est devenue après 2H de trifouillage un véritable combat entre moi et la machine. Premièrement, je suis désolé mais, Subversive… ça marche pas ! Et si ça marche sous Debian Lenny avec Eclipse CDT Linux Developper Helios R1 je veux le voir. Enfin si, ça « marche », le client est installé et à l’air d’être capable de fonctionner, mais impossible de faire tourner le moindre connecteur SVN. J’ai tout essayé, les télécharger/installer à la mano, re-re-re-re-installer, installer les sources en me disant : « Peut être que… », suivi 3 tutos, bref, Subversive est une expérience qui me reste un peu en travers de la gorge. Alors que je décourageais en tentant de comprendre les interminables logs d’erreur de Java qui défilait, j’ai eu une lueur d’espoir grâce au marketplace : Subclipse, autre implémentation de subversion. J’installe, jusque-là pas de soucis et il semble installer les connecteurs nécessaire. Je veux me loger sur mon svn : « JavaHL introuvable ». Calme… Bon, un « apt-get install libsvn-java » plus tard : « JavaHL introuvable »

Pas de soucis on se calme, go wiki : http://subclipse.tigris.org/wiki/JavaHL
J’édite comme mentionné le fichier eclipse.ini en rajoutant le  – Djava.library.path=/var/lib/jni
“JavaHL doit être en version 1.6.0 et supp”

‘—

Hééééééé oui ! Pas de .deb pour les dernières versions et encore moins de version source à compiler, ked’. Et là, une idée saugrenue me passe par la tête :

1.            Télécharge le RPM
2.            $> alien –d <archive.rpm>
3.            Dpkgi –i <archive.deb>

YEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

C’est le seul moyen fiable que j’ai trouvé d’installer ce truc. Donc en gros pour utiliser le client Subclipse sous distrib debian-based il faut télécharger le RPM sur CollabNet, le convertir en Deb et l’install a la main puis éditer le fichier eclipse.ini en rajoutant :

-Djava.library.path=/opt/CollabNet_Subversion/lib

Et enfin croiser les doigts très très fort 😀

Enfin bref, au moins ça marche et j’espère que ceux qui sont dans le même cas que moi auront trouvé de l’apaisement à leurs souffrances quand à 3H15 du matin, on relit pour la 20éme fois le même article en se disant chaque fois : « Bon… J’ai du louper un truc… »

VBoxManage – Le frontend caché de VirtualBox

Cet article a pour but de vous informer d’une commande souvent ignorée des utilisateurs de VirtualBox (Ose ou Full) mais qui pourtant plus que primordiale. Elle est en fait le frontend ultime de VirtualBox. En fait, virtualbox contient :
– Un interface graphique QT – VirtualBox
– Un “Plain Gui” basé sur SDL – VBoxSDL
– Une interface RDP – VBoxHeadless
– Command Line – VBoxManage
Les trois implémentes les fonctions de la librairie VBoxVMM.dll ou VBoxVMM.so sous linux.
Ainsi on peut lancer une VM avec le GUI, fermer ce GUI, VirtualBox lance dans un process indépendant les VMs donc l’instancieur est indépendant de la VM, puis éteindre la VM avec VBoxManage, grâce au gestionnaire VBoxSVC qui se fait interface entre l’implémentation des fonctions et la VM. On a donc basiquement, de manière shématique 3 process, un FrontEnd (GUI, RDP, CLI, …), un COMProcess, une VM.

VBoxManage est donc un frontend au même titre que le GUI sauf qu’il donne accés à TOUTES les fonctionnalitées de VirtualBox… et elles sont nombreuses. Faisons un rapide tour du proprio.
Premièrement, VboxManage doit toujours être utilisé avec une sous commande tel que “list”, “createvm”, “startvm”. Nous passons ensuite à cette sous commande des arguments. Par exemple pour demarrer ma VM nomé 404VirtualMachine je fais donc :
VBoxManage startvm “404VirtualMachine”
Ou alors utiliser son UUID. Passons rapidement en revue les sous commande disponibles et leurs fonctions.

list : Renvoi des informations sur le système et la configuration de VirtualBox
showvminfo : Renvoi des informations sur une vm en particulier
registervm/unregistervm : importe/exporte une VM Définition de VirtualBox
createvm : créé une VM
modifyvl : modifie la configuration de la VM
import : importe une appliance au format OVF et en fait une VM
export : exporte une VM en appliance OVF
startvm : démarre une VM
controlvm : permet de prendre le contrôle de l’etat la VM
snapshot : gére les snapshot de vm (créé, supprimer, replacer, restorer, etc)
openmedium/closemedium : permet de gérer les images de HDD, DVD, Disquette,…
storagectl/storageattach : Permet de gérer les contrôleurs de storage attribué aux VM
showhdinfo : renvoi des informations sur le HDD de la VM
createhd : créé un nouveau HDD virtuel.
modifyhd : modifie un HDD virtuel
clonehd : clone un HDD virtuel
convertfromw : converti une image disque en fichier VDI (VirtualBox Disk Image)
addiscsidisk : ajoute un storage reseau iscsi a virtualbox
getextradata/setextradata : permet de modifier la configuration du système
setproperty : permet de modifier des paramètres globaux
usbfilter : permet de travailler avec des filtres usb
sharedfolder : permet de gérer le partage de dossier entre une VM et le système grâce à virtualbox
metrics : permet de monitorer le système
guestproperty :  permet de modifier les propriètées d’une machine virtuelle déjà lancée.
guestcontrol : permet depuis l’hôte de modifier le guest
dhcpserver : permet de gerer le serveur DHCP attaché a virtualBox

Voila en gros la liste (résumée) des sous-commandes disponible avec VBoxManage. Pour  ces sous commandes, je n’ai pas détaillé les paramètres. Le but n’étant pas de réécrire la documentation, mais de montrer très basiquement que VBoxManage permet de gérer entièrement le système et de manière beaucoup plus performante, rapide et pointue que le frontend QT.

La documentation complète sur VBoxManage peut être lue ici : http://www.virtualbox.org/manual/ch08.html
Concernant les frontend, voici une brêve description :
http://www.virtualbox.org/manual/ch01.html#frontends

Linux – Mise en place d’un serveur DHCP

Présentation

Le service DHCP (Dynamic Host Configuration Protocol) permet de configurer dynamiquement des hôtes en leurs envoyant des informations sur leur adresse, le routage, les DNS etc. Il n’y a en général qu’un serveur DHCP par segment du réseau, le plus souvent, si un second est présent, il aura comme rôle DHCP relay. Nous ne parlerons pas des DHCP Relay dans cet article.
DHCP est une sur couche de BOOTP (Bootstrap Protocol), quand le client veut contacter le DHCP, c’est BOOTP qui est utilisé pour fournir les informations qui valident sur une durée donnée (un bail)Un client, va donc, au travers de BOOTP, broadcasté le réseau (sur 255.255.255.255 donc) avec une trame contenant, entre autre, sa MAC, le type de request, le port, etc. Il effectue une DHCPDISCOVER, ensuite, une fois que le serveur a detecté un DHCPDISCOVER, il va répondre au client avec un DHCPOFFER (via sa MAC donc, on est toujours en Layer 2, il n’y a pas encore d’IP ici, d’où la limitiation du champ qux subnets) qui contient une première configuration. L’hôte établit cette configuration et renvoi un DHCPREQUEST pour confirmer que la configuration envoyé plus tôt est correcte. Si c’est le cas, le DHCP renvoi un DHCPHACK avec des informations complémentaires (durée de bail par exemple).
Voici une analyse de cette négociation, réalisé sur mon LAN avec Wireshark.

Dans mon cas, pour une question de facilité, mon serveur et mon client sont connecté en mode AdHoc.

Installation

La première chose à faire est d’installer le DHCP, rien de plus simple :
apt-get install dhcpd

DHCPD est donc un daemon. Il se lance via “/etc/init.d/dhcpd start” ou “service dhcpd start” selon la distribution. Il y a deux fichiers importants, /etc/dhcpd.conf et /var/lib/dhcpd/dhcpd.leases. Le premier contient les configurations à envoyer  aux clients, le second, les configurations déjà envoyées.

Configuration.

Nous allons faire deux configurations. Un première avec des hôtes entièrement dynamique, une seconde où l’on voudra que certains hôtes aient toujours la même ip ou une route différente par exemple.
Configuration A – Full Dynamic
Il n’y a qu’un fichier a éditer, /etc/dhcpd.conf
Voici une configuration de “base”, mais pleinement fonctionnelle qui conviendra  aussi  bien à un réseau domestique que d’entreprise. Avant de configurer notre DHCP nous devons connaître certains infos :

Quel est le subnet ?
Quels sont les DNS à utiliser ?
Quel est le nom de domaine transmit au client ?
Le DNS est-il dynamique ?
Quelles sont les durées de bail ?
Quelle est la route par défaut ?
Il y a-t-il des hôtes statiques ?
Quel est le range d’ip disponible a attribué ?

Dans notre exemple :

Quel est le subnet ?  192.168.1.0/24 (255.255.255.0)
Quels sont les DNS à utiliser ?  194.7.1.4
Quel est le nom de domaine transmit au client ?  404Network.local
Le DNS est-il dynamique ?  Non
Quelles sont les durées de bail ?  21600 secondes
Quelle est la route par défaut ?  192.168.1.254
Il y a-t-il des hôtes statiques ? Non
Quel est le range d’ip disponible a attribué ?
De 192.168.1.2 a 192.168.1.253
192.168.1.1 = DHCP, 192.168.1.254 = Gateway

Ce qui nous donne un fichier de ce type :

ddns-update-style none;  #Pas de mise a jours du DNS
option domain-name "404Netowork.local";  #Domaine
option domain-name-servers 194.7.1.4; #Addresse ip des DNS
default-lease-time 21600; #Bail par défaut
max-lease-time 43200; #Bail envoyé lorsque le client demande un bail plus élevé
#Nous allons ici créer une zone ou spool DHCP
subnet 192.168.1.0 netmask 255.255.255.0
{
option routers 192.168.1.254; #route par défaut
option subnet-mask 255.255.255.0; #masque de sous réseau
range 192.168.1.2 192.168.1.253; #Range d'ip a attribué
}

Configuration B – Mixed DHCP

Nous voulons maintenant que certaines machines dans notre réseau aient toujours la même ip. Pour ce faire nous allons préciser une ip par Mac Address. Les hôtes, n’étant pas dans la liste, auront une ip dymanique “classique”. Il nous faut juste nous poser une question supplémentaire,  quels sont les hôtes statiques et quels sont leurs ip ?

Quel est le subnet ?  192.168.1.0/24 (255.255.255.0)
Quel sont les DNS à utiliser ?  194.7.1.4
Quel est le nom de domaine transmit au client ?  404Network.local
Le DNS est-il dynamique ?  Non
Quelles sont les durées de bail ?  21600 secondes
Quelle est la route par défaut ?  192.168.1.254
Il y a-t-il des hôtes statiques ? Non
Quel est le range d’ip disponnible a attribué ?
De 192.168.1.100 a 192.168.1.253
192.168.1.254 = Gateway
192.168.1.1 -> 192.168.1.100 = Hôtes statiques

Quels sont les hôtes statiques ?
00:04:ad:41:5c:98 -> Maxime
00:b1:57:c5:75:ad -> Julie

Quelles sont les ips des hôtes statiques ?
Maxime -> 192.168.1.2
Julie -> 192.168.1.3

Le fichier de configuration devient donc :

ddns-update-style none;  #Pas de mise à jour du DNS
option domain-name "404Netowork.local";  #Domaine
option domain-name-servers 194.7.1.4; #Adresse ip des DNS
default-lease-time 21600; #Bail par défaut
max-lease-time 43200; #Bail envoyé lorsque le client demande un bail plus élevé
#Nous allons ici créer une zone ou spool DHCP
subnet 192.168.1.0 netmask 255.255.255.0
{
 option routers 192.168.1.254; #route par defaut
 option subnet-mask 255.255.255.0; #masque de sous réseau
 range 192.168.100 192.168.1.253; #Range d'ip a attribué
 host Maxime
 {
 hardware ethernet 00:04:ad:41:5c:98;
 fixed-address 192.168.1.2;
 }

 host Julie
 {
 hardware ethernet 00:b1:57:c5:75:ad;
 fixed-address 192.168.1.3;
 }
}

Il ne reste plus qu’à relancer le serveur DHCP pour prendre en compte la nouvelle configuration.
Il se peut que le fichier dhcp.leases ne soit pas créé à l’installation, dans ce cas, le serveur DHCP grognera. Il suffit de le créé avec touch, et le serveur fonctionnera correctement.
Pour la sécurisation de serveurs DHCP contre le DHCP Spoofing (en résumé, se faire passer pour un dhcp et donc, envoyer des informations corrompues aux hôtes), j’ai écris un article pour éviter ce type d’attaque que vous pouvez le lire à cette adresse