<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Linux Attitude&#187; Savoir-faire</title>
	<atom:link href="http://linux-attitude.fr/tag/savoir-faire/feed" rel="self" type="application/rss+xml" />
	<link>http://linux-attitude.fr</link>
	<description>Le libre est un état d&#039;esprit</description>
	<lastBuildDate>Fri, 17 Feb 2012 08:00:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Lire un flux SSL</title>
		<link>http://linux-attitude.fr/post/lire-un-flux-ssl?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=lire-un-flux-ssl</link>
		<comments>http://linux-attitude.fr/post/lire-un-flux-ssl#comments</comments>
		<pubDate>Fri, 17 Jun 2011 07:24:34 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Réseau]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[planete-libre]]></category>
		<category><![CDATA[Savoir-faire]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/?p=1400</guid>
		<description><![CDATA[Niveau&#160;: &#160;&#160;&#160;&#160;&#160; Résumé&#160;: tcpdump ssl&#160;; ptrace&#160;; ltrace Vous attendez la suite de mon article sur ce qui passe par les oreilles d'un android&#160;? Hé bien vous allez attendre encore un peu ... Lorsque vous récupérez via tcpdump un flux SSL (au hasard du https), il est chiffré et c'est justement l'intérêt du SSL de vous [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="e">&nbsp;</span><br />
<strong>Résumé</strong>&nbsp;: tcpdump ssl&nbsp;; ptrace&nbsp;; ltrace</p>


<p>Vous attendez la suite de mon article sur ce qui passe par les <a href="http://linux-attitude.fr/post/espionner-son-android">oreilles d'un android</a>&nbsp;? Hé bien vous allez attendre encore un peu ...</p>


<p>Lorsque vous récupérez via <strong>tcpdump</strong> un flux <strong>SSL</strong> (au hasard du https), il est chiffré et c'est justement l'intérêt du SSL de vous empêcher de lire ce flux.</p>


<p>Mais si si vous maitrisez une des deux extrémités, il devrait être normal que vous puissiez lire ce flux. C'est pourquoi nous allons le faire.</p>


<h3>Côté serveur</h3>

<p>Dans le cas où vous maitrisez le côté serveur, il suffit d'ouvrir la trace tcpdump (sauvegardée avec l'option -s0 -w file) sous wireshark et de le configurer pour qu'il utilise la clé serveur pour déchiffrer le flux :<a href="http://people.apache.org/~dirkx/settings.png">comme ici</a> et de choisir de <a href="http://people.apache.org/~dirkx/ssl.png">suivre le flux ssl</a> au lieu du flux TCP.</p>


<p>C'est simple et efficace.</p>


<h3>Côté client</h3>

<p>Maintenant si vous êtes côté client sans certificat client, vous êtes coincés. Et c'est là que j'ai une solution à vous proposer.</p>


<p>Il existe plusieurs moyen pour espionner vos processus, tout d'abord vous pouvez créer un wrapper autour de la lib SSL et utiliser LD_PRELOAD pour la charger avant le processus. C'est bien mais difficile à mettre en œuvre, surtout si le processus tourne déjà, je vous laisse explorer cette voie de votre côté.</p>


<p>La deuxième solution est d'utiliser <a href="http://linux.die.net/man/2/ptrace" hreflang="en">ptrace</a> pour espionner le processus. Techniquement complexe, cette méthode nous est grandement facilitée par l'outil <strong><a href="http://linux.die.net/man/1/ltrace" hreflang="en">ltrace</a></strong>.</p>


<p>Pour la suite je vais supposer que les services à espionner passent par openssl, mais rien ne vous empêche de faire la même chose avec gnutls.</p>


<h3>Espionner un processus</h3>


<p>C'est simple&nbsp;:</p>
<pre>
# vous le lancez directement : 
$  ltrace ma commande
# ou vous espionnez un processus qui tourne déjà 
$ ltrace -p pid
</pre>


<p>Ça vous montre le fonctionnement, mais c'est aussi illisible qu'un strace.</p>


<h3>Espionner le SSL</h3>

<p>Ajoutons quelques options pour trier ce fouillis&nbsp;:</p>
<pre>
$ ltrace -l /usr/lib/libssl.so.0.9.8 -s 20000 -e SSL_read,SSL_write
</pre>


<p>Et voilà, la liste des appels&nbsp;! Mais ce n'est pas suffisant.</p>


<p>Ajoutons les lignes suivantes dans /etc/ltrace.conf (ou dans ~/.ltrace.conf)&nbsp;:</p>
<pre>
int SSL_read(addr,string[retval],int);
int SSL_write(addr,string[arg3],int);
</pre>


<p>On relance la commande et maintenant nous avons le contenu de la communication en clair.</p>


<p>Mais il y a un petit bug dans ltrace, string[retval] devrait couper les chaines de SSL_read en fonction de la valeur de retour, mails ne le fait pas.</p>


<p>Corrigeons cela avec un petit script de formatage et cette fois nous avons toute la communication en clair&nbsp;!</p>
<pre>
$ ltrace -l /usr/lib/libssl.so.0.9.8 -s 20000 -e SSL_read,SSL_write -p pid 2&gt; /tmp/trace
$ perl -pe 's/(SSL_read.*?, &quot;)(.*)(&quot;.*? )(\d+)$/$1.substr($2,0,$4).$3.$4/e' /tmp/trace | less
</pre>

<p></p><p>Si vous avez aimé, il y a aussi : </p><ol><li><a href='http://linux-attitude.fr/post/analyse-reseau' rel='bookmark' title='Permanent Link: Analyse réseau'>Analyse réseau</a></li>
</ol>
	Tags:<a href="http://linux-attitude.fr/tag/planet-libre" title="planet-libre" rel="tag">planet-libre</a>, <a href="http://linux-attitude.fr/tag/planete-libre" title="planete-libre" rel="tag">planete-libre</a>, <a href="http://linux-attitude.fr/tag/savoir-faire" title="Savoir-faire" rel="tag">Savoir-faire</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/lire-un-flux-ssl/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Latence</title>
		<link>http://linux-attitude.fr/post/latence?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=latence</link>
		<comments>http://linux-attitude.fr/post/latence#comments</comments>
		<pubDate>Tue, 28 Sep 2010 17:51:57 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[Matériel]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[Savoir-faire]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/?p=953</guid>
		<description><![CDATA[Niveau&#160;: &#160;&#160;&#160;&#160;&#160; Résumé&#160;: quelques ordre de grandeur Voici quelques ordre de grandeur qui vous permettront d'avoir les idées un peu plus claires sur les performances de votre système. Imaginez que le swap est 100 000 fois plus lent que la mémoire du processus&#160;! Qu'un algorithme de création d'arbre peut être plus lent qu'un algorithme linéaire [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="e">&nbsp;</span><span class="e">&nbsp;</span><span class="e">&nbsp;</span><br />
<strong>Résumé</strong>&nbsp;: quelques ordre de grandeur</p>


<p>Voici quelques ordre de grandeur qui vous permettront d'avoir les idées un peu plus claires sur les performances de votre système. Imaginez que le swap est 100 000 fois plus lent que la mémoire du processus&nbsp;! Qu'un algorithme de création d'arbre peut être plus lent qu'un algorithme linéaire si chaque nœud de l'arbre se retrouve sur une page différente (pensez à vos centaines de malloc pour remplir un arbre)&nbsp;!</p>

<table>
<caption><b>Valable en 2010</b></caption>
<tr><th>Objet</th><th>Latence</th><th>Débit</th></tr>
<tr><td>Internet</td><td>80 ms</td><td>2 Mo/s</td></tr>
<tr><td>Accès au swap</td><td>8 ms</td><td>50 Mo/s</td></tr>
<tr><td>Disque10krpm</td><td>3 ms</td><td>50 Mo/s</td></tr>
<tr><td>Ethernet gigabit</td><td>1 ms</td><td>100 Mo/s</td></tr>
<tr><td>Disque SSD</td><td>0.5 ms</td><td>100 Mo/s</td></tr>
<tr><td>fork</td><td>0.1 ms</td><td></td></tr>
<tr><td>context switch</td><td>3 µs</td><td></td></tr>
<tr><td>gettimeofday</td><td>1 µs</td><td></td></tr>
<tr><td>Interface pci</td><td>0.1 µs</td><td>133 Mo/s</td></tr>
<tr><td>malloc/mmap</td><td>0.1 µs</td><td></td></tr>
<tr><td>RAM</td><td>30 ns</td><td>8 Go/s</td></tr>
<tr><td>Interface pci-express 16x</td><td>10 ns</td><td>8 Go/s</td></tr>
<tr><td>Cache L2</td><td>5 ns</td><td></td></tr>
<tr><td>Cache L1</td><td>1 ns</td><td></td></tr>
<tr><td>Registre processeur</td><td>0.3 ns</td><td>40 Go/s</td></tr>
</table>


<p>Notez que l'important ce sont les ordres de grandeur, vous pouvez facilement trouver des éléments qui font le double ou la moitié de ces performances.</p>


<h3>Interprétations</h3>

<p>Sérieusement, pas besoin de giga de swap sur votre serveur. Mettez un tout petit peu et vous monitorez dès que ca dépasse, imaginez la division par un nombre à 5 chiffres du nombre de pages vues sur votre serveur&nbsp;! Pour ma part je préfère répondre à moins de requêtes par seconde et garder un serveur utilisable.</p>


<p>Mais sur votre station de travail vous faites ce que vous voulez, on est en général plus patient :-)</p>


<p>Pas de gettime à gogo dans votre code pour mesurer les perf, ça tue les perfs ...</p>


<p>Le réseau fait a peu près aussi bien que votre disque.</p>


<p>Pas de malloc à gogo pour des structures morcelées et très utilisées. faites une structure unique si vous devez en avoir beaucoup.</p>


<p>Le SSD c'est bien mais ca vaut pas l'accès direct au flash.</p>


<p>Étant donné la vitesse de compression un swap compressé peut vraiment valoir le coup.</p>


<p>Le cache processeur sert vraiment à quelque chose ... si on sait coder pour qu'il soit utilisé (ou laisser le compilateur faire).</p>


<p>Le fork c'est un peu lent, prévoyez un prefork correct sur vos applications fréquemment appelées.</p>


<p>Avoir beaucoup de processus n'est pas si coûteux en soi (context switch).</p>


<p><br />
<strong>PS</strong>&nbsp;: Si vous avez des données pour compléter ce tableau, n'hésitez pas à me laisser des commentaires.</p>

<p></p><p>Si vous avez aimé, il y a aussi : </p><ol><li><a href='http://linux-attitude.fr/post/que-faire-et-ne-pas-faire-en-raid' rel='bookmark' title='Permanent Link: Que faire et ne pas faire en raid'>Que faire et ne pas faire en raid</a></li>
</ol>
	Tags:<a href="http://linux-attitude.fr/tag/materiel" title="Matériel" rel="tag">Matériel</a>, <a href="http://linux-attitude.fr/tag/planet-libre" title="planet-libre" rel="tag">planet-libre</a>, <a href="http://linux-attitude.fr/tag/savoir-faire" title="Savoir-faire" rel="tag">Savoir-faire</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/latence/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Haute disponibilité</title>
		<link>http://linux-attitude.fr/post/haute-disponibilite?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=haute-disponibilite</link>
		<comments>http://linux-attitude.fr/post/haute-disponibilite#comments</comments>
		<pubDate>Fri, 24 Sep 2010 17:04:49 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[Savoir-faire]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/?p=727</guid>
		<description><![CDATA[Niveau&#160;: &#160;&#160;&#160;&#160;&#160; Résumé&#160;: HA Cékoikece Qu'est-ce que la haute disponibilité&#160;? Déjà on ne dit pas HD mais HA (high availability) ;-). Il s'agit de fournir un taux de disponibilité très important. En général la disponibilité se mesure en 9, deux 9, trois 9 ... Cela indique le pourcentage de disponibilité. Deux 9 c'est 99%, sur [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="e">&nbsp;</span><span class="e">&nbsp;</span><span class="e">&nbsp;</span><br />
<strong>Résumé</strong>&nbsp;:</p>


<h3>HA Cékoikece</h3>

<p>Qu'est-ce que la haute disponibilité&nbsp;? Déjà on ne dit pas HD mais HA (high availability) ;-).</p>


<p>Il s'agit de fournir un taux de disponibilité très important. En général la disponibilité se mesure en 9, deux 9, trois 9 ... Cela indique le pourcentage de disponibilité. Deux 9 c'est 99%, sur un an ça correspond à 88h de non disponibilité. C'est assez faible.</p>


<p>Mais faible ou élevé, tout dépend de ce dont on parle. Si on parle d'un site web, 99% c'est faible mais suffisant, si on parle d'un service financier on préfèrera 99.999%</p>


<h3>Les pannes</h3>

<p>Les causes des indisponibilités peuvent être multiple&nbsp;:</p>
<ul>
<li>bug</li>
<li>erreur humaine</li>
<li>coupure de courant</li>
<li>chalutier qui coupe un câble</li>
<li>bombe H sur batiment</li>
<li>...</li>
</ul>

<p>Les éléments pouvant être coupés sont nombreux&nbsp;:</p>
<ul>
<li>électricité</li>
<li>salle d'hébergement</li>
<li>électronique</li>
<li>disques</li>
<li>réseau</li>
<li>système d'exploitation</li>
<li>logiciel</li>
</ul>
<p><span id="more-727"></span></p>


<h3>Que faire&nbsp;?</h3>

<p>Pour éviter d'avoir trop de problèmes la meilleurs solution est ... d'ajouter des problèmes.</p>


<p>C'est comme pour le fromage, ajouter du fromage ajoute des trous, ajouter des trous enlève du fromage. De même ajouter des machines ajoute des problèmes ajouter des problèmes enlève de la disponibilité.</p>


<p>Un bon exemple du succès de la méthode est celui des avions. Savez-vous qu'il y a plusieurs avaries par jour sur des avions en vol dans le monde&nbsp;? Non&nbsp;? Hé bien c'est tout simplement parce que tout  est multiplié dans un avion et qu'un réacteur qui ne marche plus, ce n'est pas si grave, il y en a d'autres. Du coup la probabilité que tout tombe en panne en même temps est beaucoup plus faible. Et les cas graves sont très rares, surtout au vu du nombre de vols quotidiens.</p>


<p>Dans l'informatique c'est pareil, tout peut être doublé, voire triplé&nbsp;:</p>
<ul>
<li>l'électricité&nbsp;: l'arrivée électrique, l'onduleur, le générateur</li>
<li>la climatisation</li>
<li>les serveur double alim</li>
<li>les routeurs /switchs / firewall double attachés</li>
<li>les baies doublées et séparées</li>
<li>les datacenter doublés</li>
<li>les disques doublés, en raid ou en san</li>
<li>les serveurs doublés</li>
<li>les os différents</li>
</ul>

<h3>Technologies</h3>

<p>A chaque fois que vous multipliez quelque chose, il faut vérifier que la technologie située sur la couche du dessus le supporte. A quoi bon mettre du loadbalancing sur une application qui stocke toutes ses informations en local&nbsp;!</p>


<p>Pour faire de la haute disponibilité, c'est en général la notion de failover qui prédomine. Si un câble réseau tombe, un deuxième prend le relai. Si une alimentation grille, on va utiliser une autre ...</p>


<p>Cette notion a l'avantage d'être simple et d'avoir moins d'impacts sur la couche du dessus. En revanche elle est en générale plus lente à être mise en place car on fait en sorte de ne pas impacter le reste du monde. Mais bien évidemment tout dépend de ce dont on parle. Le failover en électricité est instantané. Par contre le failover sur une base oracle est un poil plus long à activer.</p>


<p>Une deuxième notion de haute disponibilité est plus liée à la montée en charge&nbsp;: le loadbalancing. Une fois mis en place dans le but de gérer une montée en charge il peut aussi servir à faire de la haute disponibilité. En général cette mise en place implique une complexité plus grande, mais aussi une réactivité plus grande.</p>


<p>Et c'est là qu'on arrive à une confusion courante.</p>


<p>Il est important de ne pas confondre <strong>haute disponibilité</strong> et <strong>montée en charge</strong>&nbsp;!</p>


<p>Si vous installez un service sur 3 machines, 2 pour gérer la montée en charge et la 3e pour la haute disponibilité. Il faut considérer cette 3e comme <strong>éteinte</strong>. Il ne faut jamais dire qu'on va utiliser temporairement cette machine pour gérer des pics de charge. Tout d'abord parce qu'en informatique le temporaire dure longtemps (allez en parler aux stagiaires qui ont mis les dates sur 2 chiffres en 1970 dans une base de données) et ensuite parce que la perte de cette machine ne doit pas provoquer de problème sur le service quelle que soit la situation.</p>


<p>En résumé, le même matériel ne peut pas servir à la fois à la haute disponibilité ET à la montée en charge&nbsp;!</p>


<h3>Solutions</h3>


<p>Cet article n'est qu'un aperçu, vais donc simplement évoquer ici différentes solution "logicielles" de haute disponibilité sans entrer dans les détails. Si cela vous intéresse allez y jeter un œil&nbsp;:</p>

<ul>
<li><a href="http://www.keepalived.org/software_design.html" hreflang="en">keepalived</a> est un loadbalancer réseau, il permet de gérer à la fois le loadbalancing de connexions TCP ou UDP vers plusieurs machines et la redondance du loadbalancer.</li>
<li><a href="http://www.linux-ha.org/wiki/Heartbeat" hreflang="en">heartbeat</a> un démon qui surveille en continu l'activité de machine apparié et déclence certaines actions en cas de besoin (comme récupérer son ip). Le site en lui-même est une très bonne ressource sur la haute disponibilité</li>
<li><a href="http://dev.mysql.com/doc/refman/5.1/en/mysql-cluster.html" hreflang="en">mysql cluster</a> est un moyen de faire tourner plusieurs serveurs mysql en parallèle sur la même base de données et donc d'augmenter à la fois les performances et la disponibilité</li>
<li><a href="http://memcached.org/" hreflang="en">memcached</a> est un moyen de partager des ressources entre des applications distribuées sur plusieurs machines sous la forme clé/valeur. Il ne garanti pas la disponibilité des données et donc est plus proche du cache que de la haute dispo</li>
<li><a href="http://haproxy.1wt.eu/" hreflang="en">haproxy</a> est un loadbalancer HTTP, c'est-à-dire qu'il fait reverse proxy et redirige les requêtes vers plusieurs serveurs web en fonction de leur activité.</li>
<li><a href="http://oss.oracle.com/projects/ocfs2/" hreflang="en">ofcs2</a> est du loadbalancing appliqué aux systèmes de fichier. Deux machines peuvent accéder en même temps à un fichier situé sur le même disque (réseau de préférence).</li>
</ul>

<p>...</p>


<p>Et j'en oublie des centaines d'autres, à vous de vous faire une idée de ce qui est possible en allant chercher l'outil qui vous convient le mieux.</p>

<p></p><p>Si vous avez aimé, il y a aussi : </p><ol><li><a href='http://linux-attitude.fr/post/hebergement' rel='bookmark' title='Permanent Link: Hébergement'>Hébergement</a></li>
<li><a href='http://linux-attitude.fr/post/round-robin-dns' rel='bookmark' title='Permanent Link: Round robin DNS'>Round robin DNS</a></li>
<li><a href='http://linux-attitude.fr/post/execution-non-simultanee-de-crons' rel='bookmark' title='Permanent Link: Exécution non simultanée de crons'>Exécution non simultanée de crons</a></li>
</ol>
	Tags:<a href="http://linux-attitude.fr/tag/savoir-faire" title="Savoir-faire" rel="tag">Savoir-faire</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/haute-disponibilite/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>La grande famille des processus</title>
		<link>http://linux-attitude.fr/post/la-grande-famille-des-processus?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=la-grande-famille-des-processus</link>
		<comments>http://linux-attitude.fr/post/la-grande-famille-des-processus#comments</comments>
		<pubDate>Mon, 09 Aug 2010 17:12:48 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[Curiosité]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[Savoir-faire]]></category>
		<category><![CDATA[Système]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/?p=1000</guid>
		<description><![CDATA[Niveau&#160;: &#160;&#160;&#160;&#160;&#160; Résumé&#160;: /proc/&#60;pid&#62; Les processus comme je l'ai déjà décrit, forment une grande famille. La famille processus Dans la famille processus je voudrais le père Les processus se reproduisent par fork (Mitose en français). Ce qui veut dire qu'à la genèse il n'y avait qu'un processus que nous ne nommerons pas Adam mais init. [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <span class="s">&nbsp;</span><span class="e">&nbsp;</span><span class="e">&nbsp;</span><span class="e">&nbsp;</span><span class="e">&nbsp;</span><br />
<strong>Résumé</strong>&nbsp;: /proc/&lt;pid&gt;</p>


<p><a href="http://linux-attitude.fr/post/brutus-processus">Les processus</a> comme je l'ai déjà décrit, forment une grande famille.</p>


<h2>La famille processus</h2>

<p><br /></p>


<h3>Dans la famille processus je voudrais le père</h3>


<p>Les processus se reproduisent par fork (<a href="http://fr.wikipedia.org/wiki/Mitose" hreflang="fr">Mitose</a> en français). Ce qui veut dire qu'à la genèse il n'y avait qu'un processus que nous ne nommerons pas <a href="http://fr.wikipedia.org/wiki/Adam" hreflang="fr">Adam</a> mais <a href="http://linux-attitude.fr/post/processus-de-boot">init</a>.</p>


<p>Tous les processus possèdent un identifiant (pid) ainsi qu'un identifiant de processus parent (ppid) permettant de les repérer dans un arbre généalogique (<a href="http://linux.die.net/man/1/pstree" hreflang="en">pstree</a>).</p>


<p>Comment reconnait-on le père du fils lors du fork d'un processus&nbsp;? Uniquement par le code de retour de la méthode fork qui vaut 0 pour le fils et donne le pid du fils au père. En dehors de cela les 2 processus sont rigoureusement identiques.</p>


<h3>Dans la famille processus je voudrais la mère</h3>

<p>Désolé, il n'y a pas de femme chez les processus, la reproduction est asexuée, mais c'est une idée à creuser ...</p>


<h3>Dans la famille processus je voudrais le fils</h3>

<p>Lorsqu'un processus forke, en général le père poursuit sa vie comme si de rien n'était, par contre le fils va muter. La mutation génétique chez les processus est bien plus violente que chez les êtres vivants. En effet, le code (l'<a href="http://fr.wikipedia.org/wiki/Adn" hreflang="fr">ADN</a> en français) est intégralement relu et remplacé depuis un nouveau fichier sur le disque. C'est ce qu'on appelle un <a href="http://linux.die.net/man/3/exec" hreflang="en">exec</a>.</p>


<p>Il existe quelques cas de processus qui ne fonctionnent pas comme ceci, mais qui laissent leur père mourir (ingrats !) et qui prennent leur place. C'est le cas des <a href="http://fr.wikipedia.org/wiki/Daemon" hreflang="fr">démons</a> (un parricide est-il un démon ?) dont le but est de devenir indépendants (émancipés) et ne plus avoir de problèmes d'adolescence (le tty du père) ou de famille (le <a href="http://en.wikipedia.org/wiki/Process_group" hreflang="fr">groupe de processus</a>).</p>


<h3>Dans la famille processus je voudrais le grand-père</h3>

<p>Lorsqu'un processus meurt, sa dépouille est remise à son père. Elle est essentiellement constituée de son code de retour.</p>


<p>Lorsque le père est déjà mort, c'est le doyen qui a la charge de récupérer le code de retour, par exemple avec la méthode <a href="http://linux.die.net/man/2/wait" hreflang="en">wait</a>.</p>


<p><span id="more-1000"></span></p>

<h3>Dans la famille processus je voudrais le zombie</h3>

<p>Si le père ne s'occupe pas des funérailles du fils bien aimé, celui-ci erre dans les méandres du noyau en attendant que quelqu'un veuille bien l'enterrer.</p>


<p>C'est ce qu'on appelle un zombie, caractérisé par la lettre Z ou par le mot defunct dans la liste des processus. Il est impossible de tuer un zombie (il est déjà mort). Seul son ascendant le plus proche le peut.</p>


<p>Heureusement l'ascendant universel, père de tous les processus, j'ai nommé init, prend soin de la dépouille de tous les enfants qui lui sont confiés. Donc si le père d'un zombie meurt, init s'occupera de le faire disparaître.</p>


<h2>Les non processus</h2>

<p><br /></p>


<h3>Chez les amis des processus voudrais le thread</h3>

<p>Le thread n'est pas vraiment un processus, c'est un élément de processus, tout comme la main est un élément du corps. Avoir plusieurs threads permet à un processus de faire plusieurs choses en même temps tout en restant une seule entité. Cela permet par exemple de dédier une main au traitement et un pied à l'affichage (oui on s'y prend souvent comme des pieds pour faire des <a href="http://ihm09.imag.fr/" hreflang="fr">IHM</a>, sauf certains qui y dédient <a href="http://johnnylee.net/projects/wii/" hreflang="en">la casquette</a>).</p>


<h3>Chez les amis des processus je voudrais le binaire</h3>

<p>Le binaire (ou fichier exécutable) est le modèle du processus, l'ADN si vous préférez. Sans binaire, impossible de créer un processus. Celui-ci est inerte et manipulable aisément.</p>


<h3>Chez les amis des processus je voudrais la bibliothèque</h3>

<p>La bibliothèque c'est un bout de code qui peut être réutilisé par des processus, tout comme <a href="http://fr.wikipedia.org/wiki/Plasmide" hreflang="fr">les plasmides </a>, elles s'intègrent à n'importe quel autre processus pour leur apporter une fonctionnalité donnée.</p>


<h3>Chez les amis des processus je voudrais le thread noyau</h3>

<p>Le thread noyau est un cas particulier de thread, il tourne dans l'espace noyau et ne partage donc sa mémoire qu'avec le noyau mais ne rentre dans aucun processus. On devrait les appeler des anges puisque ce sont des être invisibles (ou presque) agissant au compte de dieu (le noyau).</p>


<h3>Chez les amis des processus je voudrais le core</h3>

<p>Le core, ou core dump est la version fossilisée d'un processus mort au combat. Lorsqu'un processus meurt il est effacé de la mémoire, mais s'il meurt dans des conditions exceptionnelle, par exemple s'il s'est pris un coup de signal (<a href="http://linux.die.net/man/1/kill" hreflang="en">man kill</a>) dans la tête et qu'un résineux est à proximité (<a href="http://linux.die.net/man/1/ulimit" hreflang="en">ulimit -c</a>) on le coule dans l'ambre pour une analyse ultérieure. gdb est un grand ami médecin qui est aussi légiste, il saura vous aider le temps venu.</p>

<p></p><p>Si vous avez aimé, il y a aussi : </p><ol><li><a href='http://linux-attitude.fr/post/processus-et-threads' rel='bookmark' title='Permanent Link: Processus et threads'>Processus et threads</a></li>
<li><a href='http://linux-attitude.fr/post/brutus-processus' rel='bookmark' title='Permanent Link: Brutus Processus'>Brutus Processus</a></li>
<li><a href='http://linux-attitude.fr/post/processus-de-boot' rel='bookmark' title='Permanent Link: Processus de boot'>Processus de boot</a></li>
</ol>
	Tags:<a href="http://linux-attitude.fr/tag/curiosite" title="Curiosité" rel="tag">Curiosité</a>, <a href="http://linux-attitude.fr/tag/planet-libre" title="planet-libre" rel="tag">planet-libre</a>, <a href="http://linux-attitude.fr/tag/savoir-faire" title="Savoir-faire" rel="tag">Savoir-faire</a>, <a href="http://linux-attitude.fr/tag/systeme" title="Système" rel="tag">Système</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/la-grande-famille-des-processus/feed</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Test de bootloader à distance</title>
		<link>http://linux-attitude.fr/post/test-de-bootloader-a-distance?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=test-de-bootloader-a-distance</link>
		<comments>http://linux-attitude.fr/post/test-de-bootloader-a-distance#comments</comments>
		<pubDate>Fri, 18 Jun 2010 08:17:00 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[Savoir-faire]]></category>
		<category><![CDATA[Serveur]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/?p=901</guid>
		<description><![CDATA[Niveau&#160;: &#160;&#160;&#160;&#160;&#160; Résumé&#160;: ssh qemu-system -hda /dev/sda Supposons que vous administriez une machine distante. Vous n'avez pas d'accès physique à cette machine. C'est ennuyant puisque vous venez de changer la configuration de votre bootloader. Comment faire pour rebooter tout en garantissant que ca va marcher&#160;? Hé bien j'ai la solution qui vous permettra de tester [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="e">&nbsp;</span><br />
<strong>Résumé</strong>&nbsp;: ssh qemu-system -hda /dev/sda</p>


<p>Supposons que vous administriez une machine distante. Vous n'avez pas d'accès physique à cette machine.
C'est ennuyant puisque vous venez de changer la configuration de votre bootloader.</p>


<p>Comment faire pour rebooter tout en garantissant que ca va marcher&nbsp;?</p>


<p>Hé bien j'ai la solution qui vous permettra de tester ce boot avant de rebooter&nbsp;: <a href="http://wiki.qemu.org/Main_Page" hreflang="en">qemu</a>.</p>


<h3>Préparer les disques</h3>

<p>Il nous faut des disques en lecture seule pour éviter que le boot de la machine virtuelle n'écrive sur un disque en cours d'utilisation.
Donc pour chacun de vos disques physique&nbsp;:</p>
<pre>
$ cp -a /dev/sda /root/sda
$ chmod 440 /root/sda
</pre>


<p>Ainsi nous avons des disques garantis en lecture seule.</p>


<p><span id="more-901"></span></p>


<h3>Préparer son terminal</h3>

<p>Nous allons enregistrer ce qui se passe sur le terminal, lequel va tourner en ncurses, il est donc important pour la lisibilité des logs de le dimensionner à la même taille que l'écran de boot, c'est-à-dire 80x25.</p>


<p>Modifiez la taille de votre fenêtre de terminal jusqu'à ce que les variables $COLUMNS et $LINES vaillent respectivement 80 et 25.</p>


<h3>Préparer son bootloader</h3>

<p>Quel que soit votre bootloader configurez le de façon à ce qu'il ne lance pas de mode graphique, sinon vous ne pourrez pas stocker les logs de ce qui se passe.</p>


<h3>Choisit son qemu</h3>

<p>Installez qemu. Puis en fonction du matériel à émuler choisissez qemu-system-i386 ou qemu-system-x86_64 ou une autre architecture si vous travaillez sur d'autres machines.</p>


<h3>Lancer le tout</h3>

<p>Préparez un 2e terminal pour tuer qemu , ca sera plus simple que d'attendre qu'il se termine proprement (killall qemu pour les impatients).</p>

<pre>
$ sync
$ ssh -t localhost &quot;qemu-system-x86_64 -m 512 -curses -hda /root/sda&quot; | tee logs
</pre>


<p>Pourquoi sync&nbsp;? au cas où vous auriez fait des modification impactant le boot, on force l'écriture de celles-ci sur le disque.</p>


<p>Pourquoi ssh&nbsp;? Pour profiter de l'option -t qui crée un terminal virtuel même lorsqu'on travaille dans un pipe.</p>


<p>Pourquoi tee&nbsp;? Pour stocker les logs de ce qui se passe tout en gardant la main sur le clavier. Tout est tellement rapide qu'il peut y avoir des erreurs invisibles.</p>


<p>Pourquoi -m 512 (512Mo de ram): prenez une valeur inférieure à votre matériel mais malgré tout proche pour éviter les effets de bord.</p>


<p>Pensez à ajouter les disques dont vous pourriez avoir besoin selon le niveau de boot que vous voudriez tester.</p>


<h3>Lire les logs</h3>

<p>Bon, qemu s'est lancé, le boot a planté, mais vous n'avez pas eu le temps de voit l'erreur.</p>


<p>Commencez par tuer le qemu s'il vous gêne. Puis lisez les logs&nbsp;:</p>
<pre>
$ less -R logs
</pre>


<p>Pourquoi -R&nbsp;? parce que cette option vous permet de ne pas traduire les caractères spéciaux que qemu écrit à travers ncurses et vous permet de voir le contenu des logs tels qu'ils sont apparus à l'écran.</p>


<h3>Mode graphique</h3>

<p>Si vous ne voulez pas de logs ou que vous ne pouvez pas empêcher le mode graphique de se lancer, vous pouvez faire sans. Dans ce cas, à vous de vous connecter à la machine de façon à ce qu'un serveur X soit accessible (par exemple avec ssh -X).</p>


<p>La commande devient alors&nbsp;:</p>
<pre>
$ sync
$ qemu-system-x86_64 -m 512 -hda /root/sda
</pre>


<p><strong>PS</strong>&nbsp;: Et ça marche avec les outils de virtualisation comme xen.</p>

<p></p><p>Si vous avez aimé, il y a aussi : </p><ol><li><a href='http://linux-attitude.fr/post/chargeeeez' rel='bookmark' title='Permanent Link: Chargeeeez !'>Chargeeeez !</a></li>
<li><a href='http://linux-attitude.fr/post/securite-du-processus-de-boot' rel='bookmark' title='Permanent Link: Sécurité du processus de boot'>Sécurité du processus de boot</a></li>
<li><a href='http://linux-attitude.fr/post/presentation-cours' rel='bookmark' title='Permanent Link: Présentation, cours'>Présentation, cours</a></li>
</ol>
	Tags:<a href="http://linux-attitude.fr/tag/planet-libre" title="planet-libre" rel="tag">planet-libre</a>, <a href="http://linux-attitude.fr/tag/savoir-faire" title="Savoir-faire" rel="tag">Savoir-faire</a>, <a href="http://linux-attitude.fr/tag/serveur" title="Serveur" rel="tag">Serveur</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/test-de-bootloader-a-distance/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Raid 10 ou raid 0+1 ?</title>
		<link>http://linux-attitude.fr/post/raid-10-ou-raid-01?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=raid-10-ou-raid-01</link>
		<comments>http://linux-attitude.fr/post/raid-10-ou-raid-01#comments</comments>
		<pubDate>Thu, 20 May 2010 16:31:50 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[Disque]]></category>
		<category><![CDATA[Matériel]]></category>
		<category><![CDATA[Savoir-faire]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/?p=886</guid>
		<description><![CDATA[Niveau&#160;: &#160;&#160;&#160;&#160;&#160; Résumé&#160;: Raid 10, raid 0+1, raid 5, raid 6 Lorsqu'on parle de redondance, de haute disponibilité et de disque, on parle de Raid. J'en ai déjà parlé Voici un petit aperçu des différents types de RAID, le but est ici de trouver les qualités de chacun. Un tableau final récapitule les avantage et [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="e">&nbsp;</span><span class="e">&nbsp;</span><br />
<strong>Résumé</strong>&nbsp;: Raid 10, raid 0+1, raid 5, raid 6</p>


<p>Lorsqu'on parle de redondance, de haute disponibilité et de disque, on parle de Raid. J'en ai <a href="http://linux-attitude.fr/post/que-faire-et-ne-pas-faire-en-raid">déjà parlé</a></p>


<p>Voici un petit aperçu des différents types de RAID, le but est ici de trouver les qualités de chacun. Un tableau final récapitule les avantage et les inconvénients qu'il y a à choisir un type de raid donné.</p>


<h3>Jbod</h3>

<p>Just a bunch of disk, ce n'est pas un raid, le choix de ceux qui veulent pouvoir ajouter des disques bout à bout sans gain de performance.</p>


<p>Contrairement au raid 0 il a un avantage, la perte d'un disque n'empêche pas la récupération des données sur les disques restants par un outil de récupération tel que photorec. En effet, comme les disques sont simplement mis bouts à bout, la plupart des fichiers tiennent intégralement sur un seul des disques. Il est donc possible d'en récupérer le contenu après un crash.</p>


<p>Le jbod se fait avec du LVM sans striping ou avec le driver linear de md.</p>


<h3>Raid 0</h3>

<p>Le choix de ceux qui veulent des performances.</p>


<p>Chaque disque est découpé en bande (stripe) et les bandes sont entrelacées pour donner le disque final. Ce qui donne un gain de performance appréciable puisque les disque peuvent être lus simultanément, même pendant la lecture d'un gros fichier. Et ils peuvent être écrits simultanément pendant les écritures.</p>


<p>Le raid 0 peut être matériel, logiciel avec le driver md de linux ou logiciel avec LVM (avec striping)</p>


<p><span id="more-886"></span></p>


<h3>Raid 1</h3>

<p>Le choix de ceux qui ne veulent pas de pertes.</p>


<p>Tous les disques sont des copies intégrales. L'avantage le plus important est que lors de la perte d'un disque tout fonctionne comme si de rien n'était. On peut donc remplacer ce disque (ou pas :-).</p>


<p>Un autre avantage existe lors des lectures non séquentielles (lors de la lecture de 2 fichiers par exemple), dans ce cas il est possible d'utiliser un disque pour chaque lecture et donc d'accélérer ce type de lecture. Par contre la lecture d'un seul gros fichier n'est pas accélérée (sous linux).</p>


<p>Il n'y a en revanche aucun impact sur l'écriture, c'est le disque le plus lent qui détermine la vitesse d'écriture (la vitesse devrait être à peu près identique pour chacun).</p>


<p>Notez qu'on peut faire du raid 1 avec plus de 2 disques.</p>


<p>Le Raid 1 peut être matériel, logiciel avec le driver md ou logicielle avec LVM (support du miroring), enfin il est possible de faire du raid1 réseau avec drbd.</p>


<h3>Raid 5</h3>

<p>Le choix des économes.</p>


<p>En raid 5 chaque disque est découpé en bande, pour chaque groupe de bandes situées au même endroit des disques, une des bandes est choisie pour contenir des octets de redondance (la différence avec le 4 c'est le choix de la bande). Ainsi ce type de raid peut survivre au crash d'un des disques (la redondance permet de reconstruire la bande manquante), mais pas de plusieurs.</p>


<p>L'avantage du raid 5 est que lorsqu'on a de nombreux disques on économise des disques de redondance en n'en achetant qu'un pour la redondance et les autres pour les données.</p>


<p>Mais le raid 5 est assez limité en performances. La lecture se passe comme pour le raid 1. Par contre l'écriture nécessite la lecture de chacune des bandes d'un groupe pour écrire la bande de données, puis calculer et écrire la bande de redondance. C'est donc très lent, à éviter pour les bases de données actives.</p>


<p>D'autre part, lors du crash d'un disque, toutes bandes des disques doivent être lues pour reconstituer une bande manquante. Ce qui implique des baisses de performances énormes, auxquelles il faut ajouter la baisse de performances due à la reconstruction du disque qu'on va remettre. Comme les disque tournent à fond, il n'est pas rare de voir un autre disque exploser en vol à ce moment là -&gt; fin des données.</p>


<p>Le raid 5 peut être matériel ou logiciel avec le driver md de linux.</p>


<h3>Raid 6</h3>

<p>Le choix des très gros disques.</p>


<p>Le raid 6 fonctionne de la même façon que le raid 5 mais ajoute un deuxième disque de redondance. Ce ne sont pas simplement les données de redondance qui sont dupliquée, mais le calcul qui est différent, toutefois le concept est identique.</p>


<p>Le raid 6 soufre des mêmes inconvénients que le raid 5, il utilise même un disque de plus donc est un peu plus cher, de plus cela provoque une écriture supplémentaire pour chaque groupe de bandes.</p>


<p>Mais le raid 6 résiste au crash de 2 disques, ce qui est intéressant lorsque les disques sont assez gros et que la reconstruction du raid comment à être assez longue (et donc le risque de perte plus gros).</p>


<p>Le raid 6 peut être matériel ou logiciel avec le driver md de linux.</p>


<h3>Raid 10</h3>

<p>Le choix des riches.</p>


<p>Le raid 10 consiste à accumuler plusieurs raid 1 avec du raid 0 pour en augmenter la taille et les performances.</p>


<p>Le raid 10 offre les avantages simultanés du raid 1 et du raid 0. La perte d'un disque n'empêche pas le raid de tourner et l'utilisation de plusieurs disques en striping permet d'augmenter les performances de lectures.</p>


<p>Le seul inconvénient, c'est qu'il coûte deux fois le prix du raid 0.</p>


<p>Il peut se faire en matériel ou logiciel, md ou lvm.</p>


<h3>Raid 0+1</h3>

<p>Le mauvais choix.</p>


<p>Le raid 0+1 consiste à mettre 2 raid 0 en parallèle pour les redonder avec du raid 1. On pourrait croire que c'est la même chose que du raid 10, mais non. Et même si certains veulent vous faire croire que les performances sont meilleures, il n'en est rien.</p>


<p>Mais surtout imaginez un instant la perte d'un disque. Dans ce cas un des raid 0 sous-jacent est perdu. Il faut donc le recréer avec un nouveau disque (ce qui est à peu près instantané puisqu'on le laisse vide), puis reconstruire le raid 1 situé au dessus. Et cette deuxième partie va être longue puisqu'elle doit être faite sur la taille totale du raid 0, contrairement au raid 10 qui ne l'aurait fait que sur la taille totale du disque perdu.</p>


<h3>Petit récapitulatif</h3>

<table>
<tr>
<th>RAID</th>
<th>jbod</th>
<th>0</th>
<th>1</th>
<th>4</th>
</tr>
<tr>
<th>Quand le choisir</th>
<td>Pas d'argent, pertes partielles acceptables</td>
<td>Besoin de performances mais pertes totales acceptées</td>
<td>Pour éviter les pertes</td>
<td>Jamais</td>
</tr>
<tr>
<th>Inconvénients</th>
<td><ul><li>Pas de redondance</li><li>Pas de gain de performances</li></ul></td>
<td><ul><li>Pas de redondance</li></ul></td>
<td><ul><li>Peu de gains de performances</li><li>La taille ne peut dépasser celle du plus petit disque</li></ul></td>
<td><ul><li>Moins bon que raid 5 dans tous les domaines</li></ul></td>
</tr>
<tr>
<th>Avantages</th>
<td><ul><li>Possibilité de récupérer une parties de données après crash</li><li>Possibilité d'étendre un disque</li></ul></td>
<td><ul><li>Performances en lecture accrues</li></ul></td>
<td><ul><li>Résistance à la perte de N-1 disque</li><li>Légère amélioration des performances en lecture.</li></ul></td>
<td><ul><li>Ceux du raid 5</li></ul></td>
</tr>
</table>


<table>
<tr>
<th>RAID</th>
<th>5</th>
<th>6</th>
<th>10</th>
<th>0+1</th>
</tr>
<tr>
<th>Quand le choisir</th>
<td>Pour le prix</td>
<td>Pour les gros raid</td>
<td>Pour la sécurité et les performances</td>
<td>Jamais</td>
</tr>
<tr>
<th>Inconvénients</th>
<td><ul><li>Performances faibles en écriture</li><li>Performances en lecture faibles après un crash</li></ul></td>
<td><ul><li>Performances faibles en écriture</li><li>Performances en lecture faibles après un crash</li></ul></td>
<td><ul><li>Cher</li></ul></td>
<td><ul><li>Cher</li><li>reconstruction très longue</li></ul></td>
</tr>
<tr>
<th>Avantages</th>
<td><ul><li>Résistance à la perte d'un disque</li><li>Coût moindre par rapport aux autres raid</li></ul></td>
<td><ul><li>Résistance à la perte de 2 disques</li><li>Coût moindre par rapport aux autres raid sauf le 5</li></ul></td>
<td><ul><li>Résistance à la perte d'un certain nombre de disque</li><li>Performances en lecture accrues</li></ul></td>
<td><ul><li>Ceux du raid 10</li></ul></td>
</tr>
</table>


<p></p><p>Si vous avez aimé, il y a aussi : </p><ol><li><a href='http://linux-attitude.fr/post/que-faire-et-ne-pas-faire-en-raid' rel='bookmark' title='Permanent Link: Que faire et ne pas faire en raid'>Que faire et ne pas faire en raid</a></li>
<li><a href='http://linux-attitude.fr/post/lavomatic' rel='bookmark' title='Permanent Link: LaVoMatic'>LaVoMatic</a></li>
<li><a href='http://linux-attitude.fr/post/lavenir-du-disque' rel='bookmark' title='Permanent Link: L&#8217;avenir du disque'>L&#8217;avenir du disque</a></li>
</ol>
	Tags:<a href="http://linux-attitude.fr/tag/disque" title="Disque" rel="tag">Disque</a>, <a href="http://linux-attitude.fr/tag/materiel" title="Matériel" rel="tag">Matériel</a>, <a href="http://linux-attitude.fr/tag/savoir-faire" title="Savoir-faire" rel="tag">Savoir-faire</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/raid-10-ou-raid-01/feed</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Sécurité du processus de boot</title>
		<link>http://linux-attitude.fr/post/securite-du-processus-de-boot?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=securite-du-processus-de-boot</link>
		<comments>http://linux-attitude.fr/post/securite-du-processus-de-boot#comments</comments>
		<pubDate>Wed, 14 Apr 2010 16:57:46 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[Matériel]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[Savoir-faire]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[Théorie]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/?p=703</guid>
		<description><![CDATA[Niveau&#160;: &#160;&#160;&#160;&#160;&#160; Résumé&#160;: Maintenant que nous connaissons le processus de boot, si on examinait ce processus d'un point de vue de la sécurité&#160;! Lorsqu'on parle de sécurité, il faut d'abord savoir dans quel cas on se positionne et de quoi on cherche à se prémunir. Ici, je considère que le système lui-même est sécurisé. Je [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="e">&nbsp;</span><span class="e">&nbsp;</span><span class="e">&nbsp;</span><br />
<strong>Résumé</strong>&nbsp;:</p>


<p>Maintenant que nous connaissons le <a href="http://linux-attitude.fr/post/processus-de-boot">processus de boot</a>, si on examinait ce processus d'un point de vue de la sécurité&nbsp;!</p>


<p>Lorsqu'on parle de sécurité, il faut d'abord savoir dans quel cas on se positionne et de quoi on cherche à se prémunir. Ici, je considère que le système lui-même est sécurisé. Je suppose que l'attaquant est devant la machine et cherche un accès root.</p>


<p>On considère que chaque élément est sécurisé pour ce qui est de ses propres fonctionnalités, ce qui veut dire que si le bootloader est protégé par mot de passe, il n'y a pas de faille dans le bootloader lui-même permettant d'outrepasser ce mot de passe. Nous nous attacherons donc à chercher ce qui peut être détourné dans le flux d'exécution en entrée et en sortie de chaque élément.</p>


<p>Je vais commencer par la fin, du plus facile au plus difficile.</p>


<h3>rc</h3>

<p>Rc est lancé par init et ne prend ses paramètres que de init. Ceux-ci sont fixés en dur dans <a href="http://linux-attitude.fr/post/configuration-de-init">/etc/inittab</a>. Son démarrage ne peut donc être détourné que d'une façon&nbsp;: par modification du contenu du disque. <em>GoTo partition /</em></p>


<p>Parmi ces paramètres il y a le paramètre 1 qui lance rc dans le runlevel 1, ce qui dans la plupart des cas se termine par un sulogin. Ouf on est protégé par le mot de passe root.</p>


<p>Mais vérifiez bien, dans certains cas il se termine par un simple shell et donc réussir à passer un tel paramètre permettrait à l'attaquant un accès root à votre machine.</p>


<p>Pour passer 1 en paramètre <em>GoTo init</em></p>


<p><span id="more-703"></span></p>


<h3>init</h3>

<p>Init est lancé par le noyau après lecture de la racine. Il lit sa configuration dans /etc/inittab. Il peut donc être détourné par modification du disque&nbsp;: <em>GoTo partition /</em></p>


<p>Parmi les paramètres qu'on peut lui passer il y a 1 et S, 1 renvoie au problème ci-dessus et S lance lui-même sulogin, donc même vérification. Ces paramètres viennent du noyau&nbsp;: <em>GoTo noyau</em></p>


<p>Init est un binaire choisi par le noyau, or il est possible de dire au noyau de changer d'init à travers le bon paramètre. Par exemple, je peux ajouter init=/bin/sh aux paramètres du noyau pour qu'init ne soit jamais lancé qu'un shell apparaisse à sa place. Ça y est je suis root&nbsp;! C'est d'ailleurs la technique pour changer de mot de passe root lorsque vous l'avez perdu.</p>


<p>Pour changer d'init <em>GoTo noyau</em>.</p>


<p>Init peut aussi être lancé par initrd, il souffre dans ce cas exactement des mêmes problèmes que lorsqu'il est lancé par le noyau&nbsp;: <em>GoTo initrd</em>.</p>


<p><strong>Note upstart, initrdng...</strong>&nbsp;: <br />
Il se peut (et ca va être de plus en plus courant) qu'init ou rc soit remplacé par autre chose, type upstart. Dans ce cas seul les noms des paramètres et le format des fichiers change. Mais les impacts sont exactement les mêmes.</p>


<h3>Initrd</h3>

<p>Initrd prend ses paramètres de la ligne de commande du noyau, mais généralement (il y a plein d'initrd différents) ils sont passés tels quels à init.</p>


<p>D'autre part initrd peut être chargé par 2 moyens, j'ai décrit le bootloader comme un moyen mais le noyau peut aussi charger lui-même l'initrd si on lui demande (avec le paramètre initrd=). On peut donc détourner son chargement par plusieurs moyens&nbsp;: <em>GoTo noyau</em>, <em>GoTo bootloader</em>.</p>


<p>Il est aussi possible de modifier directement l'initrd, par exemple lors d'une <a href="http://linux-attitude.fr/post/Reinstallation-distante">réinstallation distante</a>. Celui-ci contenant tout ce qu'on veut, modifier son contenu permet de lancer n'importe que processus ... <em>GoTo partition /boot</em></p>


<h3>Noyau</h3>

<p>Le noyau en lui-même ne vous rend pas root mais rien ne vous empêche d'y faire une modification pour qu'il vous fasse <a href="http://en.wikipedia.org/wiki/Rootkit" hreflang="en">root</a> une fois le système chargé.</p>


<p>Le noyau est chargé depuis la partition /boot donc une modification de cette partition et c'est gagné&nbsp;: <em>GoTo partition /boot</em></p>


<p>Le noyau prend ses paramètres du bootloader, parmi ceux-ci de nombreux paramètres permettent de détourner le système&nbsp;: root= init= initrd= et surement bien d'autres. <em>GoTo bootloader</em></p>



<h3>Partition /</h3>

<p>Jusque là, nous n'avons évoqué que les risques mais pas encore de faille. C'est parce qu'aucune interférence de l'utilisateur n'a été possible, tout est automatisé. Mais ça va changer.</p>


<p>Lors du montage de la racine, il y a une interférence possible&nbsp;: le disque contenant / peut avoir été modifié, voire remplacé, pour modifier /etc/inittab, /sbin/init, /etc/init.d/rc ou toute autre chose.</p>


<p>Pour éviter ce problème, il y a deux possibilités&nbsp;:</p>
<ul>
<li>mettre un cadenas sur la machine pour garantir l'intégrité physique du disque</li>
<li>chiffrer le disque</li>
</ul>

<p>Dans le premier cas, le problème est remonté aux autres couches pour garantir l'intégrité logique et éviter qu'on réussisse à booter sur un autre OS pour modifier le disque. <em>GoTo bootloader</em>.</p>


<p>Dans le deuxième cas, le chiffrement (par exemple avec <a href="http://linux-attitude.fr/post/faire-du-chiffre">luks</a> ou <a href="http://www.truecrypt.org/" hreflang="en">truecrypt</a>) doit être assuré par une clé.</p>
<ul>
<li>si cette clé est sur la machine et son mot de passe aussi&nbsp;: elle est dans un élément de boot (initrd, partition de boot ...) on reporte le problème <em>GoTo partition /boot</em></li>
<li>si cette clé ou son mot de passe n'est pas sur la machine (carte à puce, mot de passe, clé usb ...) alors il y a besoin d'un personne présente à chaque boot ...</li>
<li>le chiffrement peut aussi être assuré <a href="http://www.thinkwiki.org/wiki/Full_Disk_Encryption_%28FDE%29" hreflang="en">par une puce</a> (TPM) qui ne quitte pas la machine, auquel cas, on garanti que le disque ne quittera pas la machine pour être lu ou modifié (mais pas de garantie contre le formatage), par contre il peut être lu sur place par un autre OS.</li>
</ul>

<p>Dans tous les cas, seul le démarrage post-noyau est préservé, pour le reste <em>GoTo bootloader</em>.</p>



<h3>bootloader</h3>

<p>Le bootloader est la source de tous les maux. C'est en effet par lui que l'utilisateur a tout loisir de modifier des paramètres de démarrage.</p>


<p>Le bootloader passe ses paramètres au noyau qui les passe à l'initrd qui les passe à init. Ces paramètres viennent de la configuration du bootloader mais pour un certain nombre de bootloader ils peuvent être directement demandés à l'utilisateur. Dans ce cas il y a moyen d'interdire cette modification à travers un mot de passe. Par exemple <a href="http://www.gnu.org/software/grub/manual/html_node/Security.html" hreflang="en">grub</a>.</p>


<p>Le bootloader charge sa configuration puis choisit et charge le noyau et l'initrd, tout ceci depuis la partition de boot. Dans tous les cas il doit lire une version non chiffrée, ce qui interdit le chiffrement de cette partition.</p>


<p>Pire, le bootloader est incapable de savoir que le disque n'a pas changé. Donc un simple ajout de disque permet de le faire booter sur un noyau/initrd différent.</p>


<p>Vous ne pouvez presque rien y faire: <em>GoTo partition /boot</em>.</p>


<p>Bon en supposant qu'il n'y a pas de problème, le bootloader est chargé par le bios, il peut donc être détourné&nbsp;: <em>GoTo Bios</em>.</p>


<h3>Partition /boot</h3>

<p>J'inclue dans la définition de la partition de boot tout ce qui contient la configuration du bootloader, le bootloader lui-même, le noyau et l'initrd, même si ils peuvent être physiquement à des endroits différents.
Protéger la partition de boot est très complexe, car tout doit être accessible en clair depuis des outils ayant des fonctionnalités très restreintes.</p>


<p>Les possibilités sont&nbsp;:</p>
<ul>
<li>sceau physique sur la machine</li>
<li>TPM</li>
</ul>

<p>Mettre un gros cadenas sur la machine permet d'éviter une lecture ou une modification de /boot. Mais il on ne se prémunit pas d'une personne un peu patiente avec un accès complet à la machine.</p>


<p>La dernière solution, complexe à mettre en place et sans garantie absolue est d'utiliser une puce TPM qui va vérifier (<a href="http://domino.research.ibm.com/comm/research_people.nsf/pages/sailer.ima.html" hreflang="en">mesurer</a>) le <a href="http://ko.sourceforge.jp/projects/openpts/wiki/GRUB-IMA" hreflang="en">bootloader</a> à chaque étape de son chargement, puis vérifier chaque élément que le bootloader charge avant de lancer le noyau.</p>


<h3>Bios</h3>

<p>Le bios s'exécute tout seul depuis lui-même, il se charge puis lis ses paramètres. Parmi ces paramètres il y a la séquence de boot, qui peut elle-même être modifiée par l'utilisateur.</p>


<p>Il est donc possible, voire facile de dire au bios de booter sur une clé USB et de prendre le contrôle du disque et donc de la machine. Pour éviter ce cas de figure il est possible de mettre un mot de passe au bios. Ainsi on est sûr de booter sur le bon disque, mais seulement s'il y a un cadenas sur la machine puisque le bios ne vérifie pas que le disque n'a pas été remplacé.</p>


<p><em>GoTo Matériel</em>.</p>


<h3>Matériel</h3>

<p>Il est possible de changer le bios lui-même. Et ce de plusieurs façons. Si c'est un flash, il est possible de le remplacer logiciellement, si c'est une rom il est possible de la remplacer matériellement.</p>


<p>Et enfin le plus simple pour remplacer le bios est de remplacer la carte mère. Hop ni vu ni connu ...</p>


<p>Pour se protéger de cela&nbsp;? Le cadenas ... ou la puce TPM, dont la mise en place est toujours très complexe et non garantie.</p>



<h2>Conclusion</h2>

<p>Résumons-nous car cet article commence à être un peu long.
Différencions les cas dont on veut se protéger.</p>


<h3>Accès réseau</h3>

<p>Si l'attaquant n'a accès à la machine que par le réseau, on est tranquille pour ce qui est de la séquence de boot&nbsp;: No problemo.</p>


<h3>Accès KVM</h3>

<p>Si l'attaquant n'a accès à la machine que par <a href="http://fr.wikipedia.org/wiki/Commutateur_%C3%A9cran-clavier-souris" hreflang="fr">KVM</a> (pas de possibilité de toucher aux périphériques). Mettre un mot de passe sur le bootloader, le bios et vérifier que le mode rescue demande le mot de passe root devrait suffire. En effet les seul moyen d'attaque sont les paramètres de lancement du système.</p>


<p>N'oubliez pas que le simple accès KVM permet des choses comme le reboot via les <a href="http://linux-attitude.fr/post/Les-mains-dans-la-noyau">magic keys</a></p>


<h3>Accès cadenassé</h3>

<p>Si on suppose que l'attaquant peut apporter un CD ou une clé usb sur le système, paramétrer le bios pour booter sur un disque et y mettre un mot de passe est un moyen simple à mettre en place pour éviter le boot sur un autre système.</p>


<p>Mais attention, il ne faut pas que l'utilisateur puisse ouvrir la machine, il pourrait réinitialiser le bios.</p>


<h3>Accès au disque sans droit de boot</h3>

<p>A partir du moment où l'attaquant a accès au disque c'est presque foutu. Si l'attaquant n'est pas une personne autorisée à booter la machine, il est possible de chiffrer le disque avec une clé qui ne se trouve pas sur le disque. Il faudra alors la rentrer à chaque démarrage. L'attaquant ne disposant pas de cette clé, il me pourra ni lire ni modifier les données où le système. Mais c'est déjà une solution assez contraignante.</p>


<p>D'autant plus que pour être complète cette solution doit garantir le noyau et l'éventuel initrd sur lequel on boote et donc vérifier soi même à chaque boot qu'on utilise une partition de boot non modifiée.</p>


<p>On en arrive au dernier cas ...</p>


<h3>Accès complet</h3>

<p>Lorsque l'attaquant a un accès complet à la machine, il n'existe qu'un moyen de se protéger (et encore)&nbsp;: la puce TPM.</p>


<p>Elle permet de&nbsp;:</p>
<ul>
<li>protéger le bios d'un changement</li>
<li>protéger le bootloader d'un changement</li>
<li>protéger le noyau d'un changement</li>
<li>protéger le contenu du disque d'un changement</li>
</ul>

<p>Mais tout cela est compliqué et nécessiterait un autre article que je ne suis pas encore prêt à faire, je n'ai même pas de puce TPM chez moi.</p>


<p><strong>PS :</strong> Notez une dernière chose que je n'ai pas abordé, le chiffrement des données. Le chiffrement du disque contenant les données (/home et /srv selon vos besoins) devient obligatoire dès qu'on prévoit qu'il y aura un accès physique. Il doit de préférence se faire avec un moyen propre à l'utilisateur (mot de passe / clé / carte à puce ...) pour éviter les attaques à travers le boot de l'OS.</p>


<p><strong>PPS :</strong> Considérez qu'a partir du moment où quelqu'un a un accès physique à votre machine c'est mort.</p>


<p><strong>PPPS :</strong> Sauf si votre machine est une carte à puce.</p>


<p><strong>PPPPS :</strong> Et encore ...</p>


<p>Bon courage&nbsp;!</p>

<p></p><p>Si vous avez aimé, il y a aussi : </p><ol><li><a href='http://linux-attitude.fr/post/processus-de-boot' rel='bookmark' title='Permanent Link: Processus de boot'>Processus de boot</a></li>
<li><a href='http://linux-attitude.fr/post/mesurer-le-temps-de-boot' rel='bookmark' title='Permanent Link: Mesurer le temps de boot'>Mesurer le temps de boot</a></li>
<li><a href='http://linux-attitude.fr/post/reinstallation-distante' rel='bookmark' title='Permanent Link: Réinstallation distante'>Réinstallation distante</a></li>
</ol>
	Tags:<a href="http://linux-attitude.fr/tag/materiel" title="Matériel" rel="tag">Matériel</a>, <a href="http://linux-attitude.fr/tag/planet-libre" title="planet-libre" rel="tag">planet-libre</a>, <a href="http://linux-attitude.fr/tag/savoir-faire" title="Savoir-faire" rel="tag">Savoir-faire</a>, <a href="http://linux-attitude.fr/tag/securite" title="Sécurité" rel="tag">Sécurité</a>, <a href="http://linux-attitude.fr/tag/theorie" title="Théorie" rel="tag">Théorie</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/securite-du-processus-de-boot/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced (User agent is rejected)
Database Caching 24/68 queries in 0.213 seconds using apc
Object Caching 1858/1885 objects using apc
Content Delivery Network via N/A

Served from: linux-attitude.fr @ 2012-05-23 20:29:11 -->
