<?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; Sécurité</title>
	<atom:link href="http://linux-attitude.fr/tag/securite/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>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>Capabilities</title>
		<link>http://linux-attitude.fr/post/capabilities?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=capabilities</link>
		<comments>http://linux-attitude.fr/post/capabilities#comments</comments>
		<pubDate>Sun, 31 Oct 2010 12:33:28 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[Sécurité]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/?p=1078</guid>
		<description><![CDATA[Niveau&#160;: &#160;&#160;&#160;&#160;&#160; Résumé&#160;: setcap&#160;; getcap&#160;; getpcaps Sous linux la gestion des droits des processus est héritée de posix et donc extrêmement simple. Si on exclut les modules de sécurité comme SELinux, il n'y a que deux systèmes. Seul le premier est véritablement connu. Les droits unix Un processus porte en lui-même 2 informations associées à [...]]]></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;: setcap&nbsp;; getcap&nbsp;; getpcaps</p>


<p>Sous linux la gestion des droits des processus est héritée de posix et donc extrêmement simple.</p>


<p>Si on exclut les modules de sécurité comme SELinux, il n'y a que deux systèmes. Seul le premier est véritablement connu.</p>


<h3>Les droits unix</h3>

<p>Un processus porte en lui-même 2 informations associées à ses droits&nbsp;: un utilisateur et un groupe. Ceux-ci permettent de déterminer ses actions possibles sur les fichiers (donc partout puisque tout est fichier) avec les attributs correspondants.</p>


<p>Malheureusement tout n'est pas fichier, pour le reste il existe une distinction entre les processus d'uid 0 (root) et les autres. Cette distinction donne des droits supplémentaires au processus root lors de ses appels système, par exemple l'écoute sur un port inférieur à 1024 ou la possibilité de redémarrer une machine.</p>


<p>Ces droits sont hérités d'un processus à un autre sauf dans 2 cas&nbsp;:</p>
<ul>
<li>un fichier exécuté a le bit suid alors on change l'uid du processus (augmentation des droits en général vers root)</li>
<li>le processus a l'uid root et demande à en changer (réduction des droits, par exemple pour login)</li>
</ul>

<h3>Les capabilities</h3>

<p>C'est ici que ça devient intéressant. Sous linux, un processus dispose aussi d'un ensemble de droits spécifiques que peu de gens connaissent.</p>


<p>En supposant que votre noyau soit compilé pour (c'est en général le cas), il associera à chaque processus (pour être précis, chaque thread) un champ de bits lui listant ses droits (dont celui de garder le silence). Ce champ est hérité d'un processus à un autre et, miracle, il peut être associé à un fichier exécutable comme le bit suid.</p>


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


<p>Le concept est donc le même que pour le couple utilisateur/groupe. Ces droits peuvent changer dans les cas suivants&nbsp;:</p>
<ul>
<li>un fichier exécuté a un ensemble de capabilities associé sur le filesystem alors on lui donne les droits associés (augmentation des droits)</li>
<li>le processus a des droits demande à ne plus les avoir (réduction des droits)</li>
<li>un processus fils est créé et les droits ne sont pas héritables (non transmission des droits)</li>
<li>le processus demande des droits supplémentaires qui sont autorisés mais non effectifs</li>
</ul>

<h4>Quels sont ces droits&nbsp;?</h4>

<p>En pratique ces droits ne sont qu'une subdivision des droits de root. Un découpage du bit suid si vous préférez.</p>


<p>On peut en trouver une petite liste dans <a href="http://linux.die.net/man/7/capabilities" hreflang="en">man 7 capabilities</a></p>


<h4>Comment qu'on fait&nbsp;?</h4>

<p>3 outils sont importants pour travailler avec les capabilities&nbsp;:</p>
<ul>
<li>getcap&nbsp;: lire les capabilities d'un binaire</li>
<li>setcap&nbsp;: modifier les capabilities d'un binaire</li>
<li>getpcaps&nbsp;: lire les capabilities d'un processus qui tourne</li>
</ul>



<h4>A quoi ça sert&nbsp;?</h4>

<p>Ça sert à ne plus donner les droits root à un programme qui veut juste pouvoir faire un ping. C'est-à-dire qu'il est maintenant possible de réduire les autorisations données à un programme et donc sa sensibilité.</p>


<p>Après une vérification de vos binaires, vous pouvez donc avoir une installation pour laquelle plus aucun binaire n'est suid root&nbsp;!</p>


<p>Vous pouvez créer un logiciel ayant besoin d'une fonction qui n'est accessible que par root et ne lui donner que les droits nécessaires, et ainsi limiter l'impact sur vos utilisateurs en cas de faille.</p>


<h4>Dans ma distribution préférée pour quand&nbsp;?</h4>

<p>Je ne peux pas vous répondre, les capabilities existent dans le noyau depuis très longtemps et pourtant les distribution ne semblent pas pressées de s'y convertir (en fait c'est <a href="http://fedoraproject.org/wiki/Features/RemoveSETUID" hreflang="en">prévu pour fedora</a>, comme quoi mes articles sont d'actualité :-).</p>


<p>Il y a deux explications possibles. La première c'est qu'un noyau n'a pas nécessairement le support des capabilities, ce qui risque de limiter fortement le fonctionnement de la distribution si un utilisateur devait booter sur un tel noyau (mais bon c'est déjà le cas pour d'autres fonctionnalités).</p>


<p>La deuxième c'est que le système de capabilities est un peu plus compliqué que je l'ai décrit. En effet, les capabilities peuvent être "permitted", "inherited" ou "effective" ou une combinaison des 3. Et là c'est l'erreur bête, commune aux outils de sécurité, on complexifie les choses sans apporter beaucoup de valeur ajoutée. Un simple héritage aurait permis à tout un chacun de comprendre et mettre en place des capabilities ...</p>

<p></p><p>Si vous avez aimé, il y a aussi : </p><ol><li><a href='http://linux-attitude.fr/post/access-control-list' rel='bookmark' title='Permanent Link: Access Control List'>Access Control List</a></li>
<li><a href='http://linux-attitude.fr/post/access-control-list-bis' rel='bookmark' title='Permanent Link: Access Control List (bis)'>Access Control List (bis)</a></li>
<li><a href='http://linux-attitude.fr/post/une-faille-de-securite' rel='bookmark' title='Permanent Link: Une faille de sécurité'>Une faille de sécurité</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/securite" title="Sécurité" rel="tag">Sécurité</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/capabilities/feed</wfw:commentRss>
		<slash:comments>5</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>
		<item>
		<title>Stockage de mots de passe</title>
		<link>http://linux-attitude.fr/post/stockage-de-mots-de-passe?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=stockage-de-mots-de-passe</link>
		<comments>http://linux-attitude.fr/post/stockage-de-mots-de-passe#comments</comments>
		<pubDate>Thu, 20 Aug 2009 17:06:32 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[Système]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/?p=387</guid>
		<description><![CDATA[Niveau&#160;: &#160;&#160;&#160;&#160;&#160; Résumé&#160;: pam_unix sha512 Il y a quelques années, le format de stockage des mots de passe unix a changé, permettant de passer du trop simple DES à un algorithme de votre choix. Au passage le stockage s'est fait dans /etc/shadow pour limiter encore plus l'accès à la version chiffrée de ces mots de [...]]]></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;: pam_unix sha512</p>


<p>Il y a quelques années, le format de stockage des mots de passe unix a changé, permettant de passer du trop simple DES à un algorithme de votre choix. Au passage le stockage s'est fait dans /etc/shadow pour limiter encore plus l'accès à la version chiffrée de ces mots de passe.</p>


<p>Traditionnellement on utilise un hashage MD5 des mots de passe, ce qui se reconnaît par un $1$ au début des mots de passe dans le fichier shadow.</p>


<p>Mais il se peut que vous n'ayez plus confiance en MD5, dans ce cas, rien ne vous empêche d'utiliser un autre algorithme. C'est très simple; il suffit de modifier /etc/pam.d/common-password ou l'équivalent de votre distribution avec la ligne suivante&nbsp;:</p>
<pre>
password   sufficient  pam_unix.so min=4 sha256
</pre>


<p>Et changez votre mot de passe, vous verrez alors le préfixe devenir $5$ dans le fichier shadow. Les valeurs possibles sont les suivantes&nbsp;:</p>
<ul>
<li>md5&nbsp;: $1$</li>
<li>sha265&nbsp;: $5$</li>
<li>sha512&nbsp;: $6$</li>
<li>blowfish&nbsp;: $2a$ (déclaré comme fonctionnel seulement sur certaines distributions)</li>
</ul>

<p>Si la valeur n'est pas comprise par pam_unix c'est la valeur par défaut (MD5) qui sera utilisée.</p>


<p>Sinon tant que vous êtes là à regarder bêtement votre configuration pam, profitez-en pour mettre en place <a href="http://linux-attitude.fr/post/detecter-les-mots-de-passe-faible">pam_cracklib</a>.</p>

<p></p><p>Si vous avez aimé, il y a aussi : </p><ol><li><a href='http://linux-attitude.fr/post/detecter-les-mots-de-passe-faible' rel='bookmark' title='Permanent Link: Détecter les mots de passe faible'>Détecter les mots de passe faible</a></li>
<li><a href='http://linux-attitude.fr/post/generation-automatique-de-mots-de-passe-bis' rel='bookmark' title='Permanent Link: Génération automatique de mots de passe (bis)'>Génération automatique de mots de passe (bis)</a></li>
<li><a href='http://linux-attitude.fr/post/generer-des-mots-de-passe' rel='bookmark' title='Permanent Link: Générer des mots de passe'>Générer des mots de passe</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/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/stockage-de-mots-de-passe/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Comptes ldap (4)</title>
		<link>http://linux-attitude.fr/post/comptes-ldap-4?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=comptes-ldap-4</link>
		<comments>http://linux-attitude.fr/post/comptes-ldap-4#comments</comments>
		<pubDate>Tue, 23 Jun 2009 23:43:00 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[Système]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/post/comptes-ldap-4</guid>
		<description><![CDATA[Niveau&#160;: &#160;&#160;&#160;&#160;&#160; Résumé&#160;: Suite de la formidable série&#160;: Et après les comptes&#160;? Il est aussi possible d'utiliser libnss-ldap pour autre chose que pour les comptes utilisateurs. La bibliothèque NSS étant une bibliothèque générique de résolution de nom, il est possible d'utiliser le ldap pour&#160;: les groupes (attention pas de login pour newrp à travers pam [...]]]></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;:</p>


<p>Suite de la <a href="http://linux-attitude.fr/post/Comptes-ldap-%283%29">formidable série</a>&nbsp;:</p>


<h3>Et après les comptes&nbsp;?</h3>


<p>Il est aussi possible d'utiliser libnss-ldap pour autre chose que pour les comptes utilisateurs.
La bibliothèque <a href="http://linux-attitude.fr/post/Fichiers-de-r%C3%A9solution-de-noms">NSS</a> étant une bibliothèque générique de résolution de nom, il est possible d'utiliser le ldap pour&nbsp;:</p>
<ul>
<li>les groupes (attention pas de login pour newrp à travers  pam de prévu)</li>
<li>les noms de machine</li>
<li>et d'autres qui ne pas très intéressants pour l'instant ...</li>
</ul>

<p>Pour cela, rien de plus facile, tout est déjà fait, il suffit de modifier la ligne correspondante dans /etc/nsswitch.conf et de commencer à peupler le LDAP.</p>


<p>Un groupe est définit comme suit&nbsp;:</p>
<pre>
objectClass: posixGroup
cn: mongroupe
description: goupe a moi
gidNumber: 1000
memberUid: peck
memberUid: amiami
</pre>


<p>Notez que la description est optionnelle et que les membres sont décrits par uid. Le userPassword est aussi disponible mais n'est pas utilisable actuellement pour les groupes du système.</p>


<p>Exemple de machine (plus besoin de DNS local ;-)&nbsp;:</p>
<pre>
objectClass: ipHost
cn: mamachine
ipNetworkNumber: 1.2.3.4
</pre>


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


<h3>S'adapter à l'existant</h3>


<p>Il est possible que vous ayez à gérer un serveur ldap existant avec ses comptes et son propre schéma (active directory ?).
C'est pourquoi il existe des options de mapping dans la configuration de pam_ldap et nss_ldap.</p>


<p>Ces options sont assez simples, il s'agit de reparcourir votre schéma et pour chaque entrée nécessaire pour le système, expliquer au fichier de configuration quel est le nom de l'attribut ou de la classe que vous utilisez sur le ldap. Ceci est à faire une fois pour nss et une fois pour pam.</p>


<p>Les commandes sont&nbsp;:</p>
<ul>
<li><strong>nss_map_objectclass</strong>&nbsp;: changer une classe utilisée par libnss-ldap</li>
<li><strong>nss_map_attribute</strong>&nbsp;: changer un attribut utilisé par libnss-ldap</li>
<li><strong>nss_default_attribute_value</strong>&nbsp;: donner une valeur par défaut à un attribut (pratique pour le shell par exemple)</li>
<li><strong>pam_login_attribute</strong>&nbsp;: change l'attribut servant à matcher le login pendant l'authentification</li>
<li>Il n'est pas possible de changer l'attribut utilisé par pam pour le mot de passe (normal c'est le serveur ldap qui gère).</li>
</ul>

<p>Les classes modifiables (en restant dals le domaine utilisateur/groupe) sont</p>
<ul>
<li><strong>posixAccount</strong>&nbsp;: utilisateur ayant un compte unix</li>
<li><strong>shadowAccount</strong>&nbsp;: utilisateur ayant un système avancé de gestion de mot de passe</li>
<li><strong>posixGroup</strong>: groupe unix</li>
</ul>

<p>Les attributs modifiables sont&nbsp;: <strong>uidNumber</strong>, <strong>gidNumber</strong>, <strong>gecos</strong>, <strong>homeDirectory</strong>, <strong>loginShell</strong>, <strong>shadowLastChange</strong>, <strong>shadowMin</strong>, <strong>shadowMax</strong>, <strong>shadowWarning</strong>, <strong>shadowInactive</strong>, <strong>shadowExpire</strong>, <strong>shadowFlag</strong>, <strong>memberUid</strong></p>


<p>Plus de détails (et plus de clesses) dans la <a href="http://www.faqs.org/rfcs/rfc2307.html" hreflang="en">RFC 2307</a>.</p>


<p>La configuration fournie avec le paquet donne des exemples pour les différents systèmes existants (aix, microsoft ...)</p>


<h3>libnss-ldapd</h3>

<p>Maintenant vous pourriez avoir d'autres problèmes, comme la performance ou quelques hoquets du réseau qui coupent des connexions.
La solution traditionnelle pour cela est d'installer <a href="http://linux-attitude.fr/post/Cache-pour-la-résolution-de-noms">nscd</a> qui fera un cache et vous évitera ces problèmes (et peut en créer d'autres puisque c'est un cache).</p>


<p>Mais il existe une autre solution&nbsp;: libnss-ldapd, notez bien le 'd' final. C'est une version de libnss-ldap réécrite pour parler à un démon qui est le seul à parler avec le serveur ldap. Ça a l'avantage de mutualiser les requêtes dans une seule connexion et donc d'éviter pas mal de problèmes, surtout en cas de forte charge.</p>


<p>Petit inconvénient pour les puristes, ça ouvre une faille potentielle (inconnue à ce jour) pour un utilisateur qui voudrait devenir administrateur via le serveur ldap, puisque ce n'est plus le noyau qui vérifie les droits root d'administration mais le démon.</p>


<p>Le démon se configure dans /etc/nss-ldapd.conf. La syntaxe est la même que pour pam_ldap et libnss-ldap, le contenu ne doit pas changer.</p>


<p>Le démon est du coup assez important, il faut vérifier qu'il est lancé (monitorer toussa ...). Il s'appelle <strong>nslcd</strong>.</p>



<h3>Sécurité et performances</h3>


<p>Si vous avez beaucoup d'utilisateurs vous pouvez vouloir restreindre les recherches. <br />
Si vous avez des utilisateurs qui ne doivent pas tous avoir accès au système, vous pouvez vouloir restreindre les recherches.</p>


<p>C'est pourquoi nss et pam fournissent des directives pour réduire la taille des recherche et donc la liste des utilisateurs&nbsp;:</p>
<ul>
<li><strong>base</strong>&nbsp;: réduit l'accès à toutes les commandes LDAP à une seule branche</li>
<li><strong>scope</strong>&nbsp;: indiquer si la recherche doit tester les sous branches ou non</li>
<li><strong>nss_base_&lt;map&gt;</strong>&nbsp;: permet d'indiquer à ldap de se limiter à une requête pour un type donné de résolution, map peut valoir passwd, shadow ou group (ou hosts, services, networks,  protocols,  rpc,  ethers, netmasks,  bootparams, aliases  ou netgroup). Exemple&nbsp;: nss_base_passwd ou=users,dc=linux-attitude,dc=fr?sub?uid&gt;1000</li>
<li><strong>pam_filter</strong>&nbsp;: permet de modifier la partir filtre pour pam (pas besoin de modifier le reste car il n'y a qu'une requête faite par pam). Exemple&nbsp;: pam_filter uid&gt;1000</li>
</ul>

<p></p><p>Si vous avez aimé, il y a aussi : </p><ol><li><a href='http://linux-attitude.fr/post/comptes-ldap-1' rel='bookmark' title='Permanent Link: Comptes ldap (1)'>Comptes ldap (1)</a></li>
<li><a href='http://linux-attitude.fr/post/comptes-ldap-3' rel='bookmark' title='Permanent Link: Comptes ldap (3)'>Comptes ldap (3)</a></li>
<li><a href='http://linux-attitude.fr/post/comptes-ldap-2' rel='bookmark' title='Permanent Link: Comptes ldap (2)'>Comptes ldap (2)</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/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/comptes-ldap-4/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Comptes ldap (3)</title>
		<link>http://linux-attitude.fr/post/comptes-ldap-3?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=comptes-ldap-3</link>
		<comments>http://linux-attitude.fr/post/comptes-ldap-3#comments</comments>
		<pubDate>Sun, 21 Jun 2009 17:08:00 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[Système]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/post/comptes-ldap-3</guid>
		<description><![CDATA[Niveau&#160;: &#160;&#160;&#160;&#160;&#160; Résumé&#160;: libmap-ldap&#160;; passwd&#160;; chsh&#160;; chfn&#160;; adduser Désolé, j'ai oublié la suite de la série LDAP. On peut faire un peu mieux que la dernière fois. Changer son mot de passe Nous n'avons pas activé le changement de mot de passe. Pour cela, c'est assez simple, il suffit de modifier common-password (cela peut être [...]]]></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;: libmap-ldap&nbsp;; passwd&nbsp;; chsh&nbsp;; chfn&nbsp;; adduser</p>


<p>Désolé, j'ai oublié la suite de <a href="http://linux-attitude.fr/post/Comptes-ldap-%282%29">la série LDAP</a>. On peut faire un peu mieux que la dernière fois.</p>


<h3>Changer son mot de passe</h3>

<p>Nous n'avons pas activé le changement de mot de passe. Pour cela, c'est assez simple, il suffit de modifier common-password (cela peut être ailleurs pour certaines distributions ...)&nbsp;:</p>
<pre>
password   sufficient   pam_unix.so nullok obscure min=4 max=8 md5
password   sufficient   pam_ldap.so
</pre>


<p>Il faut aussi modifier /etc/pam_ldap.conf pour que pam ne modifie pas directement le mot de passe, mais utilise les fonctions de ldap prévues à cet effet. Cela permet qu'il ne soit pas stocké en clair, mais avec la méthode définie dans la configuration de ldap ({SSHA} par défaut).</p>
<pre>
# A ajouter dans /etc/pam_ldap.conf
pam_password exop
</pre>


<p>Et voilà vous pouvez tester la commande passwd.
Mais vous constaterez qu'il y a quelque chose qui cloche. Si vous lancez la commande en root, l'ancien mot de passe vous est quand même demandé. C'est parce que vous n'avez pas les droits d'administrateur sur le ldap.</p>


<p>Pour remédier à cela, il vous faut un compte ldap qui a le droit de modifier le champ password des autres utilisateurs, par exemple l'administrateur ldap. Puis renseignez ce compte dans pam_ldap.conf&nbsp;:</p>
<pre>
# /etc/pam_ldap.conf
# Il faudra stocker le mot de passe correspondant en clair dans /etc/pam_ldap.secret
# Ce fichier doit appartenir à root et être en mode 600
rootbinddn cn=admin,dc=linux-attitude,dc=fr
</pre>


<p>Ça y est vous êtes prêts.</p>


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


<h3>chsh, chfn, adduser</h3>

<p>Les utilisateurs ont le droit de changer leur shell ainsi que leurs informations personnelles.
Pour cela ils ont les commandes chsh et chfn.</p>


<p>Malheureusement ces commandes manipulent /etc/passwd. Le paquet libpam-ldap fournit des script pour remplacer ces commandes, mais ils sont un peu basiques et nécessitent libnet-ldap-perl (Net::LDAP). Vous pouvez vous baser dessus pour faire les votres si vous pensez que ces fonctionnalités sont indispensables pour vos utilisateurs. On les trouve dans /usr/share/doc/libpam-ldap/examples/ . un certain nombre de paramètres sont codés en dur et peu de vérifications d'erreur sont faites.</p>


<p>Si vous modifiez vos binaires dans /usr/bin sur debian, faites attention la prochaine mise à jour risque de les remplacer. Pour éviter ce problème, il existe la commande dpkg-divert&nbsp;:</p>
<pre>
# On fait croire aux paquets qu'ils installent /usr/bin/chfn alors qu'ils installent en réalité /usr/bin/chfn.old
$ dpkg-divert --add --rename --divert /usr/bin/chfn.old /usr/bin/chfn
# voila, vous pouvez maintenant remplacer /usr/bin/chfn
</pre>


<p>Autre problème, adduser ne comprend pas non plus le ldap. Ici le problème est le même mais la solution un peu meilleure.
Un paquet ldapscripts est disponible et il contient des commandes comme ldapadduser pour vous faciliter la création d'utilisateurs ldap.
Les commandes sont configurées dans /etc/ldapscripts/ .</p>


<p>Tout ceci pourrait s'améliorer dans de prochaines versions, un patch a l'air en cours de développement pour le paquet shadow (qui contient ces outils) qui utiliserait la libnss pour effectuer ces actions. Les commandes fonctionneraient donc directement.</p>



<h3>Quelques remarques</h3>

<p>Depuis que nous avons des vrais comptes systèmes basés sur le ldap nous sommes contents. Mais quelques petites choses tout de même&nbsp;:</p>
<ul>
<li>Gardez le compte root sur le système, on ne sait jamais, si le ldap tombe, vous seriez bien embêtés</li>
<li>Faites attentions aux droits dans le ldap, ils impactent les fonctionnalités des commandes systèmes (droit de lister les autres utilisateurs par exemple)</li>
<li>Avec un serveur distant, le ldap devient une forme de NIS</li>
<li>Vous pouvez utilisez la réplication ldap pour résister aux crash</li>
<li>Vous pouvez toujours garder une mot de passe local au cas où le ldap ne marche pas (pam fait les 2)</li>
<li>Vous pouvez vous connecter à un controleur de domaine windows</li>
<li>Si vous avez de problèmes les logs d'authentification sont dans /var/log/auth.log</li>
<li>Vous pouvez vouloir ne mettre en place que l'authentification via pam et ne pas utiliser libnss. Ce cas correspond à des utilisateurs virtuels (comme pour le ftp) qui n'utiliseront pas alors de vrai compte sur le système.</li>
</ul>

<p></p><p>Si vous avez aimé, il y a aussi : </p><ol><li><a href='http://linux-attitude.fr/post/comptes-ldap-2' rel='bookmark' title='Permanent Link: Comptes ldap (2)'>Comptes ldap (2)</a></li>
<li><a href='http://linux-attitude.fr/post/comptes-ldap-1' rel='bookmark' title='Permanent Link: Comptes ldap (1)'>Comptes ldap (1)</a></li>
<li><a href='http://linux-attitude.fr/post/comptes-ldap-4' rel='bookmark' title='Permanent Link: Comptes ldap (4)'>Comptes ldap (4)</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/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/comptes-ldap-3/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Comptes ldap (2)</title>
		<link>http://linux-attitude.fr/post/comptes-ldap-2?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=comptes-ldap-2</link>
		<comments>http://linux-attitude.fr/post/comptes-ldap-2#comments</comments>
		<pubDate>Sat, 06 Jun 2009 17:20:00 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[Système]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/post/comptes-ldap-2</guid>
		<description><![CDATA[Niveau&#160;: &#160;&#160;&#160;&#160;&#160; Résumé&#160;: libpam-ldap Hier nous avons créé un compte sur le ldap. Bien, mais on ne pouvait pas en faire grand chose. Il faut maintenant pouvoir se connecter. Il est théoriquement possible de tout faire avec libnss mais c'est à la fois plus difficile et moins fonctionnel qu'avec pam. Comme vous le savez l'authentification [...]]]></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;: libpam-ldap</p>


<p><a href="http://linux-attitude.fr/post/Comptes-ldap-%281%29">Hier</a> nous avons créé un compte sur le ldap. Bien, mais on ne pouvait pas en faire grand chose. Il faut maintenant pouvoir se connecter. Il est théoriquement possible de tout faire avec libnss mais c'est à la fois plus difficile et moins fonctionnel qu'avec pam.</p>


<p>Comme vous le savez <a href="http://linux-attitude.fr/post/Papiers-sil-vous-plait">l'authentification</a> sous linux se fait avec PAM. Nous allons donc utiliser un module dédié&nbsp;: libpam-ldap (cool le paquet porte le même nom).</p>


<h3>LDAP</h3>


<p>Cette fois ne nous force à utiliser aucun objectClass, mais comme il sait utiliser les attributs de la classe shadowAccount, on peut utiliser celle-ci pour se simplifier la vie.</p>


<p>Ajoutons le mot de passe à notre utilisateur. On crée le mot de passe LDAP à la main, mais par la suite vous verrez que ce n'est pas indispensable.</p>
<pre>
$ slappasswd -s test
{SSHA}l5X6sBFomfk3tk02HEMWK4YLep7pqZDk
</pre>


<p>On ajoute ce mot de passe à l'utilisateur déjà créé&nbsp;:</p>
<pre>
$ ldapmodify -x -D &quot;cn=admin,dc=linux-attitude,dc=fr&quot; -W
dn: uid=peck,ou=people,dc=linux-attitude,dc=fr
changetype: modify
add: userPassword
userPassword: {SSHA}l5X6sBFomfk3tk02HEMWK4YLep7pqZDk
</pre>


<p>Un test de connexion avec ldapsearch vous montrera que le mot de passe est bien pris en compte&nbsp;:</p>
<pre>
$ ldapsearch -x -D &quot;uid=peck,ou=people,dc=linux-attitude,dc=fr&quot; -w test &quot;uid=peck&quot;
</pre>


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


<h3>PAM</h3>


<p>Maintenant il faut expliquer gentiment à PAM d'aller faire son authentification en utilisant LDAP. Pour cela hop, configuration dans /etc/pam.d/common-*. Certaines distributions devront peut-être configurer chaque élément un par un&nbsp;: su, login, ssh ...</p>

<pre>
# common-auth
# attention, le pam_unix devient sufficient
auth    sufficient    pam_unix.so nullok_secure nodelay
# use_first pass permet de ne demander qu'une fois les mot de passe pour les 2 modules
auth    sufficient    pam_ldap.so use_first_pass 
</pre>

<pre>
# common-account
account    required    pam_unix.so
account    sufficient   pam_ldap.so
</pre>

<pre>
# common-session
session    required    pam_unix.so
session    optional    pam_ldap.so
</pre>


<p>Maintenant attaquons-nous au fichier de configuration proprement dit&nbsp;: /etc/pam_ldap.conf. En voici l'essentiel&nbsp;:</p>
<pre>
# /etc/pam_ldap.conf
base ou=people,dc=linux-attitude,dc=fr
uri ldap://127.0.0.1/
ldap_version 3
</pre>


<p>Vous remarquerez que pam_ldap.conf et libnss-ldap.conf ne rentrent jamais en conflit. Vous pouvez faire un lien de l'un vers l'autre ou modifier la configuration pour que ce soient les mêmes fichiers. Cela peut vous éviter quelques désagréments.</p>


<h3>Test</h3>

<p>Maintenant tout marche, même l'authentification. Faites le test&nbsp;:</p>
<pre>
$ su - peck
Password:
$ id
peck
</pre>


<p>Youpi, ça marche même en ssh.
Bon c'est bien gentil, mais c'est encore un peu léger. <a href="http://linux-attitude.fr/post/Comptes-ldap-%283%29">La prochaine fois</a> , on voudrait pouvoir faire encore plus.</p>

<p></p><p>Si vous avez aimé, il y a aussi : </p><ol><li><a href='http://linux-attitude.fr/post/comptes-ldap-1' rel='bookmark' title='Permanent Link: Comptes ldap (1)'>Comptes ldap (1)</a></li>
<li><a href='http://linux-attitude.fr/post/comptes-ldap-3' rel='bookmark' title='Permanent Link: Comptes ldap (3)'>Comptes ldap (3)</a></li>
<li><a href='http://linux-attitude.fr/post/comptes-ldap-4' rel='bookmark' title='Permanent Link: Comptes ldap (4)'>Comptes ldap (4)</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/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/comptes-ldap-2/feed</wfw:commentRss>
		<slash:comments>0</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 25/72 queries in 0.242 seconds using apc
Object Caching 1870/1971 objects using apc
Content Delivery Network via N/A

Served from: linux-attitude.fr @ 2012-05-23 20:35:09 -->
