<?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; Système</title>
	<atom:link href="http://linux-attitude.fr/tag/systeme/feed" rel="self" type="application/rss+xml" />
	<link>http://linux-attitude.fr</link>
	<description>Le libre est un état d&#039;esprit</description>
	<lastBuildDate>Mon, 06 Feb 2012 08:01:04 +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>Login dans un chroot</title>
		<link>http://linux-attitude.fr/post/login-dans-un-chroot?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=login-dans-un-chroot</link>
		<comments>http://linux-attitude.fr/post/login-dans-un-chroot#comments</comments>
		<pubDate>Tue, 17 May 2011 16:14:19 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[Interface graphique]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[planete-libre]]></category>
		<category><![CDATA[Système]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/?p=1353</guid>
		<description><![CDATA[Niveau&#160;: &#160;&#160;&#160;&#160;&#160; Résumé&#160;: /etc/inittab&#160;; /etc/gdm.conf&#160;; /etc/sshd.conf Pour ceux qui voudraient essayer le parachutisme, je vous le conseille, c'est très fort&#160;! Par contre ça vous empêche d'écrire des articles ... Vous venez de faire un chroot et vous voulez pouvoir vous connecter dessus comme s'il s'agissait de votre machine locale ? Pas de panique, c'est tout [...]]]></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;: /etc/inittab&nbsp;; /etc/gdm.conf&nbsp;; /etc/sshd.conf</p>


<p>Pour ceux qui voudraient essayer le parachutisme, je vous le conseille, c'est très fort&nbsp;! Par contre ça vous empêche d'écrire des articles ...</p>


<p>Vous venez de faire un chroot et vous voulez pouvoir vous connecter dessus comme s'il s'agissait de votre machine locale ?<br />
Pas de panique, c'est tout simple.</p>


<p>Pour cela nous allons regarder 3 méthodes différentes de connexion à votre chroot&nbsp;: le terminal local, ssh et l'environnement graphique. Mais avant tout préparons le chroot à ressembler à une distribution normale.</p>

<pre>
$ mount --bind /dev $CHROOT_BASE/dev
$ mount --bind /proc $CHROOT_BASE/proc
$ mount --bind /sys $CHROOT_BASE/sys
</pre>


<h3>Terminal local</h3>


<p>Pour se connecter en local à votre machine, vous utilisez les consoles disponibles (alt-Fx ou ctrl-alt-Fx si vous êtes en mode graphique). Vous en avez 6 à disposition.</p>


<p>Pour faire simple, nous allons juste faire en sorte que les consoles  4 à 6 redirigent dans le chroot tandis que les 1 à 3 resteront dédiées à la machine principale.</p>


<p>Il suffit de modifier /etc/inittab&nbsp;:</p>
<pre>
# /etc/inittab
1:2345:respawn:/sbin/getty tty1
2:2345:respawn:/sbin/getty tty2
3:2345:respawn:/sbin/getty tty3
4:2345:respawn:chroot &lt;CHROOT_BASE&gt; /sbin/getty tty4
5:2345:respawn:chroot &lt;CHROOT_BASE&gt; /sbin/getty tty5
6:2345:respawn:chroot &lt;CHROOT_BASE&gt; /sbin/getty tty6
</pre>


<p>Et là, soit vous redémarrez (bof on n'est pas sous windows) soit vous forcez init à relire sa configuration&nbsp;:
<span id="more-1353"></span></p>
<pre>
# en root
$ telinit q
$ pkill getty
</pre>


<p>Et maintenant passez à la console 4 (ctrl-F4) et vous pouvez vous connecter avec votre utilisateur intérieur au chroot.</p>


<h3>SSH</h3>

<p>Si vous vous connectez à votre machine en ssh, vous pouvez vouloir faire de même pour votre chroot.</p>


<p>Pour ce faire, vous pouvez lancer un service ssh à l'intérieur du chroot.
Tout simplement&nbsp;:</p>
<pre>
$ chroot $CHROOT_BASE
$ apt-get install openssh-server
</pre>


<p>Par contre vous ne pouvez pas laisser ssh tourner sur le même port que le ssh qui tourne déjà. Utilisez donc un autre port, par exemple le 1022&nbsp;:</p>
<pre>
$ vi $CHROOT_BASE/etc/ssh/sshd_config
&gt; Port 1022
</pre>


<p>Puis lancez ssh dans le chroot&nbsp;:</p>
<pre>
$ chroot $CHROOT_BASE /etc/init.d/ssh restart
</pre>


<p>Vous pouvez maintenant vous connecter directement au chroot&nbsp;:</p>
<pre>
$ ssh -p 1022 user@leserveur.com 
</pre>



<h3>GDM</h3>

<p>Maintenant si votre habitude est d'avoir un environnement de bureau comme gnome, il faut faire pareil pour lui.</p>


<p>Tout passe par le login manager. Je prends l'exemple de GDM, mais vous pouvez faire la même chose avec KDM.</p>


<p>Tout d'abord, vous devez avoir un gdm d'installé dans le chroot, donc un environnement graphique minimal.</p>


<p>Une fois installé dans le chroot, par exemple avec&nbsp;:</p>
<pre>
$ chroot $CHROOT_BASE apt-get install gnome
</pre>


<p>Éditez le fichier de configuration de gdm $CHROOT_BASE/etc/gdm/gdm.conf&nbsp;:</p>
<pre>
[daemon]
# ceci devrait être inutile, mais on ne sait jamais
FirstVT=8

[server]
0=Standard device=/dev/console
</pre>


<p>Relancez gdm dans le chroot&nbsp;:</p>
<pre>
$ chroot $CHROOT_BASE /etc/init.d/gdm restart
</pre>


<p>Et voilà, rendez-vous sur la console 8 (ctrl-alt-F8) pour obtenir un  login graphique dans le chroot. Sur la console 7 (ctrl-alt-F7) le login original est toujours disponible.</p>

<p></p><p>Si vous avez aimé, il y a aussi : </p><ol><li><a href='http://linux-attitude.fr/post/configuration-de-init' rel='bookmark' title='Permanent Link: Configuration de init'>Configuration de init</a></li>
<li><a href='http://linux-attitude.fr/post/chroot' rel='bookmark' title='Permanent Link: Chroot'>Chroot</a></li>
<li><a href='http://linux-attitude.fr/post/chroot-toujours' rel='bookmark' title='Permanent Link: Chroot toujours'>Chroot toujours</a></li>
</ol>
	Tags:<a href="http://linux-attitude.fr/tag/interface-graphique" title="Interface graphique" rel="tag">Interface graphique</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/planete-libre" title="planete-libre" rel="tag">planete-libre</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/login-dans-un-chroot/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Root d&#8217;android</title>
		<link>http://linux-attitude.fr/post/root-android?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=root-android</link>
		<comments>http://linux-attitude.fr/post/root-android#comments</comments>
		<pubDate>Mon, 02 May 2011 16:14:05 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Commande]]></category>
		<category><![CDATA[Système]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/?p=1335</guid>
		<description><![CDATA[Correction &#160;: j'ai modifié cet article car le système pour rendre le rootage permanent ne fonctionnait pas&#160;! Niveau&#160;: &#160;&#160;&#160;&#160;&#160; Résumé&#160;: adb shell Il y a peu je me suis offert un téléphone android. Devinez quoi ... c'est un linux (pas GNU pour une fois, plutôt un dalvik/linux). Seule ombre au programme, je ne suis pas [...]]]></description>
			<content:encoded><![CDATA[<p><strong> Correction </strong>&nbsp;: j'ai modifié cet article car le système pour rendre le rootage permanent ne fonctionnait pas&nbsp;!</p>


<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;: adb shell</p>



<p>Il y a peu je me suis offert un téléphone android.
Devinez quoi ... c'est un linux (pas GNU pour une fois, plutôt un dalvik/linux).</p>


<p>Seule ombre au programme, je ne suis pas root dessus. C'est pas très fair play de la part du vendeur sachant que le téléphone m'appartient. Comment faire pour supprimer les applications installées par le fabriquant et qui me cassent les *** à se lancer sans me demander mon avis&nbsp;?</p>


<p>Ma première mission est donc de devenir root.</p>


<p>Les habitués des OS de bureau auront l'idée de toucher au bootloader pendant qu'il boote. Bonne idée, mais sur une telle machine le bootloader est assez sobre, et plutôt protégé, ne parlons pas du bios. J'ai donc ignoré cette technique pour passer à une méthode plus courantes pour les bidouilleurs de tout poil&nbsp;: exploiter une faille de sécurité.</p>


<p>C'est donc grâce aux failles de sécurité que je vais avoir le droit d'accéder au système de ma propre machine&nbsp;! Autrement dit, c'est parce que le fabriquant protège mal le système qu'il m'a vendu que mes droits de consommateur sont respectés ...</p>


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


<h3>Les bases</h3>

<p>Passons aux bases du téléphone, c'est un linux, mais il ne faut pas s'attendre à avoir tous les outils en ligne de commande
auxquels vous êtes habitués. Pour obtenir un shell utilisateur simple (ça vous avez le droit)&nbsp;:</p>
<ul>
<li>installer le <a href="http://developer.android.com/sdk/index.html" hreflang="en">sdk android</a> (une simple extraction)</li>
<li>aller dans les paramètres / application / développement et activer le débogage USB</li>
<li>branchez le câble</li>
<li>sur le pc dans sdk/platform-tools lancez ./adb devices, votre téléphone doit être listé sinon il y a un problème</li>
<li>tapez ./adb shell et hop vous êtes sur votre téléphone</li>
</ul>

<p>Là on est sur un terrain presque connu&nbsp;: un shell, qui tourne avec l'utilisateur shell.
Il est limité, mais on s'y fait. Par contre l'arborescence est inhabituelle. Je vous laisse explorer ... Pour mémoire, voici les répertoires à la racine&nbsp;:</p>
<pre>
/acct        # accounting
/bin         # comme unix
/cache       # contenu temporaire
/config      # vide chez moi
/d           # debug
/data        # /var d'unix
/dev         # comme unix
/etc         # comme unix
/init        # comme unix
/init.rc     # comme unix
/misc        # vide chez moi
/mnt         # comme unix
/proc        # comme unix
/root        # comme unix
/sbin        # comme unix
/sdcard      # partition fat visible aux utilisateurs
/sys         # comme unix
/system      # partition readonly contenant le système android
/usbdisk     # vide chez moi
</pre>


<p>Les android étant personnalisés par le constructeur, votre version variera nécessairement.</p>


<h3>Les failles (pour passer root)</h3>

<p>Maintenant on veut passer de shell à root. Il est temps de passer du côté hacking de la force. Ceux qui se sentent l'âme d'un hacker expérimenté peuvent chercher eux-même les failles dans le système. Les autres vont tenter les 2 ou 3 failles connues avec les exploits associés&nbsp;:</p>
<ul>
<li>dépôt d'un fichier suid root exécutable, nommé su (il parait que ça marche sur certaines machines, je ne vois pas comment ...)</li>
<li>exploid</li>
<li>rageagainstthecage</li>
<li>psneuter</li>
</ul>

<p>Le binaire et les source de ces exploits sont <a href="http://linux-attitude.fr/public/Code/rootkit.tgz">disponibles ici</a>.</p>


<p>En général il s'agit de le mettre dans un répertoire inscriptible et permettant les exécutables puis de le lancer. Il semblerait que /data/local/tmp soit disponible un peu partout pour ça.</p>


<p>Dans mon cas (optimus 2X) c'est psneuter qui fonctionne. Pour les autres, dites moi ce qui marche chez vous, je n'ai pas assez d'argent pour tester tous les android :)</p>
<pre>
$ ./adb push psneuter /data/local/tmp
$ ./adb shell
$ chmod 555 /data/local/tmp/psneuter 
$ /data/local/tmp/psneuter 
</pre>


<p>On attend, on relance un adb shell et miracle on est root&nbsp;!</p>


<h3>Busybox</h3>


<p>Maintenant installons un environnement un peu plus user-friendly&nbsp;:</p>
<ul>
<li>télécharger <a href="http://benno.id.au/blog/2007/11/14/android-busybox" hreflang="en">busybox</a></li>
<li>installer busybox&nbsp;:</li>
</ul>
<pre>
$ ./adb push busybox /data/local/tmp
$ ./adb shell
$ chmod 555 /data/local/tmp/busybox
$ mkdir /data/busybox
$ /data/local/tmp/busybox --install
$ export PATH=/data/busybox:$PATH 
</pre>


<p>Et voila&nbsp;! Une vraie ligne de commande sur notre petite machine.
On peut maintenant découvrir l'os et faire joujou comme on veut.</p>



<h3>Rendons tout ça permanent</h3>


<p>N'ayant pas trouvé de su compilé qui marche sur mon android et ayant la flemme de compiler moi-même, j'ai fait avec les moyens du bord.
Ma méthode d'origine était de mettre en place un shell setuid. Malheureusement, le shell vérifie
que sont uid correspond à son euid et si ce n'est pas le cas il revient en arrière. J'ai été abusé
par le fait qu'il affiche tout de même un #. Ce comportement, naturel pour un script ne l'est pas nécessairement
pour un shell interactif mais c'est un fait.</p>


<p>J'ai donc fait avec les moyens fournis par busybox&nbsp;:</p>

<pre>
$ mount -o remount,rw /system
$ mkdir /system/bb       # /system/bin/su existe déjà
$ cp /data/busybox/su /system/bb
$ chmod 4550 /system/bb/su
$ echo 'root::0:' &gt; /etc/group # /etc est dans /system
$ echo 'root::0:0:root:/root:/system/bin/sh' &gt; /etc/passwd
$ passwd # si vous voulez un vrai mot de passe
$ mount -o remount,ro  //system # retour à la normale
</pre>


<p>Après le prochain reboot, pour devenir root (avec un mot de passe)&nbsp;:</p>
<pre>
$ ./adb shell
$ /system/bin/su
</pre>


<p><strong>Note</strong>&nbsp;: Revenir en arrière est l'affaire de quelques suppression (/data/busybox, /system/bin/su, /etc/passwd et /etc/group).
Vous n'avez donc rien fait de violent à votre téléphone, vous avez maitrisé ce que vous avez fait et c'est presque invisible.</p>


<p><strong>Sécurité</strong>&nbsp;: A tous ceux qui rootent leur android en passant par une application toute faite, savez-vous ce que fait cette
application dans votre dos&nbsp;? Ne fait-elle pas autre chose que vous faire passer root&nbsp;? Savez-vous qu'elle installe un binaire su
permettant à n'importe quelle application (et pas seulement SuperUser.apk) de passer root si elle connait l'existence de ce binaire ...</p>


<p>On me dit que lors de son premier lancement SuperUser.apk se met lui-même en setuid et enlève le setuid du binaire su.
Ce qui du coup vous retire le root avec adb.</p>


<p><strong>PS</strong>&nbsp;: Message personnel à Bob Morane, j'ai rien compris à ta suggestion, dans quelle situation y a-t-il des liens qui se chevauchent&nbsp;?</p>

<p></p><p>Si vous avez aimé, il y a aussi : </p><ol><li><a href='http://linux-attitude.fr/post/une-distribution-gnu-sur-android' rel='bookmark' title='Permanent Link: Une distribution GNU sur android'>Une distribution GNU sur android</a></li>
<li><a href='http://linux-attitude.fr/post/personnalisez-votre-android' rel='bookmark' title='Permanent Link: Personnalisez votre android'>Personnalisez votre android</a></li>
<li><a href='http://linux-attitude.fr/post/espionner-son-android' rel='bookmark' title='Permanent Link: Espionner son android'>Espionner son android</a></li>
</ol>
	Tags:<a href="http://linux-attitude.fr/tag/android-2" title="android" rel="tag">android</a>, <a href="http://linux-attitude.fr/tag/commande" title="Commande" rel="tag">Commande</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/root-android/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Exécution capitale</title>
		<link>http://linux-attitude.fr/post/execution-capitale?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=execution-capitale</link>
		<comments>http://linux-attitude.fr/post/execution-capitale#comments</comments>
		<pubDate>Mon, 28 Mar 2011 16:52:02 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[Commande]]></category>
		<category><![CDATA[Curiosité]]></category>
		<category><![CDATA[Noyau]]></category>
		<category><![CDATA[planete-libre]]></category>
		<category><![CDATA[Système]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/?p=1314</guid>
		<description><![CDATA[Niveau&#160;: &#160;&#160;&#160;&#160;&#160; Résumé&#160;: /proc/sys/fs/binfmt_misc/register Exécution Savez-vous qu'on peut rendre n'importe quel fichier exécutable sous linux&#160;? Bien sûr il suffit de faire un chmod +x, mais le noyau risque de vous envoyer balader si le fichier n'est pas réellement exécutable. Mais je parle ici de rendre exécutable n'importe quel fichier, un jar, un source en C, [...]]]></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;: /proc/sys/fs/binfmt_misc/register</p>



<h3>Exécution</h3>


<p>Savez-vous qu'on peut rendre n'importe quel fichier exécutable sous linux&nbsp;? Bien sûr il suffit de faire un chmod +x, mais le noyau risque de vous envoyer balader si le fichier n'est pas réellement exécutable.</p>


<p>Mais je parle ici de rendre exécutable n'importe quel fichier, un jar, un source en C, un MP3 ...</p>


<p>Mais comment quoi que donc !?</p>


<p>Pour exécuter un fichier, le noyau lit les premiers octets du fichier et vérifie qu'ils correspondent à un format binaire (binfmt) connu.
Il existe un système pour ajouter des formats binaires à ceux déjà supportés dans le noyau (en gros les <a href="http://en.wikipedia.org/wiki/Executable_and_Linkable_Format" hreflang="en">elf</a> et les scripts). Il s'agit du format misc.</p>


<p>Pour savoir si ce format est supporté chez vous, ce qui est très probable, lancez la commande&nbsp;:</p>
<pre>
$ cat /proc/sys/fs/binfmt_misc/status
</pre>


<p>S'il n'est pas supporté, il faut charger le module et monter le répertoire&nbsp;:</p>
<pre>
$ modprobe binfmt_misc
$ mount binfmt_misc -t binfmt_misc /proc/sys/fs/binfmt_misc 
</pre>


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


<h3>C capital</h3>


<p>Maintenant supposons vous vouliez rendre les fichiers .c exécutables. Vous pouvez soit utiliser un de mes <a href="http://linux-attitude.fr/post/usrbingcc-bis">anciens</a> <a href="http://linux-attitude.fr/post/ecrire-un-script-en-c">articles</a> ... soit créer un petit script qui sera appelé à chaque exécution d'un .c&nbsp;:</p>
<pre>
#!/bin/sh
# /usr/local/bin/ccexec
gcc -Wall -o /tmp/cscript.$$ &quot;$1&quot; &amp;&amp; shift &amp;&amp; /tmp/cscript.$$ &quot;$@&quot;
ret=$? ; rm -f /tmp/cscript.$$ ; exit $ret
</pre>


<p>Et de faire en sorte qu'il soit réellement appelé&nbsp;:</p>
<pre>
$ echo ':cfile:E::c::/usr/local/bin/ccexec:' &gt; /proc/sys/fs/binfmt_misc/register
</pre>


<p>Hop un test&nbsp;:</p>
<pre>
#include &lt;stdio.h&gt;
// test.c
int main() {
  printf(&quot;Coucou\n&quot;);
  return 0;
}
</pre>


<p>Et on lance&nbsp;:</p>
<pre>
$ chmod +x test.c
$ ./test.c
&gt; Coucou
</pre>


<p>Yeah !!!</p>


<h3>G tout compris</h3>

<p>Maintenant, passons à l'exécution d'un gzip. Plutôt que de reconnaître le fichier à son extension, ce qui est franchement faible comme méthode nous allons vraiment détecter le type de fichier.</p>


<p>Allons voir la spécification, un fichier gzip se reconnait à ses 2 premiers octets qui doivent valoir 0x1f et 0x8b&nbsp;:</p>
<pre>
$ echo ':gzip:M::\x1f\x8b::/bin/gunzip:' &gt; /proc/sys/fs/binfmt_misc/register
</pre>


<p>Même méthode et ça marche. Notez qu'il est possible d'utiliser n'importe quel champs de bits grâce à une masque et une position de départ, mais seulement dans les 128 premiers octets du fichier.</p>


<p>Enfin, certaines distributions vont vous installer des choses un peu plus utiles comme l'exécution des jar avec java ou celle d'exécutable windows avec wine.</p>


<p>Et pour une spécification plus détaillée de ce qu'il lest possible de mettre dans la ligne d'enregistrement, direction <a href="http://git.kernel.org/gitweb.cgi?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=Documentation/binfmt_misc.txt;hb=HEAD" hreflang="en">la documentation</a></p>


<p><strong>PS</strong>&nbsp;: pour supprimer l'entrée&nbsp;: echo -1 &gt; /proc/sys/fs/binfmt_misc/cfile</p>

<p></p><p>Si vous avez aimé, il y a aussi : </p><ol><li><a href='http://linux-attitude.fr/post/usrbingcc-bis' rel='bookmark' title='Permanent Link: #!/usr/bin/gcc (bis)'>#!/usr/bin/gcc (bis)</a></li>
<li><a href='http://linux-attitude.fr/post/changer-la-priorite-d-execution-des-processus' rel='bookmark' title='Permanent Link: Changer la priorité d&#8217;exécution des processus'>Changer la priorité d&#8217;exécution des processus</a></li>
<li><a href='http://linux-attitude.fr/post/trucs-et-astuces-5' rel='bookmark' title='Permanent Link: Trucs et astuces (5)'>Trucs et astuces (5)</a></li>
</ol>
	Tags:<a href="http://linux-attitude.fr/tag/commande" title="Commande" rel="tag">Commande</a>, <a href="http://linux-attitude.fr/tag/curiosite" title="Curiosité" rel="tag">Curiosité</a>, <a href="http://linux-attitude.fr/tag/noyau" title="Noyau" rel="tag">Noyau</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/systeme" title="Système" rel="tag">Système</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/execution-capitale/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Timezone</title>
		<link>http://linux-attitude.fr/post/timezone?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=timezone</link>
		<comments>http://linux-attitude.fr/post/timezone#comments</comments>
		<pubDate>Fri, 04 Mar 2011 16:18:37 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[planete-libre]]></category>
		<category><![CDATA[Standard]]></category>
		<category><![CDATA[Système]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/?p=1285</guid>
		<description><![CDATA[Niveau&#160;: &#160;&#160;&#160;&#160;&#160; Résumé&#160;: zdump&#160;; zic Le temps est absolu Le temps est quelque chose de sensible. Si mon serveur est en retard il va croire que la personne qui vient de s'authentifier sur mon site essaie de me flouer en me donnant une date invalide. S'il est en avance, il va croire qu'il n'est pas [...]]]></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;: zdump&nbsp;; zic</p>



<h3>Le temps est absolu</h3>


<p>Le temps est quelque chose de sensible. Si mon serveur est en retard il va croire que la personne qui vient de s'authentifier sur mon site essaie de me flouer en me donnant une date invalide. S'il est en avance, il va croire qu'il n'est pas venu depuis longtemps et va le déconnecter.</p>


<p>Il est donc important d'être toujours à l'heure, car l'heure c'est l'heure et quand il est pas encore l'heure c'est pas l'heure et s'il n'est plus l'heure ce n'est toujours pas l'heure. Vous me suivez&nbsp;?</p>


<p>Mais pour une fois je ne vais pas vous parler de l'heure selon NTP, mais l'heure selon Saint Matthieu, enfin presque.</p>


<p>Supposons que, grâce à votre professionnalisme, votre machine soit à l'heure, voire à la seconde, grâce à NTP. Supposons que vous vouliez connaitre cette heure. Que faites-vous&nbsp;? Vous la demandez au noyau (via <a href="http://linux.die.net/man/2/gettimeofday" title="en">time</a> ou <a href="http://linux.die.net/man/2/gettimeofday" hreflang="en">gettimeofday</a>), et il vous la donne en UTC ...</p>


<p>Mais en pratique vous voulez l'heure de chez vous, celle qui dit que le soleil va se coucher dans la belle province. Bien sûr la libc va faire la conversion pour vous (via <a href="http://linux.die.net/man/3/localtime" hreflang="en">localtime</a>, mais voyons comment elle fait.</p>


<h3>Enfin presque</h3>


<p>La date et l'heure s'expriment de plusieurs façons. L'heure UTC est la version "absolue"', c'est à dire qu'elle ne dépend pas des différentes régions de la planète où l'on se place. Mais tous les pays ne l'entendent pas de cette oreille et veulent chacun définir leur heure. Définition qui peut changer dans le temps ...</p>


<p>Pour faire la conversion, il faut donc connaître toutes ces règles.
Heureusement des acharnés on fait ce travail de récupération et les ont déposées dans /usr/share/timezone sur le système de fichier.</p>


<p>Vous croyez qu'il n'y à que 24 fuseaux horaires&nbsp;? Faux il y en a <a href="http://fr.wikipedia.org/wiki/Fuseau_horaire#D.C3.A9nominations_alphab.C3.A9tiques" hreflang="fr">un peu plus</a>. Maintenant comptons les timezone&nbsp;:</p>
<pre>
$ find /usr/share/zoneinfo/ -type f | wc -l
1764
</pre>

<p>Imaginez le temps qu'il a fallu pour compiler ces données ...</p>


<p>Vous constaterez que ce sont des fichiers binaires. La libc les lit directement (pour en savoir un peu plus, <a href="http://linux.die.net/man/5/tzfile" hreflang="en">man tzfile</a> et <a href="http://linux.die.net/man/3/tzset" hreflang="en">man tzset</a>), mais pour nous humains&nbsp;? On utilise zdump</p>
<pre>
$ zdump -v Europe/Paris
</pre>


<p>Vous y verrez les changements d'heure une seconde avant et une seconde après chaque changement. Remarquez qu'il y a plus d'information dans le binaire que dans le dump qui ne fait qu'afficher les dates de saut temporel.</p>


<h3>Pas du tout</h3>


<p>Mais aujourd'hui est un grand jour, je vais faire ma propre nation (<a href="http://fr.wikipedia.org/wiki/Micronation" hreflang="fr">une de plus</a>). J'y édicterai un nouvel horaire, UTC+1,25 et heure d'été en UTC +0,75. Le changement se fera à MON anniversaire.</p>


<p>Il faut donc que je crée un fichier de zone correspondant à mon pays.
Prenons le source suivant&nbsp;:</p>
<pre>
# règles de changement d'heure
Rule peck 2010 max odd Mar 6 4:00 -0:30 -
Rule peck 2010 max odd Sep 6 4:00 0 -
# définition de l'heure standard dans la zone
Zone peck 1:15 peck PCK
</pre>


<p>Et on le compile avec zic&nbsp;:</p>
<pre>
# notez que j'ai récupéré yearistype dans le source de tzdata
# il permet l'usage de odd dans mon fichier de règles
$ /usr/sbin/zic -d . -y &quot;sh yearistype.sh&quot; peck
</pre>


<p>Il suffit maintenant de le déposer dans /usr/share/timezone et voilà ce qu'on peut obtenir&nbsp;:</p>
<pre>
$ TZ=peck LC_TIME=C date
Mon Mar  7 17:48:02 PCK 2011
# notez la différence (UTC+x et PCK)
$ TZ=peck LC_TIME=fr_FR date
lundi 7 mars 2011, 17:48:37 (UTC+0045)
</pre>


<p>Votre timezone perso&nbsp;!</p>


<p>Pour des exemples complets et complexes de zones, vous pouvez regarder le source du paquet tzdata. C'est votre référence, mais je doute que vous ayez à y toucher prochainement&nbsp;!</p>
	Tags:<a href="http://linux-attitude.fr/tag/planete-libre" title="planete-libre" rel="tag">planete-libre</a>, <a href="http://linux-attitude.fr/tag/standard" title="Standard" rel="tag">Standard</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/timezone/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Entropie</title>
		<link>http://linux-attitude.fr/post/entropie?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=entropie</link>
		<comments>http://linux-attitude.fr/post/entropie#comments</comments>
		<pubDate>Thu, 09 Dec 2010 18:05:12 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[Système]]></category>
		<category><![CDATA[Théorie]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/?p=1109</guid>
		<description><![CDATA[Niveau&#160;: &#160;&#160;&#160;&#160;&#160; Résumé&#160;: /dev/random /dev/urandom Quelle différence y a-t-il entre /dev/random et /dev/urandom&#160;? Et d'abord à quoi servent-il&#160;? Aléatoire Qu'est-ce qu'un nombre aléatoire&#160;? C'est un nombre faisant partie d'une série dont on ne peut pas prédire le prochain à partir des nombres précédents de la série. Il existe de nombreuses méthodes pour créer des nombres [...]]]></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;: /dev/random /dev/urandom</p>


<p>Quelle différence y a-t-il entre /dev/random et /dev/urandom&nbsp;?
Et d'abord à quoi servent-il&nbsp;?</p>


<h3>Aléatoire</h3>

<p>Qu'est-ce qu'un nombre aléatoire&nbsp;? C'est un nombre faisant partie d'une série dont on ne peut pas prédire le prochain à partir des nombres précédents de la série.</p>


<p>Il existe de nombreuses méthodes pour créer des nombres aléatoires. Je vous donne la plus mauvaise&nbsp;: rand&nbsp;: i -&gt; 0</p>


<p>Mais il existe aussi des suites moins prévisibles, par exemple prendre le dernier chiffre d'une opération récursive produisant de grands nombres. Voire complètement imprévisible comme utiliser la mesure d'un bruit blanc.</p>


<p>Il existe donc plusieurs niveaux d'"aléatoirité" ou de "prévisibilité". Un bon générateur qui peut par exemple être utilisé en cryptographie est en pratique soit un générateur matériel, soit un générateur basé sur un état interne et une <a href="http://linux-attitude.fr/post/fonction-de-hachage">fonction de hachage</a> forte.</p>


<p>Les générateurs logiciels sont appelés PRNG (pseudo random number generator). Puisqu'un tel algorithme est déterministe, il faut l'initialiser avec des valeurs vraiment aléatoires pour éviter qu'on puis en deviner la sortie en devinant comment il a été initialisé.</p>


<h3>Entropie</h3>

<p>Sous linux il y a deux sources de nombres aléatoires, /dev/random et /dev/urandom.</p>


<p>La première utilise uniquement l'entropie disponible pour fournir des nombres aléatoires et le second est un générateur pseudo aléatoire initialisé avec cette entropie.</p>


<p>Mais qu'est-ce que l'entropie&nbsp;?</p>


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


<p>On y vient, l'entropie est une <strong>quantité de bits</strong> qu'on considère comme <strong>totalement aléatoires</strong>, donc générés par des évènements physiques. Sous linux, lorsqu'on ne dispose pas d'une puce générant ces nombres aléatoires, on utilise des choses comme l'intervalle entre deux interruptions pour créer les bits d'entropie.</p>


<p>Mais alors quel générateur faut-il utiliser&nbsp;?</p>


<p><strong>/dev/urandom</strong> est pseudo aléatoire, très pratique pour la plupart des usages, il permet de générer autant de nombres qu'on veut à un rythme soutenu.</p>


<p><strong>/dev/random</strong> est complètement aléatoire, on ne l'utilise que lorsqu'on en a vraiment besoin, il utilise directement le pool d'entropie et ne donc fournir qu'un nombre limité de bits, il se remplit progressivement mais lentement.</p>


<h3>Il me manque de l'entropie</h3>


<p>Si vous avez besoin de beaucoup de nombres vraiment aléatoires (pour générer de nombreuses clés ssh par exemple), vous allez avoir besoin de beaucoup d'entropie.</p>


<p>Avant de tenter de rajouter de l'entropie, mesurons-la.</p>


<p>Deux méthode pour ca&nbsp;:</p>
<pre>
# pour obtenir l'entropie disponible à un instant t
$ cat /proc/sys/kernel/random/entropy_avail

# pour voir la vitesse de remplissage du pool d'entropie (en le vidant)
$ cat /dev/random | cpipe -ngr -vt &gt; /dev/null
</pre>


<p>C'est là qu'on découvre <strong>cpipe</strong>, petit outil très sympa pour mesurer la bande passante d'un pipe.</p>


<p>Maintenant on peut laisser cette commande tourner en tache de fond et tenter d'ajouter de l'entropie pour trouver la meilleurs méthode. Quelques tests (en root de préférence)</p>
<pre>
$ while true; do cat /boot/vmlinux.gz &gt; /dev/random; done
# -&gt; rien
$ find / &gt; /dev/null
# -&gt; pas mal
$ # déplacer la souris
# -&gt; un peu moins
$ yes # dans un terminal ssh distant
# -&gt; un peu moins
$ ssh  machine distante &quot;cat /dev/zero&quot; &gt; /dev/null
# -&gt; rien
</pre>


<p>Attention, les résultats ne sont pas forcément les mêmes sur une vm.
Conclusion temporaire&nbsp;: les sources d'entropie sont le disque dur (résultat du find) et la souris.</p>


<p>A vous d'en trouver d'autres ...</p>


<p>Bon j'en ai une autre pour vous. En fait il existe une api à base d'ioctl pour ajouter de l'entropie au noyau depuis l'espace utilisateur. Mais il faut faire attention à bien jouter de la vraie entropie et pas une suite de nombres prévisibles.</p>


<p>Pour faire ça, quelqu'un a fait un démon permettant de remplir ces bits avec différentes sources&nbsp;: <a href="http://www.vanheusden.com/aed/" hreflang="en">la carte son</a>, une <a href="http://www.vanheusden.com/ved/" hreflang="en">entrée vidéo</a> ou les variations de <a href="http://www.vanheusden.com/te/" hreflang="en">précision du timer</a> idée originale, n'est-il pas&nbsp;?</p>

<p></p><p>Si vous avez aimé, il y a aussi : </p><ol><li><a href='http://linux-attitude.fr/post/cryptographie' rel='bookmark' title='Permanent Link: Cryptologie'>Cryptologie</a></li>
<li><a href='http://linux-attitude.fr/post/protection-de-cles-grace-aux-demi-bits' rel='bookmark' title='Permanent Link: Protection de clés grâce aux demi-bits'>Protection de clés grâce aux demi-bits</a></li>
<li><a href='http://linux-attitude.fr/post/attache-chroote' rel='bookmark' title='Permanent Link: Attaché chrooté'>Attaché chrooté</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/systeme" title="Système" rel="tag">Système</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/entropie/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Scripting avec pam_exec, notification de connexion</title>
		<link>http://linux-attitude.fr/post/pam_exec?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=pam_exec</link>
		<comments>http://linux-attitude.fr/post/pam_exec#comments</comments>
		<pubDate>Tue, 30 Nov 2010 09:00:35 +0000</pubDate>
		<dc:creator>StalkR</dc:creator>
				<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[pam]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[Système]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/?p=1122</guid>
		<description><![CDATA[Niveau&#160;: &#160;&#160;&#160;&#160;&#160; Résumé&#160;: pam_exec Vous souvenez-vous de PAM (Pluggable Authentication Modules)&#160;? En plus des nombreux modules déjà présentés, on trouve pam_exec qui permet d'exécuter une commande arbitraire. A partir de là on peut faire pas mal de choses, comme par exemple une notification à chaque session ouverte par un utilisateur (connexion ssh, su, sudo, etc.). [...]]]></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;: pam_exec</p>


<p>Vous souvenez-vous de <strong>PAM</strong> (<em>Pluggable Authentication Modules</em>)&nbsp;? En plus des nombreux modules <a href="http://linux-attitude.fr/post/papiers-sil-vous-plait">déjà présentés</a>, on trouve <a href="http://www.kernel.org/pub/linux/libs/pam/Linux-PAM-html/sag-pam_exec.html" hreflang="en">pam_exec</a> qui permet d'exécuter une commande arbitraire. A partir de là on peut faire pas mal de choses, comme par exemple une notification à chaque session ouverte par un utilisateur (connexion ssh, su, sudo, etc.).</p>



<p><br /></p>

<h3>Notification de connexion</h3>

<p>Nous allons créer une règle utilisant le module <em>pam_exec</em> pour exécuter un script de notification à l'ouverture d'une nouvelle session.</p>


<p><br /></p>

<h5>Script de notification</h5>

<p>D'après le <a href="http://www.kernel.org/pub/linux/libs/pam/Linux-PAM-html/sag-pam_exec.html">manuel de pam_exec</a>, les informations PAM sont passées au script à l'aide des variables d'environnement&nbsp;: <em>PAM_RHOST</em>, <em>PAM_RUSER</em>, <em>PAM_SERVICE</em>, <em>PAM_TTY</em>, <em>PAM_USER</em> et <em>PAM_TYPE</em>. Concevons donc un script simple qui&nbsp;:</p>
<ul>
<li>ne s'intéresse qu'au cas de l'ouverture d'une nouvelle session, soit le type PAM <em>open_session</em></li>
<li>récupère les informations et les envoie par mail à l'administrateur</li>
</ul>

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

<pre>
#!/bin/sh
[ &quot;$PAM_TYPE&quot; = &quot;open_session&quot; ] || exit 0
{
  echo &quot;User: $PAM_USER&quot;
  echo &quot;Ruser: $PAM_RUSER&quot;
  echo &quot;Rhost: $PAM_RHOST&quot;
  echo &quot;Service: $PAM_SERVICE&quot;
  echo &quot;TTY: $PAM_TTY&quot;
  echo &quot;Date: `date`&quot;
  echo &quot;Server: `uname -a`&quot;
} |mail -s &quot;`hostname -s` $PAM_SERVICE login: $PAM_USER&quot; root
</pre>


<p>On peut sauver ce script sous <code>/usr/local/bin/pam-notify-login</code> et n'oublions pas de le rendre exécutable&nbsp;:</p>
<pre>
# chmod a+x /usr/local/bin/pam-notify-login
</pre>


<p>Remarque&nbsp;: vous aurez besoin d'une version récente des modules PAM pour avoir la variable d'environnement <em>PAM_TYPE</em> envoyée par le module <em>pam_exec</em>. En effet celle-ci n'a été ajoutée qu'à partir de la <a href="http://pam.cvs.sourceforge.net/viewvc/pam/Linux-PAM/modules/pam_exec/pam_exec.c?r1=1.7&amp;amp;r2=1.8">révision 1.8</a>. Concrètement Debian lenny ne l'a pas (libpam-modules 1.0) alors que squeeze l'a (libpam-modules 1.1).</p>


<p><br /></p>

<h5>Règle pam_exec</h5>

<p>Après consultation de la <a href="http://www.kernel.org/pub/linux/libs/pam/Linux-PAM-html">documentation Linux-PAM</a>, voici la règle à utiliser&nbsp;:</p>
<pre>
session    optional     pam_exec.so    /usr/local/bin/pam-notify-login
</pre>

<p>Il faut maintenant l'ajouter à tous les services interactifs (donc pas cron) qui utilisent PAM&nbsp;: SSH, login, su, sudo, etc. Sous Debian (et certainement d'autres distrib), on peut le faire grâce au fichier <code>/etc/pam.d/common-session</code>  qu'incluent les services intéractifs. On ajoute donc cette règle à la fin du fichier.</p>


<p>Attention cependant si vous utilisez <strong>sudo</strong> sous Debian, un petit <a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=519700">oubli</a> fait que la règle de <strong>sudo</strong> n'inclut pas ce fichier. On doit donc rajouter la règle à la main dans <code>/etc/pam.d/sudo</code> en attendant mieux.</p>


<p>Une fois les règles ajoutées, essayez de vous connecter en SSH, de faire un su ou un sudo&nbsp;: vous devriez recevoir la notification par mail.</p>


<p><strong>PS</strong>&nbsp;: Ceci est un billet invité, s'il vous a plu, vous pouvez aller lire la prose de StalkR en version originale <a href="http://blog.stalkr.net/" hreflang="en">sur son site</a>.</p>

<p></p><p>Si vous avez aimé, il y a aussi : </p><ol><li><a href='http://linux-attitude.fr/post/en-vrac-20' rel='bookmark' title='Permanent Link: En vrac (20)'>En vrac (20)</a></li>
<li><a href='http://linux-attitude.fr/post/en-vrac-22' rel='bookmark' title='Permanent Link: En vrac (22)'>En vrac (22)</a></li>
<li><a href='http://linux-attitude.fr/post/connaitre-les-protocoles-pop' rel='bookmark' title='Permanent Link: Connaitre les protocoles : POP'>Connaitre les protocoles : POP</a></li>
</ol>
	Tags:<a href="http://linux-attitude.fr/tag/pam" title="pam" rel="tag">pam</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/scripting" title="Scripting" rel="tag">Scripting</a>, <a href="http://linux-attitude.fr/tag/securite" title="Sécurité" rel="tag">Sécurité</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/pam_exec/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>14</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 22/94 queries in 0.125 seconds using apc
Object Caching 1976/2054 objects using apc
Content Delivery Network via N/A

Served from: linux-attitude.fr @ 2012-02-09 00:19:26 -->
