<?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>K-Tux</title>
	<atom:link href="http://www.k-tux.com/feed" rel="self" type="application/rss+xml" />
	<link>http://www.k-tux.com</link>
	<description></description>
	<lastBuildDate>Wed, 09 May 2012 21:34:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Nagios : configuration snmp sous Solaris 10</title>
		<link>http://www.k-tux.com/nagios-configuration-snmp-sous-solaris-10</link>
		<comments>http://www.k-tux.com/nagios-configuration-snmp-sous-solaris-10#comments</comments>
		<pubDate>Wed, 09 May 2012 08:25:42 +0000</pubDate>
		<dc:creator>KXan</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Solaris]]></category>
		<category><![CDATA[Sysadmin apps]]></category>
		<category><![CDATA[conf]]></category>
		<category><![CDATA[monitoring]]></category>
		<category><![CDATA[Nagios]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[opensrc]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[remote]]></category>
		<category><![CDATA[sécurité]]></category>
		<category><![CDATA[snmp]]></category>
		<category><![CDATA[system]]></category>

		<guid isPermaLink="false">http://www.k-tux.com/?p=1197</guid>
		<description><![CDATA[Comme pas mal d&#8217;équipements, les serveurs sous Solaris 10 peuvent utiliser snmp afin d&#8217;être monitorable via -au hasard- Nagios. Une petite particularité concerne la postinstall du client qui ne crée pas correctement le service. Voici une astuce pour remettre d&#8217;équerre. &#8230; <a href="http://www.k-tux.com/nagios-configuration-snmp-sous-solaris-10">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[Comme pas mal d'équipements, les serveurs sous Solaris 10 peuvent utiliser snmp afin d'être monitorable via -au hasard- <strong>Nagios</strong>. Une petite particularité concerne la postinstall du client qui ne crée pas correctement le service. Voici une astuce pour remettre d'équerre.

Premièrement, il vous faut récupérer les packages Product, SUNWsmagt, SUNWsmmgr et SUNWsmcmd, quelque part sous mettons /var/tmp/. Ces packages sont disponibles sur les medias d'installation, si vous avez un serveur <strong>Jumpstart</strong> (l'équivalent du couple <strong>PXE / Kickstart</strong> pour <strong>RedHat</strong>).
<pre class="brush: bash"># pkgadd -d /var/tmp/snmp/solaris_10/Solaris_10/Product SUNWsmagt  SUNWsmmgr SUNWsmcmd</pre>
Le bug en question fait que les services ne sont pas enregistrés dans le système. La solution est triviale, il suffit de réimporter les xml concernés :
<pre class="brush: bash"># pkill configd
# svccfg -v import /var/svc/manifest/application/<wbr>management/seaport.xml 
# svccfg -v import /var/svc/manifest/application/<wbr>management/sma.xml </wbr></wbr></pre>
La configuration des communautés snmp se fait sous <em>/etc/sma/snmp/snmpd.conf</em> :
<pre class="brush: bash">rocommunity private 192.168.10.251 .1 # L'IP du serveur Nagios</pre>
Il ne reste plus qu'à réactiver le service via la commande :
<pre class="brush: bash"># svcadm enable svc:/application/management/<wbr>sma:default</wbr></pre>
Simple et concis. Il ne reste plus qu'à travailler les checks sur le serveur Nagios !]]></content:encoded>
			<wfw:commentRss>http://www.k-tux.com/nagios-configuration-snmp-sous-solaris-10/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tripwire : contrôle d&#8217;intégrité et monitoring</title>
		<link>http://www.k-tux.com/tripwire-controle-dintegrite-et-monitoring</link>
		<comments>http://www.k-tux.com/tripwire-controle-dintegrite-et-monitoring#comments</comments>
		<pubDate>Mon, 16 Apr 2012 08:30:54 +0000</pubDate>
		<dc:creator>KXan</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sysadmin apps]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[conception]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[event]]></category>
		<category><![CDATA[key]]></category>
		<category><![CDATA[opensrc]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[sécurité]]></category>
		<category><![CDATA[system]]></category>
		<category><![CDATA[Tripwire]]></category>

		<guid isPermaLink="false">http://www.k-tux.com/?p=1144</guid>
		<description><![CDATA[Il y a peu, je vous parlais d&#8217;une solution qui cherchait les différences entre le retour du ps et ce qui se trouve sous /proc/ -en bref, démasquer les processus cachés. Ce qui pose tout naturellement la question suivante : &#8230; <a href="http://www.k-tux.com/tripwire-controle-dintegrite-et-monitoring">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[Il y a peu, je vous parlais d'une solution qui cherchait les différences entre le retour du ps et ce qui se trouve sous /proc/ -en bref, <a href="http://www.k-tux.com/unhide-decouverte-des-processus-et-ports-caches" target="_blank">démasquer les processus cachés</a>.

Ce qui pose tout naturellement la question suivante : comment cacher un processus ? Plusieurs moyens sont à votre disposition, depuis l'encapsulation dans un autre processus plus passe partout jusqu'à la modification toute bête de votre ps. Et pourquoi pas de ses copains...

<a href="http://sourceforge.net/projects/tripwire/" target="_blank">Tripwire</a> est une solution de monitoring d'intégrité de données. Dit comme ça, c'est pile poil ce qu'il nous faut et surtout c'est un peu le grand nom du milieu.
<h2>Principes</h2>
Rien de bien sorcier, <strong>Tripwire</strong> implémente l'évident : une installation suivie d'une initialisation de la base de données dans laquelle on stockera les infos des données.

Une fois l'initialisation faite, on touche les configurations du service et celles visant à mentionner qui, et quoi faire en cas de changement. Un check doit suivre, afin d'initialiser les valeurs témoins pour chacune des data.

Tripwire produit des rapports sur chacune de ses analyses, et si vous voyez un truc qui cloche, vous pouvez repousser une sauvegarde de ces données ou valider les modifications relevées par Tripwire et mettre à jour la database en conséquence.
<h2>Applications</h2>
L'installation se fait depuis les dépôts, car pour Debian ils sont plutôt à jour et que je ne souhaite pas avoir affaire à de possibles complications si update :)
<pre class="brush: bash"># apt-get install tripwire</pre>
L'installation pose sous /etc/tripwire, sous /var/lib/tripwire et sous /usr/sbin pour les exécutables.
<h3>Configuration</h3>
De manière standard, vous trouverez les conf sous /etc/tripwire. Deux configurations sont à modeler selon les besoins. Elles ont chacune une version accessible en clair :
<ul>
	<li>/etc/tripwire/twcfg.txt, qui est propre à la configuration du service en lui-même</li>
	<li>/etc/tripwire/twpol.txt, qui concerne les politiques à mettre en place</li>
</ul>
Respectivement, une fois parsées, cela deviendra /etc/tripwire/tw.cfg pour la configuration du service et /etc/tripwire/tw.pol pour la spécification des policies.

On commence par :
<pre class="brush: bash"># /etc/tripwire/twinstall.sh</pre>
Le process pose alors pas mal de question, que l'on peut éviter en demandant le mode noprompt mais qui a le désavantage de demander explicitement les passphrases pour la génération des clés local et site.

L'installation faite est une installation en mode standalone (c'est-à-dire que les checks ne sont pas centralisés, chacun des serveurs a sa propre base de données).

2 informations sont à fournir : la passphrase pour la clé locale et la passphrase pour la clé du site. Ces clés servent à signer les policies, les configurations et la base de données contenant les références sur lesquelles se base Tripwire.
<pre class="brush: bash"># /etc/tripwire/twinstall.sh

----------------------------------------------
The Tripwire site and local passphrases are used to sign a variety of files, such as the configuration, policy, and database files.

Passphrases should be at least 8 characters in length and contain both letters and numbers.

See the Tripwire manual for more information.

----------------------------------------------
Creating key files...

(When selecting a passphrase, keep in mind that good passphrases typically have upper and lower case letters, digits and punctuation marks, and are at least 8 characters in length.)

Enter the site keyfile passphrase:
Verify the site keyfile passphrase:
Generating key (this may take several minutes)...
....Key generation complete.

----------------------------------------------
Signing configuration file...
Please enter your site passphrase:
Wrote configuration file: /etc/tripwire/tw.cfg

A clear-text version of the Tripwire configuration file /etc/tripwire/twcfg.txt has been preserved for your inspection. It is recommended that you delete this file manually after you have examined it.
----------------------------------------------
Signing policy file...
Please enter your site passphrase:
Wrote policy file: /etc/tripwire/tw.pol

A clear-text version of the Tripwire policy file /etc/tripwire/twpol.txt has been preserved for your inspection. This implements a minimal policy, intended only to test essential Tripwire functionality. You should edit the policy file to describe your system, and then use twadmin to generate a new signed copy of the Tripwire policy.</pre>
<h3>Ensuite ?</h3>
Attaquons la partie configurations. Comme dit un peu au dessus, il y a 2 configurations à valider : celle du service et celle des politiques à suivre.

La configuration du service est stockée dans le fichier /etc/tripwire/tw.cfg, qui est une version parsée du /etc/tripwire/twcfg.txt. Cette dernière est à moduler selon vos besoins. Elle contient notamment le nom et l'emplacement de la base de données où Tripwire va stocker tout son bazar.

La configuration des policies est plus tendue... Editons et voyons un peu sa tronche :
<pre class="brush: bash"># vim /etc/tripwire/twpol.txt</pre>
C'est un fichier texte, à la syntaxe très particulière. Pas mal de policies sont déjà à votre disposition, implémentées ou commentées d'ailleurs, et cela permet de se familiariser avec la syntaxe. Si je veux faire dans le spécifique, je peux rajouter à la fin de la configuration :
<pre class="brush: bash">(
rulename = "Application to monitor" ,
severity = 100,
emailto = rssi@k-tux.com

)

{
/APPS -&gt; $(IgnoreNone)-MCHracm (recurse=true) ;
}</pre>
Pour les détails des options, je vous laisse consulter le <a href="http://linux.die.net/man/4/twpolicy" target="_blank">man</a>.

Après avoir défini la politique de scellement dans le fichier twpol.txt, lancer la commande suivante :
<pre class="brush: bash"># twadmin -m P -c /etc/tripwire/tw.cfg -S /etc/tripwire/site.key /etc/tripwire/twpol.txt
Please enter your site passphrase:
Wrote policy file: /etc/tripwire/tw.pol</pre>
-m P équivaut également à --create-polfile.

Maintenant que nos conf sont parsées bien comme il faut, on doit créer la base des sceaux de référence. Très facile :
<pre class="brush: bash"># tripwire --init -c /etc/tripwire/tw.cfg

Parsing policy file: /etc/tripwire/tw.pol
Generating the database...
*** Processing Unix File System ***
Wrote database file: /var/lib/tripwire/db.twd
The database was successfully generated.</pre>
La base de donnée créée, il ne reste plus qu'à rentrer les valeurs de référence en lançant le fameux check.
<pre class="brush: bash"># tripwire --check

Parsing policy file: /etc/tripwire/tw.pol
*** Processing Unix File System ***
Performing integrity check...
Wrote report file: /var/lib/tripwire/report/kserv-20120412-210750.twr
... ... ...
Total objects scanned: 52397
Total violations found: 0</pre>
Les rapports produits par les check de Tripwire sont situés par défaut sous /var/lib/tripwire/report/ et ont une extension en .twr. Ce sont des data qui sont lisibles via la commande twprint. De là, il est facile de rediriger la sortie standard vers un fichier lisible via un less par exemple, c'est à votre convenance.
<pre class="brush: bash"># twprint -m r -r /var/lib/tripwire/report/kserv-20120412-210750.twr</pre>
<h3>Evolution de la base et mise à jour des policies</h3>
Comme les filesystems évoluent vite rien que par les mises à jour, il est nécessaire de faire évoluer la base de données de Tripwire en conséquence.

Tout d'abord, on doit mettre à jour la base de données de Tripwire à l'aide du rapport en question :
<pre class="brush: bash"># tripwire -m u --twrfile /var/lib/tripwire/report/kserv-20120412-210750.twr

Please enter your local passphrase:
Wrote database file: /var/lib/tripwire/db.twd</pre>
Si besoin, vous pouvez encore revoir les policies. Pour cela, il faut regénérer le tw.pol après avoir modifier twpol.txt :
<pre class="brush: bash"># twadmin -m P -c /etc/tripwire/tw.cfg -S /etc/tripwire/site.key /etc/tripwire/twpol.txt
Please enter your site passphrase:
Wrote policy file: /etc/tripwire/tw.pol</pre>
Il faut supprimer et recréer la database. C'est un peu brutal, mais c'est comme ça que ça marche.
<pre class="brush: bash"># rm /var/lib/tripwire/db.twd
# tripwire --init -c /etc/tripwire/tw.cfg</pre>
<h3>Cronner le tout</h3>
Tripwire n'est pas un daemon, il est nécessaire de le lancer de façon récurrente. Crond s'impose donc :
<pre class="brush: bash">00 03 * * * /usr/sbin/tripwire --check</pre>
And voilà ! Tout est prêt pour vous avertir dès qu'une modification est faite sur un des éléments sous surveillance.
<h2>Conclusion</h2>
<strong>Tripwire</strong> est, à mon sens, une réponse à un besoin élémentaire en terme de sécurité. Bien qu'elle nécessite un petit ajustement dans sa prise en main -mais minime alors- et une maintenance continue, elle reste plus que pertinente, surtout vu le niveau des joueurs.

Et comme un système parfaitement sécurisé n'est que pure utopie, on se doit de checker un minimum nos bécanes :)]]></content:encoded>
			<wfw:commentRss>http://www.k-tux.com/tripwire-controle-dintegrite-et-monitoring/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Back to Basis : clone d&#8217;un serveur OpenLDAP</title>
		<link>http://www.k-tux.com/back-to-basis-clone-dun-serveur-openldap</link>
		<comments>http://www.k-tux.com/back-to-basis-clone-dun-serveur-openldap#comments</comments>
		<pubDate>Mon, 26 Mar 2012 08:39:31 +0000</pubDate>
		<dc:creator>KXan</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sysadmin apps]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[authentication]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[conception]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[install]]></category>
		<category><![CDATA[LDAP]]></category>
		<category><![CDATA[opensrc]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[system]]></category>

		<guid isPermaLink="false">http://www.k-tux.com/?p=1133</guid>
		<description><![CDATA[C&#8217;est un tip très court, qui permet de refaire à l&#8217;identique votre serveur OpenLDAP et vous allez voir, c&#8217;est très rapide. Le but du jeu n&#8217;est pas de créer de la redondance de service ou du load balancing (auquel cas &#8230; <a href="http://www.k-tux.com/back-to-basis-clone-dun-serveur-openldap">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[C'est un tip très court, qui permet de refaire à l'identique votre serveur OpenLDAP et vous allez voir, c'est très rapide.

Le but du jeu n'est pas de créer de la redondance de service ou du load balancing (auquel cas on préfèrera faire un peer et configurer slapd pour qu'il gère les 2 serveurs de manière cohérente) mais de  créer une image fidèle de la production afin de travailler dessus et de mesurer les conséquences des modifications faites avant de les porter sur le serveur de référence.

Je passe sur l'installation de l'OS. On commence juste après l'installation du package openldap (pour Debian, ce sera slapd) et on suppose que votre clone peut interroger votre serveur de référence.

Petite sauvegarde au cas où de vos conf d'origine. Pour information, sous Debian, tout est sous /etc/ldap, ce qui n'est pas le cas par exemple sous Suse, où on sera sous /etc/openldap. Adaptez en conséquence :)
<pre class="brush: bash">ldapserv2 # rsync -az /etc/ldap{,.org}</pre>
Récupérez vos enregistrements LDAP. A moduler selon que vous ayez autorisé ou pas le read en mode anonyme (-x). Si ce n'est pas le cas, utilisez un -D suivi du dn du compte autorisé (exemple : -D "cn=bofh,dc=k-tux, dc=com") et d'un -W qui vous permettra d'avoir un prompt pour rentrer le mot de passe du compte.
<pre class="brush: bash">ldapserv2 # ldapsearch -x -H ldap://ldapserv1 -LLL &gt; ldapserv1-dump.ldif</pre>
Dans la même optique, récupérez également les configurations du master, schémas compris, qu'il faut pousser au bon endroit sur votre clone.
<pre class="brush: bash">ldapserv2 # rsync -avz ldapserv1:/etc/ldap/ /etc/ldap/</pre>
Et maintenant, sans rien faire de plus, balancez un slapadd pour pousser vos enregistrements sur le clone :
<pre class="brush: bash">ldapserv2 # slapadd -f ldapserv1-dump.ldif</pre>
Redémarrez le service, le tour est joué !
<pre class="brush: bash">ldapserv2 # /etc/init.d/slapd restart</pre>]]></content:encoded>
			<wfw:commentRss>http://www.k-tux.com/back-to-basis-clone-dun-serveur-openldap/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>High availability : drbd et heartbeat</title>
		<link>http://www.k-tux.com/high-availability-drbd-et-heartbeat</link>
		<comments>http://www.k-tux.com/high-availability-drbd-et-heartbeat#comments</comments>
		<pubDate>Tue, 28 Feb 2012 09:16:48 +0000</pubDate>
		<dc:creator>KXan</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sysadmin apps]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[conception]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[DRDB]]></category>
		<category><![CDATA[filesystem]]></category>
		<category><![CDATA[Heartbeat]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[opensrc]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[replication]]></category>
		<category><![CDATA[sécurité]]></category>
		<category><![CDATA[system]]></category>

		<guid isPermaLink="false">http://www.k-tux.com/?p=1110</guid>
		<description><![CDATA[La HA (acronyme pour High Availability, haute disponibilité) peut facilement se mettre en place en conjuguant une solution de mirroring de donnée par le réseau et une solution de détection de panne. Ces solutions existent et certaines ont fait leurs &#8230; <a href="http://www.k-tux.com/high-availability-drbd-et-heartbeat">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[La HA (acronyme pour High Availability, haute disponibilité) peut facilement se mettre en place en conjuguant une solution de mirroring de donnée par le réseau et une solution de détection de panne.

Ces solutions existent et certaines ont fait leurs preuves depuis longtemps. C'est le cas pour DRBD et Heartbeat dont nous allons voir un exemple succinct.
<h2>DRBD</h2>
<a href="http://www.drbd.org" target="_blank">DRBD</a>, c'est la version courte de Distributed Replicated Block Device. C'est une solution de réplication de données via un réseau dédié qui, somme toute, permet d'avoir, up to date, un mirroir de vos données tout prêt en cas de problème sur le nominal.

L'installation se fera depuis les dépôts, pour la simple et bonne raison que cela permet de rester cohérent lors des updates du système et de ne pas avoir à tout recompiler après l'opération.

Les packages à installer sont drbd et kmod-drbd, il ne vous reste plus qu'à faire appel à votre gestionnaire de package préféré.

Après l'opération, on peut d'ores et déjà charger le module manuellement via un simple !
<div>
<pre class="brush: bash"># modprobe -i drbd</pre>
</div>
Et, tant qu'à faire, rajouter la ligne du modprobe dans le fichier /sbin/rcdrbd.
<h3>Configuration</h3>
C'est à ce niveau que l'on peut admirer le génie de DRDB : deux modes existent :
<ul>
	<li>la réplication de donnée Active / Passive implique que l'écriture est faite sur l'un des emplacements, le master, puis répliquée sur le slave.</li>
	<li>la réplication de donnée Active / Active, qui gère l'écriture simultanée sur toutes les entités concernées</li>
</ul>
Malheureusement, on peut dire que la technologie sous-jacente limite les possibilités, car certains filesystems ont été conçus pour être les seuls à accéder aux volumes de données, comme ext3 par exemple.

En conséquence, si vous utilisez -ou voulez utiliser- ext3, il faut opter pour une configuration drdb active / passive. En revanche, si vous souhaitez jouer avec active / active, vous pouvez vous orienter ver un cluster filesystem comme GFS ou OCFS.

Nous sommes dans le cas le plus fréquent : on cherche l'ext3, donc une configuration active / passive. La configuration sera donc un peu comme suit :
<pre class="brush: bash"># cat /etc/drbd.conf
global{ 
 dialog-refresh 1;
 minor-count 5;
} 

common{} 

resource drbd-dns{
 protocol C;
 disk{ on-io-error detach; }
 syncer{
  rate 640M;
  al-extents 257; 
} 

 handlers {
 # /usr/lib/drbd/notify-split-brain.sh est un script qui notifie l'utilisateur passé en paramètre du split brain et déconnecte le disque
 split-brain "/usr/lib/drbd/notify-split-brain.sh root"; }
 net{
  ping-int 10;
  timeout 60;
  connect-int 10;
  ping-timeout 5;</pre>
<pre class="brush: bash">  # Après la détection du split brain, aucun primaire détecté, et un des serveurs n'a fait aucune modification : répliquer les modifications sur ce serveur
  after-sb-0pri discard-zero-changes; 

  # Après un split brain, un primaire détecté : le secondary est systématiquement la split brain victim
  after-sb-1pri discard-secondary; 

  # Après un split brain, 2 primary détectés : déconnexion
  after-sb-2pri disconnect; 

  # Si le rôle du serveur est incompatible avec la resynchronisation des ressources : déconnexion
  rr-conflict disconnect;
 } 

  startup{ degr-wfc-timeout 120; } 

  on dns1.k-tux.com{
   device      /dev/drbd0;
   address     192.168.1.52:7789; 
   # dns1 IP
   meta-disk /dev/sda6[1];
   disk /dev/sda5;
  } 

  on dns2.k-tux.com{
   device  /dev/drbd0;
   address 192.168.1.53:7789;
   # dns2 IP
   meta-disk /dev/sda6[1];
   disk /dev/sda5;
  } 
}</pre>
Si en revanche vous souhaitez monter une configuration en active / active, il suffit de mentionner l'option allow-two-primaries; dans la section net{} et de rajouter en dehors de net{} mais toujours dans la section resource data {} la section startup telle que :
<pre class="brush: bash">startup {
become-primary-on both;
}</pre>
Cela permet de monter les 2 serveurs en rôle primaires au démarrage.

<!--nextpage-->
<h3>Création et synchronisation des metadonnées</h3>
La configuration vérifiée et carrée, il s'agit de créer et de connecter les metadata sur tous les serveurs impliqués :
<div>
<pre class="brush: bash"># drbdadm create-md drbd-dns</pre>
Le retour doit vous donner :

</div>
<pre class="brush: bash">New drbd meta data block successfully created</pre>
Il ne reste plus qu'à faire le lien entre les metadonnées, les ressources et les serveurs.
<pre class="brush: bash"># drbdadm attach drbd-dns
# drbdadm syncer drbd-dns
# drbdadm connect drbd-dns</pre>
Pour information, l'option connect permet de monter la configuration réseau liée aux ressources. Dans le cas où on a plus de deux serveurs mentionnés dans la configuration drbd, il faut préciser l'option --peers afin de sélectionner les pairs sur lesquels vous voulez travailler.

Redémarrez drbd :
<pre class="brush: bash"># rcdrbd start</pre>
Vous pouvez monitorer la synchronisation des ressources en cattant /proc/drbd ou en interrogeant le service sur son status :
<pre class="brush: bash"># cat /proc/drbd
# /etc/init.d/drbd status</pre>
Si l'on veut forcer la synchronisation, il suffit d'exécuter sur les 2 serveurs si on est en configuration active/active, ou sur le master uniquement si active/passive :
<pre class="brush: bash"># drbdadm -- --overwrite-data-of-peer primary drbd-dns</pre>
Avant d'opérer le formattage, il faut s'assurer que la synchronisation est bien terminée :
<pre class="brush: bash"># watch -n 1 cat /proc/drbd</pre>
Une fois la synchronisation finie, on peut formatter la partition /dev/drbd0 :
<ul>
	<li>en ext3 dans mon cas
# mkfs.ext3 /dev/drbd0</li>
</ul>
<ul>
	<li>ou en autre chose, comme gfs par exemple
<span style="line-height: 24px;"># mkfs.gfs /dev/drbd0</span></li>
</ul>
<div>

 Il ne reste plus qu'à finaliser :
<pre class="brush: bash"># chkconfig --add drbd
# chkconfig --level 35 drbd on</pre>
Au quotidien, on peut obtenir l'état du mirroring DRBD grâce à la commande drbdadm-overview :

</div>
<div>
<div>
<pre class="brush: bash"># drbdadm-overview</pre>
</div>
La commande doit renvoyer une sortie du genre :
<pre class="brush: bash">1:drbd-dns   Connected Primary/Secondary UpToDate/UpToDate C r---</pre>
</div>
<h3>Failover / Failback</h3>
Lorsqu'il y a incident et que le master tombe, on peut forcer le serveur passif en primary :
<pre class="brush: bash">dns2 # drbd primary drbd-dns
dns2 # drbdadm connect drbd-dns</pre>
Ne pas oublier, lors de la remise up du primary et une fois la synchronisation terminée, de remettre le slave en mode secondary :
<pre class="brush: bash">dns2 # drbd secondary drbd-dns
dns2 # drbdadm connect drbd-dns</pre>
<h3>Split Brain</h3>
Un split brain est une situation où, suite à un souci, on se retrouve avec 2 serveurs qui se déclarent primary, d'où une haute probabilité de confusion des clients et pertes potentielles de données.

DRBD détecte le split brain au moment où la connectivité est rétablie et quand les noeuds peer recommencent à négocier via le protocole DRBD. S'il y a détection de deux primary alors le daemon clôt la connexion et arrête toute réplication. Un split brain se lit dans les logs :
<pre class="brush: bash">Split-Brain detected, dropping connection!</pre>
Après le split brain, un des noeuds se retrouve avec une connexion en état StandAlone. L'autre serveurs peut tout-à-fait être dans le même état de StandAlone, ou bien, s'il est monté après que le premier ait été déconnecté, être en attente de connexion (WFConnection).

Même s'il est possible de configurer DRBD pour reprendre la main automatiquement et décider quelles données garder (les instructions after-sb-*pri dans la section net), il est préférable de trancher par vous-même quel est le noeud dont les données doivent être discréditées. Ce qui fera du noeud concerné le split brain victim.

Dans mon cas, si je choisis de STONITH à l'ancienne le noeud dns2, il suffit de réattribuer le bon rôle sur le noeud et de discarder à la mano au moment de la synchronisation avec le volume :
<pre class="brush: bash">dns2 # drbdadm secondary drbd-dns
dns2 # drbdadm connect --discard-my-data drbd-dns</pre>
Sur le noeud de référence (le split brain survivor), si sa connexion est aussi en StandAlone, alors il suffit de lancer un connect :
<pre class="brush: bash">dns1 # drbdadm connect drbd-dns</pre>
Ce n'est pas nécessaire si le primary est dans l'état WFConnection. Le tour est joué, vous êtes revenu en situation nominal.
<h2>Heartbeat</h2>
C'est bien joli d'avoir un mirroir niveau block, encore faut-il détecter quand le neoud tombe. C'est le rôle de Heartbeat, qui est chargé, comme son nom l'indique, de prober les battements de coeur de l'autre serveur impliqué.

Ce qui est bien, c'est que <a href="http://www.linux-ha.org/wiki/Heartbeat" target="_blank">Heartbeat</a> a été conçu pour se coupler comme un charme avec DRBD. Et ça mérite la démonstration.

Même chose que pour DRBD, on part des packages présents sur les dépôts, histoire de ne rien casser à l'update.
<h3>Configuration</h3>
Il faut créer la configuration sous /etc/ha.d/ha.cf comme suit :
<div>
<pre class="brush: bash"># /etc/ha.d/ha.cf

# Messages de debug
debugfile /var/log/ha-debug

# Autres messages
logfile /var/log/ha-log

# Alertes generes dans les logs en cas d'absence de battement
warntime 6

# Temps entre chaques battements "en sec"
keepalive 2

# Temps avant que le node soit declare arrete
deadtime 6

# port UDP utlise
udpport 694

# interface utilise
bcast eth0

# Recuperation auto des ressources quand celle-ci est a nouveau operationnel
auto_failback off

# Les nodes du cluster
node dns1.k-tux.com
node dns2.k-tux.com</pre>
<h3>Paramétrages des ressources</h3>
</div>
Une fois la configuration créée, il faut quand même lui donner les informations concernant les ressources de préférences, leur emplacement et les entités concernées. Le format peut sembler tricky, car tout est sur une ligne.
<div>
<pre class="brush: bash">#!/bin/sh
# haresources
dns1.k-tux.com IPaddr::192.168.1.52/24/<wbr>eth0:0 IPaddr::192.168.1.53/24/eth0:0 drbddisk::drbd-dns Filesystem::/dev/drbd0::/var/<wbr>lib/named::ext3::acl</wbr></wbr></pre>
</div>
La configuration doit être identique sur tous les noeuds, et il faut respecter l'ordre qui est le suivant :
<ul>
	<li>le nom du noeux préféré, qui doit avoir son entrée dans /etc/hosts</li>
	<li>IPaddr mentionne les différentes adresses ip virtuelles</li>
	<li>drbddisk pour préciser et pouvoir gérer les ressources drbd</li>
	<li>Filesystem qui s'occupe de monter les partitions</li>
</ul>
Créer le fichier /etc/ha.d/authkeys :
<div>
<pre class="brush: bash"># auth authentication
auth 1

# identifiant method used
1 md5 password</pre>
</div>
Il ne reste plus qu'à démarrer le daemon heartbeat :
<div>
<pre class="brush: bash"># rchearcbeat start</pre>
</div>
Normalement, suite au démarrage du heartbeat, la virtual interface (eth0:0) devrait être activée et la ressource drbd /dev/drbd0 montée comme il faut bien, sous /var/lib/named dans mon cas.
<pre class="brush: bash">dns1 # mount | grep drbd0
/dev/drbd0            9.7G  151M  9.1G   2% /var/lib/named</pre>
Heartbeat de configuré, DRBD prêt, tout est en place pour pour le pire des cas, si du moins il devait arriver.
<h2>Conclusion</h2>
Le couple DRBD / Heartbeat a fait ses preuves depuis pas mal de temps, et pourtant nous n'avons brossé que quelques options.

L'un dans l'autre, ces solutions sont puissantes et bien employés, elles enlèvent une bonne partie du poids qui pèse sur les Sysadmins lorsque l'on parle critique, SLA et haute dispo.]]></content:encoded>
			<wfw:commentRss>http://www.k-tux.com/high-availability-drbd-et-heartbeat/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Solaris : configuration d&#8217;un serveur NTP</title>
		<link>http://www.k-tux.com/solaris-configuration-dun-serveur-ntp</link>
		<comments>http://www.k-tux.com/solaris-configuration-dun-serveur-ntp#comments</comments>
		<pubDate>Mon, 30 Jan 2012 08:30:32 +0000</pubDate>
		<dc:creator>KXan</dc:creator>
				<category><![CDATA[Solaris]]></category>
		<category><![CDATA[conf]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[NTP]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[system]]></category>

		<guid isPermaLink="false">http://www.k-tux.com/?p=1096</guid>
		<description><![CDATA[Mine de rien, il existe pas mal de différences entre Solaris et notre bon vieux Linux. Bien que le set de commande est sensiblement le même, le nom mis à part (snoop pour tcpdump par exemple), l&#8217;arborescence a quelque chose&#8230; &#8230; <a href="http://www.k-tux.com/solaris-configuration-dun-serveur-ntp">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[Mine de rien, il existe pas mal de différences entre <strong>Solaris</strong> et notre bon vieux <strong>Linux</strong>.

Bien que le set de commande est sensiblement le même, le nom mis à part (<em>snoop</em> pour <em>tcpdump</em> par exemple), l'arborescence a quelque chose... de dispersée. Enfin l'impression est vraie quand, comme moi, on est plutôt natif Nunux.

Attaquons doucement avec un truc simple : la configuration d'un client <strong>NTP</strong>. Première subtilité : la conf n'est pas directement sous /etc/, mais sous /etc/inet/, et ça nous donne un <em>/etc/inet/ntp.conf</em> :
<pre class="brush: bash">#
# Copyright 1996-2003 Sun Microsystems, Inc.  All rights reserved.
# Use is subject to license terms.
#
# /etc/inet/ntp.conf
#
# An example file that could be copied over to /etc/inet/ntp.conf and
# edited; it provides a configuration template for a server that
# listens to an external hardware clock, synchronizes the local clock,
# and announces itself on the NTP multicast net.
#

#
# Some of the devices benefit from "fudge" factors.  See the xntpd
# documentation.

# Either a peer or server.
# Servers to use to update

server ntpb1.k-tux.com prefer
server ntpb2.k-tux.com
# fudge 127.127.XType.0 stratum 0

broadcast 224.0.1.1 ttl 4

enable auth monitor
driftfile /var/ntp/ntp.drift
statsdir /var/ntp/ntpstats/
filegen peerstats file peerstats type day enable
filegen loopstats file loopstats type day enable
filegen clockstats file clockstats type day enable

keys /etc/inet/ntp.keys
trustedkey 0
requestkey 0
controlkey 0</pre>
Bien sûr, modifiez à votre convenance les statements commençant par le key word <em>server</em> afin que la conf soit carrée pour votre infrastructure. Il faut encore créer le drift s'il n'existe pas :
<pre class="brush: bash"># touch /etc/inet/ntp.drift</pre>
Activez le service :
<pre class="brush: bash"># svcadm enable svc:/network/ntp:default</pre>
Dans le cas où le service tourne déjà, on peut le restarter comme suit:
<pre class="brush: bash"># /etc/init.d/xntpd stop
# /etc/init.d/xntpd start</pre>
Au niveau du client, c'est assez simple, il suffit de copier la conf libellée ntp.client qui ne doit, par défaut, contenir que :
<pre class="brush: bash"># cat /etc/inet/ntp.client
multicastclient 224.0.1.1</pre>
Et d'activer le client NTP, de la même manière que pour le serveur :
<pre class="brush: bash"># cp /etc/inet/ntp.client /etc/inet/ntp.conf
# svcadm enable svc:/network/ntp:default</pre>
Si vous voulez éviter le multicast, alors il suffit de retoucher le ntp.conf en conséquence. Il faut par contre mentionner le serveur par son ip. Par exemple :
<pre class="brush: bash"># cat /etc/inet/ntp.client
server 192.168.16.2</pre>
Facile !

Au final, c'est une superbe claque quand on attaque un <strong>Solaris</strong> avec l'idée que c'est un type -mutant ?- de <strong>Linux</strong>.

Mais quoi de meilleur que de tomber sur ce type de plateforme : un grand nom, une utilité certaine, et tout un terrain pour découvrir, exploiter et peaufiner une technologie à laquelle on n'est pas habitué ?

Si vous avez la main sur ce type d'infra, n'hésitez pas à partager vos good practices et vos tips, vous êtes les bienvenus :)]]></content:encoded>
			<wfw:commentRss>http://www.k-tux.com/solaris-configuration-dun-serveur-ntp/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Unhide : découverte des processus et ports cachés</title>
		<link>http://www.k-tux.com/unhide-decouverte-des-processus-et-ports-caches</link>
		<comments>http://www.k-tux.com/unhide-decouverte-des-processus-et-ports-caches#comments</comments>
		<pubDate>Thu, 24 Nov 2011 13:53:42 +0000</pubDate>
		<dc:creator>KXan</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sysadmin apps]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[WSysadmin apps]]></category>
		<category><![CDATA[connexion]]></category>
		<category><![CDATA[firewall]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[opensrc]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[port]]></category>
		<category><![CDATA[remote]]></category>
		<category><![CDATA[sécurité]]></category>
		<category><![CDATA[system]]></category>
		<category><![CDATA[unhide]]></category>

		<guid isPermaLink="false">http://www.k-tux.com/?p=1087</guid>
		<description><![CDATA[Unhide est un outil simple de détection de process et de ports cachés qui n&#8217;apparaîtraient pas avec les outils classiques. Il a le bon goût d&#8217;être Open Source et disponible également pour les plateformes sous Windows. Commençons dans un premier &#8230; <a href="http://www.k-tux.com/unhide-decouverte-des-processus-et-ports-caches">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<a href="http://www.unhide-forensics.info/" target="_blank">Unhide</a> est un outil simple de détection de process et de ports cachés qui n'apparaîtraient pas avec les outils classiques. Il a le bon goût d'être <strong>Open Source</strong> et disponible également pour les plateformes sous <strong>Windows</strong>.

Commençons dans un premier temps par rapatrier et détarer l'archive de l'outil. La dernière version en date à l'heure de la manip est estampillée du 13 Janvier 2011.

L'installation est très simple, mais rompt complètement avec la routine des ./configure; make &amp;&amp; make install à laquel on est habitué.

Ici, il s'agit simplement de compiler le code c qui va bien afin d'utiliser les outils. Encore une fois, le README.txt est à disposition et nous donne les bonnes inforamtions.
<pre class="brush: bash">$ wget http://downloads.sourceforge.net/project/unhide/unhide-20110113.tgz
$ tar xzvf unhide-20110113.tgz
$ cd unhide-20110113
$ gcc --static unhide.c -o unhide
$ gcc --static unhide-tcp.c -o unhide-tcp
$ gcc -Wall -O2 --static -pthread unhide-linux26.c -o unhide-linux26</pre>
On se retrouve directement les exécutables sous la main. Ils sont 3 : unhide, unhide-linux26 et unhide-tcp.

Commençons par unhide tout court. Cet outil est destiné à démasquer les processus cachés.
Un premier run nous renvoie les options à fournir pour que cela fonctionne :
<pre class="brush: bash"># unhide
Unhide 20110113
http://www.unhide-forensics.info

usage: unhide proc | sys</pre>
Très succint, n'est-ce pas ? Clair aussi : proc pour lister les processus cachés en utilisant la comparaison entre ps et /proc, et sys pour comparer ps avec les informations issues des appels système.
<pre class="brush: bash"># unhide proc
Unhide 20110113
http://www.unhide-forensics.info

[*]Searching for Hidden processes through /proc scanning

Found HIDDEN PID: 762
Command: /usr/sbin/console-kit-daemon

Found HIDDEN PID: 763
Command: /usr/sbin/console-kit-daemon

Found HIDDEN PID: 764
Command: /usr/sbin/console-kit-daemon

Found HIDDEN PID: 1749
Command: auditd

Found HIDDEN PID: 3199
Command: dsmcad

Found HIDDEN PID: 3200
Command: dsmcad
[...]</pre>
Voyons ce que ça donne pour sys. Personnellement, j'ai complète correspondance pour sys et pour proc.
<pre class="brush: bash"># unhide sys
Unhide 20110113
http://www.unhide-forensics.info

[*]Searching for Hidden processes through getpriority() scanning

Found HIDDEN PID: 762
Command: /usr/sbin/console-kit-daemon

Found HIDDEN PID: 763
Command: /usr/sbin/console-kit-daemon

Found HIDDEN PID: 764
Command: /usr/sbin/console-kit-daemon
[...]

[*]Searching for Hidden processes through getpgid() scanning

Found HIDDEN PID: 762
Command: /usr/sbin/console-kit-daemon

Found HIDDEN PID: 763
Command: /usr/sbin/console-kit-daemon

Found HIDDEN PID: 764
Command: /usr/sbin/console-kit-daemon
[...]</pre>
Pour les modes plus intensifs, il faut utiliser unhide-linux26 avec l'option adéquate. La liste des modes et des options est tout de suite plus conséquente comme on peut le voir.
<pre class="brush: bash"># unhide-linux26
Unhide 20110113
http://www.unhide-forensics.info
Usage: unhide-linux26 [options] test_list

Option :
-V          Show version and exit
-v          verbose
-h          display this help
-m          more checks (available only with procfs command)
-r          use alternate sysinfo test in meta-test
-f          log result into unhide.log file
Test_list :
Test_list is one or more of the following
Standard tests :
brute
proc
procall
procfs
quick
reverse
sys
Elementary tests :
checkbrute
checkchdir
checkgetaffinity
checkgetparam
checkgetpgid
checkgetprio
checkRRgetinterval
checkgetsched
checkgetsid
checkkill
checknoprocps
checkopendir
checkproc
checkquick
checkreaddir
checkreverse
checksysinfo
checksysinfo2</pre>
Par exemple, avec l'option brute :
<pre class="brush: bash"># unhide-linux26 brute
Unhide 20110113
http://www.unhide-forensics.info
[*]Starting scanning using brute force against PIDS with fork()

[*]Starting scanning using brute force against PIDS with pthread functions
Found HIDDEN PID: 21443 "  ... maybe a transitory process"</pre>
Autre exemple avec reverse :
<pre class="brush: bash"># unhide-linux26 reverse
Unhide 20110113
http://www.unhide-forensics.info
[*]Searching for Fake processes by verifying that all threads seen by ps are also seen by others</pre>
Un bon compromis est de tourner unhide proc et si problème ou résultats étranges, lancer sa version approfondie agrémentée de la liste de tests qui va bien :
<pre class="brush: bash"># unhide-linux26 procall checkbrute checkchdir checkgetaffinity checkgetparam checkgetpgid checkgetprio checkRRgetinterval  checkgetsched checkgetsid checkkill checknoprocps checkopendir checkproc checkquick checkreaddir checkreverse checksysinfo checksysinfo2
Unhide 20110113
http://www.unhide-forensics.info
[*]Searching for Hidden processes through /proc stat scanning

[*]Searching for Hidden processes through /proc chdir scanning

[*]Searching for Hidden processes through /proc opendir scanning

[*]Searching for Hidden thread through /proc/pid/task readdir scanning

[*]Searching for Hidden processes through getpriority() scanning

[*]Searching for Hidden processes through getpgid() scanning

[*]Searching for Hidden processes through getsid() scanning

[*]Searching for Hidden processes through sched_getaffinity() scanning

[*]Searching for Hidden processes through sched_getparam() scanning

[*]Searching for Hidden processes through sched_getscheduler() scanning

[*]Searching for Hidden processes through sched_rr_get_interval() scanning

[*]Searching for Hidden processes through kill(..,0) scanning

[*]Searching for Hidden processes through  comparison of results of system calls

[*]Starting scanning using brute force against PIDS with fork()

Found HIDDEN PID: 28354 "  ... maybe a transitory process"
Found HIDDEN PID: 28604 "  ... maybe a transitory process"
Found HIDDEN PID: 28610 "  ... maybe a transitory process"
[*]Starting scanning using brute force against PIDS with pthread functions
Found HIDDEN PID: 24819 "  ... maybe a transitory process"
[*]Searching for Fake processes by verifying that all threads seen by ps are also seen by others

[*]Searching for Hidden processes through  comparison of results of system calls, proc, dir and ps

[*]Searching for Hidden processes through sysinfo() scanning

[*]Searching for Hidden processes through sysinfo() scanning</pre>
L'outil unhide-tcp, quant à lui, s'attache plus à découvrir quels sont les ports TCP et UDP qui auraient été "oubliés" par netstat.
<pre class="brush: bash"># unhide-tcp

Starting TCP checking

Starting UDP checking</pre>
Dans le cas où vous avez un peu quelques ports qui sont ouverts mais cachés à netstat, vous aurez quelque chose du genre :

Bien entendu, si vous tournez en user simple, tous les ports seront listés vu que netstat ne vous permet pas de tout voir :)
<pre class="brush: bash">Starting TCP checking
Found Hidden port that not appears in netstat: 1021
Found Hidden port that not appears in netstat: 1022

Starting UDP checking
Found Hidden port that not appears in netstat: 1021
Found Hidden port that not appears in netstat: 1022</pre>
Au final, <strong>unhide</strong> est un set complet qui trouve facilement une place dans les outils. Bien pour les paranoïaques mais également pour ceux qui veulent vérifier ce qu'il en est exactement. A conjuguer avec temps, outils complémentaires, skills et à volonté !]]></content:encoded>
			<wfw:commentRss>http://www.k-tux.com/unhide-decouverte-des-processus-et-ports-caches/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>DNScap : debug et trace DNS</title>
		<link>http://www.k-tux.com/dnscap-debug-et-trace-dns</link>
		<comments>http://www.k-tux.com/dnscap-debug-et-trace-dns#comments</comments>
		<pubDate>Thu, 17 Nov 2011 11:15:34 +0000</pubDate>
		<dc:creator>KXan</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sysadmin apps]]></category>
		<category><![CDATA[conf]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[opensrc]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[troubleshooting]]></category>

		<guid isPermaLink="false">http://www.k-tux.com/?p=1080</guid>
		<description><![CDATA[dnscap fait parti de ces outils d&#8217;analyse de flux et de troubleshooting basé sur le sniff des échanges. Il pourrait se rapprocher du célèbre tcpdump, à ceci près qu&#8217;il est, comme son nom l&#8217;indique, entièrement dédié aux flux concernant le &#8230; <a href="http://www.k-tux.com/dnscap-debug-et-trace-dns">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<a href="https://www.dns-oarc.net/tools/dnscap" target="_blank">dnscap</a> fait parti de ces outils d'analyse de flux et de troubleshooting basé sur le sniff des échanges. Il pourrait se rapprocher du célèbre tcpdump, à ceci près qu'il est, comme son nom l'indique, entièrement dédié aux flux concernant le DNS.

L'installation est simple, concise, et l'outil est directement utilisable en l'état. Comme d'habitude, on récupère les sources, un coup de ./configure, un coup de make install.
<pre class="brush: bash">$ wget http://dnscap.dns-oarc.net/dnscap-134.tar.gz
$ tar zxvf dnscap-134.tar.gz &amp;&amp; cd dnscap-134
$ ./configure
$ make install
mkdir -p /usr/local/bin /usr/local/share/man
if [ -f /usr/local/bin/dnscap ]; then \
mv -f /usr/local/bin/dnscap /usr/local/bin/dnscap.old; fi
cp dnscap /usr/local/bin
cp dnscap.cat1 /usr/local/man/cat1/dnscap.1
cp: ne peut créer le fichier régulier `/usr/local/man/cat1/dnscap.1': Aucun fichier ou dossier de ce type
make: *** [install] Erreur 1</pre>
Ce que je vais faire n'est pas très beau, mais comme c'est d'un man dont on parle, ça rentre dans l'acceptable.
<pre class="brush: bash">$ ln -s /usr/local/man/man1 /usr/local/man/cat1
$ make install
mkdir -p /usr/local/bin /usr/local/share/man
if [ -f /usr/local/bin/dnscap ]; then \
mv -f /usr/local/bin/dnscap /usr/local/bin/dnscap.old; fi
cp dnscap /usr/local/bin
cp dnscap.cat1 /usr/local/man/cat1/dnscap.1</pre>
Jetons un oeil aux options disponibles, ça peut aider :
<pre class="brush: bash">$ dnscap -help
dnscap: usage error: -h takes only [ir]
dnscap: version V1.0-OARC-r124 (2011-03-09)

usage: dnscap
[-?pd1g6fT] [-i &lt;if&gt;]+ [-r &lt;file&gt;]+ [-l &lt;vlan&gt;]+
[-u &lt;port&gt;] [-m [qun]] [-e [nytfsxir]]
[-h [ir]] [-s [ir]]
[-a &lt;host&gt;]+ [-z &lt;host&gt;]+ [-A &lt;host&gt;]+ [-Z &lt;host&gt;]+
[-w &lt;base&gt; [-k &lt;cmd&gt;]] [-t &lt;lim&gt;] [-c &lt;lim&gt;]
[-x &lt;pat&gt;]+ [-X &lt;pat&gt;]+
[-B &lt;datetime&gt;]+ [-E &lt;datetime&gt;]+

note: the -? or -\? option will display full help text</pre>
Et comme on est curieux, voyons ce que ça donne. Bien entendu, pour les besoins, j'ai pingué une machine qui n'était pas dans mon cache ARP et qui porte le doux nom de arctic. Les flux sont donc directement affichés, formatés en mode dig-like, et ça donne ça :
<pre class="brush: bash">$ dnscap -i eth0 -g
[61] 2011-11-16 13:38:51.505423 [#0 eth0 0] \
[192.168.16.145].46889 [192.168.10.2].53  \
dns QUERY,NOERROR,20694,rd \
1 arctic.k-tux.com,IN,A 0 0 0
[153] 2011-11-16 13:38:51.505824 [#1 eth0 0] \
[192.168.10.2].53 [192.168.16.145].46889  \
dns QUERY,NOERROR,20694,qr|aa|rd|ra \
1 arctic.k-tux.com,IN,A \
1 arctic.k-tux.com,IN,A,86400,192.168.20.43 \
2 k-tux.com,IN,NS,86400,dns1.k-tux.com \
k-tux.com,IN,NS,86400,dns2.k-tux.com \
2 dns1.k-tux.com,IN,A,86400,192.168.10.2 \
dns2.k-tux.com,IN,A,86400,192.168.10.3
[69] 2011-11-16 13:38:51.513186 [#2 eth0 0] \
[192.168.16.145].41402 [192.168.10.2].53  \
dns QUERY,NOERROR,59669,rd \
1 43.21.168.192.in-addr.arpa,IN,PTR 0 0 0
[174] 2011-11-16 13:38:51.513522 [#3 eth0 0] \
[192.168.10.2].53 [192.168.16.145].41402  \
dns QUERY,NOERROR,59669,qr|aa|rd|ra \
1 43.21.168.192.in-addr.arpa,IN,PTR \
1 43.21.168.192.in-addr.arpa,IN,PTR,86400,arctic.k-tux.com \
2 168.192.in-addr.arpa,IN,NS,86400,dns2.k-tux.com \
168.192.in-addr.arpa,IN,NS,86400,dns1.k-tux.com \
2 dns1.k-tux.com,IN,A,86400,192.168.10.2 \
dns2.k-tux.com,IN,A,86400,192.168.10.3
^Cdnscap: signalled break</pre>
Le principal intérêt est de vérifier que vous n'avez pas de pépin sur vos serveurs DNS, et notamment avec ce qu'ils répondent, cela va de soit.

Il existe un joli éventail d'<a href="https://www.dns-oarc.net/oarc/tools" target="_blank">outils dédiés aux checks du DNS</a> signés de la même entité (OARC, comme vous pouvez le voir lors du run de dnscap) et qui sont à votre totale disposition. Il peut être bon d'y jeter un oeil et de les garder sous le coude au besoin :)

&nbsp;]]></content:encoded>
			<wfw:commentRss>http://www.k-tux.com/dnscap-debug-et-trace-dns/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Shutdown accidentel : molly-guard</title>
		<link>http://www.k-tux.com/shutdown-accidentel-molly-guard</link>
		<comments>http://www.k-tux.com/shutdown-accidentel-molly-guard#comments</comments>
		<pubDate>Fri, 04 Nov 2011 13:05:15 +0000</pubDate>
		<dc:creator>KXan</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sysadmin apps]]></category>
		<category><![CDATA[authentication]]></category>
		<category><![CDATA[connexion]]></category>
		<category><![CDATA[opensrc]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[sécurité]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[SSH]]></category>
		<category><![CDATA[system]]></category>

		<guid isPermaLink="false">http://www.k-tux.com/?p=1077</guid>
		<description><![CDATA[Il y a un ancien dicton qui dit que seuls 2 types d&#8217;admin existent en ce bas monde : ceux qui ont déjà fait un shutdown / reboot sur le mauvais serveur, et ceux qui ne vont pas tarder à &#8230; <a href="http://www.k-tux.com/shutdown-accidentel-molly-guard">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[Il y a un ancien dicton qui dit que seuls 2 types d'admin existent en ce bas monde : ceux qui ont déjà fait un shutdown / reboot sur le mauvais serveur, et ceux qui ne vont pas tarder à le faire.

<a href="http://packages.debian.org/sid/molly-guard" target="_blank">Molly-guard</a> est un tout petit outil qui permet de déroger à la règle en demandant simplement le nom du serveur sur lequel vous êtes loggué, histoire de vérifier que c'est bien sur lui que vous voulez lancer l'opération.

Pour cela, rien de plus simple qu'une installation classique depuis les dépôts, puis d'un peu de conf, mais vraiment minime dans <em>/etc/molly-guard/rc</em> : décommenter la directive qui suit.
<pre class="brush: bash">ALWAYS_QUERY_HOSTNAME=true</pre>
Le test est facile :
<pre class="brush: bash">k-serv $ sudo reboot
W: molly-guard: SSH session detected!
Please type in hostname of the machine to reboot: k-ldap
Good thing I asked; I won’t reboot k-serv …
W: aborting reboot due to 30-query-hostname exiting with code 1.</pre>
En pratique, molly-guard vous protègera donc des halt, shutdown et reboot intempestifs. Bon à savoir quand on est débordé et qu'on a plus de 5 terminaux d'ouverts :)]]></content:encoded>
			<wfw:commentRss>http://www.k-tux.com/shutdown-accidentel-molly-guard/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>OSSEC : Surveillance du système et réponse active</title>
		<link>http://www.k-tux.com/ossec-surveillance-du-systeme-et-reponse-active</link>
		<comments>http://www.k-tux.com/ossec-surveillance-du-systeme-et-reponse-active#comments</comments>
		<pubDate>Mon, 10 Oct 2011 13:00:59 +0000</pubDate>
		<dc:creator>KXan</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Mac Sysadmin apps]]></category>
		<category><![CDATA[Sysadmin apps]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[WSysadmin apps]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[IDS]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[opensrc]]></category>
		<category><![CDATA[OSSEC]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[remote]]></category>
		<category><![CDATA[sécurité]]></category>
		<category><![CDATA[system]]></category>

		<guid isPermaLink="false">http://www.k-tux.com/?p=1063</guid>
		<description><![CDATA[Le dernier post était axé sur la surveillance de certaines données via auditd. Et bien cette fois, câblons plus efficace, et englobons dans un joli package surveillance du système ET réponse active ! C&#8217;est le rôle d&#8217;OSSEC. OSSEC OSSEC est &#8230; <a href="http://www.k-tux.com/ossec-surveillance-du-systeme-et-reponse-active">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[Le dernier post était axé sur la<a href="/auditd-monitoring-de-donnees-en-temps-reel" target="_blank"> surveillance de certaines données via auditd</a>.

Et bien cette fois, câblons plus efficace, et englobons dans un joli package surveillance du système ET réponse active ! C'est le rôle d'<a href="http://www.ossec.net/main/" target="_blank">OSSEC</a>.
<h2>OSSEC</h2>
OSSEC est un HIDS (Host-based Intrusion Detection System). Il s'agit en quelque sorte d'une sonde qui travaille sur une machine en particulier et analyse les éléments propres à cette machine. OSSEC dispose de fonctionnalités adaptées à son utilisation, comme l'analyse de logs, la détection de rootkit, les alertes en temps réel et les réponses actives.

OSSEC fonctionne sur la plupart des OS communément rencontrés : Windows, Linux, Mac OS, HP-UX, solaris, ... Il s'appuie sur un schéma client / Serveur :
<ul>
	<li>d'une part le Manager, qui met à disposition les éléments permettant d'évaluer les clients et stocke les informations renvoyées par ces clients</li>
	<li>d'autre part un agent, qui se charge de récupérer les éléments nécessaires aux analyses et pousse le tout au Manager</li>
</ul>
Cependant, OSSEC peut très bien se passer de l'agent, par exemple pour le cas où les systèmes à monitorer seraient plus de l'ordre des équipements réseaux. Ce mode ne sera pas testé ici, mais sachez qu'il est tout-à-fait envisageable.
<h3> Installation et configuration en standalone</h3>
Comme d'habitude, l'installation se fera depuis les sources, non pas que l'outil ne soit pas disponible sur les dépôts, mais il se peut qu'il date un peu par rapport à la fraiche mouture du site référent.

L'installation est on ne peut plus simple : ./install
<pre class="brush: bash">$ wget http://www.ossec.net/files/ossec-hids-2.6.tar.gz
$ tar zxvf ossec-hids-2.6.tar.gz
$ cd ossec-hids-2.6
$ sudo "./install.sh "
Password:

** Pour une installation en français, choisissez [fr]
(en/br/cn/de/el/es/fr/it/jp/nl/pl/ru/sr/tr) [en]: fr

OSSEC HIDS v2.6 Script d'installation - http://www.ossec.net

Vous êtes sur le point d'installer OSSEC HIDS.
Vous devez avoir une compilateur C préinstallé sur votre système.
Si vous avez des questions ou des commentaires, envoyez un email
à dcid@ossec.net (ou daniel.cid@gmail.com).

- Système: Linux ossec-server.k-tux Debian
- Utilisateur: root
- Hôte: ossec-server.k-tux

-- Appuyez sur Entrée pour continuer ou Ctrl-C pour annuler. --

1- Quel type d'installation voulez-vous (serveur, agent, local ou aide) ? serveur
- Installation du serveur choisie.

2- Définition de l'environnement d'installation.
- Choisissez votre répertoire d'installation de OSSEC HIDS [/var/ossec]:
- L'installation sera faite sur  /var/ossec .

3- Configuration de OSSEC HIDS.
3.1- Voulez-vous une alerte par email ? (o/n) [o]: o
- Quel est votre adresse email ? k-tux@k-tux.com
- Quel est l'adresse IP ou le nom d'hôte de votre serveur SMTP ? smtp.k-tux.com

3.2- Voulez-vous démarrer le démon de vérification d'intégrité ? (o/n) [o]: o
- Lancement de syscheck (démon de vérification d'intégrité).

3.3- Voulez-vous démarrer le moteur de détection de rootkit ? (o/n) [o]: o
- Lancement de rootcheck (détection de rootkit).

3.4- La réponse active vous permet d'éxécuter des commandes  spécifiques en fonction d'évènement. Par exemple, vous pouvez bloquer une adresse IP ou interdire l'accès à un utilisateur spécifique. Plus d'information sur : http://www.ossec.net/en/manual.html#active-response
- voulez-vous démarrer la réponse active ? (o/n) [o]: o
- Réponse active activée.

- Par défaut, nous pouvons activer le contrôle d'hôte
et le pare-feu (firewall-drop). Le premier ajoute un hôte dans /etc/hosts.deny et le second bloquera l'hôte dans iptables (sous linux) ou dans ipfilter (sous Solaris, FreeBSD ou NetSBD).
- Ils peuvent aussi être utilisés pour arrêter les scans en force brute de SSHD, les scans de ports ou d'autres formes d'attaques. Vous pouvez aussi les bloquer par rapport à des évènements snort, par exemple.
- Voulez-vous activer la réponse pare-feu (firewall-drop) ? (o/n) [o]:
- pare-feu (firewall-drop) activé (local) pour les levels &gt;= 6
- liste blanche (white list) par défaut pour la réponse active :
- Voulez-vous d'autres adresses IP dans votre liste (white list) ? (o/n)? [n]:

3.5- Voulez-vous activer fonctionnalité syslog (port udp 514) ? (o/n) [o]:
- Fonctionnalité syslog activé.

3.6- Mise en place de la configuration pour analyser les logs suivants :
-- /var/log/messages
-- /var/log/auth.log
-- /var/log/secure
-- /var/log/syslog
-- /var/log/security
-- /var/log/maillog
-- /var/log/proftpd/proftpd.log
-- /var/log/httpd/error_log (apache log)
-- /var/log/httpd/access_log (apache log)

- Si vous voulez surveiller d'autres fichiers, changez le fichier ossec.conf en ajoutant une nouvelle valeur de nom de fichier local. Pour toutes vos questions sur la configuration, consultez notre site web http://www.ossec.net
--- Appuyez sur Entrée pour continuer ---

5- Installation du système
- Exécution du Makefile INFO: Little endian set.
[...]
- Le Système est Debian Linux.
- Script d'initialisation modifié pour démarrer OSSEC HIDS pendant le boot.
- Configuration correctement terminée.
- Pour démarrer OSSEC HIDS:
/var/ossec/bin/ossec-control start
- Pour arrêter OSSEC HIDS:
/var/ossec/bin/ossec-control stop
- La configuration peut être visualisée ou modifiée dans /var/ossec/etc/ossec.conf

Merci d'utiliser OSSEC HIDS.
Si vous avez des questions, suggestions ou si vous trouvez un bug, contactez nous sur contact@ossec.net ou en utilisant la liste de diffusion publique sur ossec-list@ossec.net ( http://www.ossec.net/en/mailing_lists.html ).
Plus d'information peut être trouver sur http://www.ossec.net

- Vous devez ajouter le(s) agent(s) avant qu'ils aient un accés autorisé. Lancez 'manage_agent' pour les ajouter ou les supprimer:
/var/ossec/bin/manage_agents

Plus d'information sur http://www.ossec.net/en/manual.html</pre>
C'est plutôt verbeux, ce qui nous permet de bien maîtriser ce qui est fourni à OSSEC et de savoir par où commencer. Allons faire un tour sur le basedir d'OSSEC : /var/ossec.
<pre class="brush: bash">$ cd /var/ossec/
$ ll
total 76
4 dr-xr-x--- 15 root  ossec 4096 2011-08-25 15:28 .
4 drwxr-xr-x 21 root  root  4096 2011-08-25 15:28 ..
4 dr-xr-x---  3 root  ossec 4096 2011-08-25 15:28 active-response
4 dr-xr-x---  2 root  ossec 4096 2011-08-25 15:28 agentless
4 -r-xr-x---  1 root  ossec   24 2011-08-25 15:28 .bash_logout
4 -r-xr-x---  1 root  ossec  191 2011-08-25 15:28 .bash_profile
4 -r-xr-x---  1 root  ossec  124 2011-08-25 15:28 .bashrc
4 dr-xr-x---  2 root  ossec 4096 2011-08-25 15:28 bin
4 dr-xr-x---  3 root  ossec 4096 2011-08-25 15:28 etc
4 dr-xr-x---  2 root  ossec 4096 2011-08-25 15:28 .gnome2
4 drwxr-x---  5 ossec ossec 4096 2011-08-25 15:28 logs
4 dr-xr-x---  2 root  ossec 4096 2011-08-25 15:28 .mozilla
4 dr-xr-x--- 11 root  ossec 4096 2011-08-25 15:28 queue
4 dr-xr-x---  3 root  ossec 4096 2011-08-25 15:28 rules
4 -r-xr-x---  1 root  ossec 3793 2011-08-25 15:28 .screenrc
4 drwx------  2 ossec ossec 4096 2011-08-25 15:28 .ssh
4 drwxr-x---  2 ossec ossec 4096 2011-08-25 15:28 stats
4 dr-xr-x---  2 root  ossec 4096 2011-08-25 15:28 tmp
4 dr-xr-x---  3 root  ossec 4096 2011-08-25 15:28 var</pre>
<p style="text-align: left;">Comme on peut le voir, toute une arborescence a été créée et remplie avec les informations données à l'installation.</p>
<p style="text-align: left;"><!--nextpage--></p>
<p style="text-align: left;">La configuration se trouve sous etc, profitons-en pour jeter un oeil dessus :</p>

<pre class="brush: bash">$ cat etc/ossec.conf
&lt;ossec_config&gt;
&lt;global&gt;
&lt;email_notification&gt;yes&lt;/email_notification&gt;
&lt;email_to&gt;k-tux@k-tux.com&lt;/email_to&gt;
&lt;smtp_server&gt;smtp.k-tux.com&lt;/smtp_server&gt;
&lt;email_from&gt;ossecm@ossec-server.k-tux&lt;/email_from&gt;
&lt;/global&gt;

&lt;rules&gt;
&lt;include&gt;rules_config.xml&lt;/include&gt;
&lt;include&gt;pam_rules.xml&lt;/include&gt;
&lt;include&gt;sshd_rules.xml&lt;/include&gt;
&lt;include&gt;telnetd_rules.xml&lt;/include&gt;
&lt;include&gt;syslog_rules.xml&lt;/include&gt;
&lt;include&gt;arpwatch_rules.xml&lt;/include&gt;
&lt;include&gt;symantec-av_rules.xml&lt;/include&gt;
&lt;include&gt;symantec-ws_rules.xml&lt;/include&gt;
&lt;include&gt;pix_rules.xml&lt;/include&gt;
&lt;include&gt;named_rules.xml&lt;/include&gt;
&lt;include&gt;smbd_rules.xml&lt;/include&gt;
&lt;include&gt;vsftpd_rules.xml&lt;/include&gt;
&lt;include&gt;pure-ftpd_rules.xml&lt;/include&gt;
&lt;include&gt;proftpd_rules.xml&lt;/include&gt;
&lt;include&gt;ms_ftpd_rules.xml&lt;/include&gt;
&lt;include&gt;ftpd_rules.xml&lt;/include&gt;
&lt;include&gt;hordeimp_rules.xml&lt;/include&gt;
&lt;include&gt;roundcube_rules.xml&lt;/include&gt;
&lt;include&gt;wordpress_rules.xml&lt;/include&gt;
&lt;include&gt;cimserver_rules.xml&lt;/include&gt;
&lt;include&gt;vpopmail_rules.xml&lt;/include&gt;
&lt;include&gt;vmpop3d_rules.xml&lt;/include&gt;
&lt;include&gt;courier_rules.xml&lt;/include&gt;
&lt;include&gt;web_rules.xml&lt;/include&gt;
&lt;include&gt;apache_rules.xml&lt;/include&gt;
&lt;include&gt;nginx_rules.xml&lt;/include&gt;
&lt;include&gt;php_rules.xml&lt;/include&gt;
&lt;include&gt;mysql_rules.xml&lt;/include&gt;
&lt;include&gt;postgresql_rules.xml&lt;/include&gt;
&lt;include&gt;ids_rules.xml&lt;/include&gt;
&lt;include&gt;squid_rules.xml&lt;/include&gt;
&lt;include&gt;firewall_rules.xml&lt;/include&gt;
&lt;include&gt;cisco-ios_rules.xml&lt;/include&gt;
&lt;include&gt;netscreenfw_rules.xml&lt;/include&gt;
&lt;include&gt;sonicwall_rules.xml&lt;/include&gt;
&lt;include&gt;postfix_rules.xml&lt;/include&gt;
&lt;include&gt;sendmail_rules.xml&lt;/include&gt;
&lt;include&gt;imapd_rules.xml&lt;/include&gt;
&lt;include&gt;mailscanner_rules.xml&lt;/include&gt;
&lt;include&gt;dovecot_rules.xml&lt;/include&gt;
&lt;include&gt;ms-exchange_rules.xml&lt;/include&gt;
&lt;include&gt;racoon_rules.xml&lt;/include&gt;
&lt;include&gt;vpn_concentrator_rules.xml&lt;/include&gt;
&lt;include&gt;spamd_rules.xml&lt;/include&gt;
&lt;include&gt;msauth_rules.xml&lt;/include&gt;
&lt;include&gt;mcafee_av_rules.xml&lt;/include&gt;
&lt;include&gt;trend-osce_rules.xml&lt;/include&gt;
&lt;include&gt;ms-se_rules.xml&lt;/include&gt;
&lt;!-- &lt;include&gt;policy_rules.xml&lt;/include&gt; --&gt;
&lt;include&gt;zeus_rules.xml&lt;/include&gt;
&lt;include&gt;solaris_bsm_rules.xml&lt;/include&gt;
&lt;include&gt;vmware_rules.xml&lt;/include&gt;
&lt;include&gt;ms_dhcp_rules.xml&lt;/include&gt;
&lt;include&gt;asterisk_rules.xml&lt;/include&gt;
&lt;include&gt;ossec_rules.xml&lt;/include&gt;
&lt;include&gt;attack_rules.xml&lt;/include&gt;
&lt;include&gt;openbsd_rules.xml&lt;/include&gt;
&lt;include&gt;clam_av_rules.xml&lt;/include&gt;
&lt;include&gt;bro-ids_rules.xml&lt;/include&gt;
&lt;include&gt;dropbear_rules.xml&lt;/include&gt;
&lt;include&gt;local_rules.xml&lt;/include&gt;
&lt;/rules&gt;

&lt;syscheck&gt;
&lt;!-- Frequency that syscheck is executed - default to every 22 hours --&gt;
&lt;frequency&gt;79200&lt;/frequency&gt;

&lt;!-- Directories to check  (perform all possible verifications) --&gt;
&lt;directories check_all="yes"&gt;/etc,/usr/bin,/usr/sbin&lt;/directories&gt;
&lt;directories check_all="yes"&gt;/bin,/sbin&lt;/directories&gt;

&lt;!-- Files/directories to ignore --&gt;
&lt;ignore&gt;/etc/mtab&lt;/ignore&gt;
&lt;ignore&gt;/etc/mnttab&lt;/ignore&gt;
&lt;ignore&gt;/etc/hosts.deny&lt;/ignore&gt;
&lt;ignore&gt;/etc/mail/statistics&lt;/ignore&gt;
&lt;ignore&gt;/etc/random-seed&lt;/ignore&gt;
&lt;ignore&gt;/etc/adjtime&lt;/ignore&gt;
&lt;ignore&gt;/etc/httpd/logs&lt;/ignore&gt;
&lt;ignore&gt;/etc/utmpx&lt;/ignore&gt;
&lt;ignore&gt;/etc/wtmpx&lt;/ignore&gt;
&lt;ignore&gt;/etc/cups/certs&lt;/ignore&gt;
&lt;ignore&gt;/etc/dumpdates&lt;/ignore&gt;
&lt;ignore&gt;/etc/svc/volatile&lt;/ignore&gt;

&lt;!-- Windows files to ignore --&gt;
&lt;ignore&gt;C:\WINDOWS/System32/LogFiles&lt;/ignore&gt;
&lt;ignore&gt;C:\WINDOWS/Debug&lt;/ignore&gt;
&lt;ignore&gt;C:\WINDOWS/WindowsUpdate.log&lt;/ignore&gt;
&lt;ignore&gt;C:\WINDOWS/iis6.log&lt;/ignore&gt;
&lt;ignore&gt;C:\WINDOWS/system32/wbem/Logs&lt;/ignore&gt;
&lt;ignore&gt;C:\WINDOWS/system32/wbem/Repository&lt;/ignore&gt;
&lt;ignore&gt;C:\WINDOWS/Prefetch&lt;/ignore&gt;
&lt;ignore&gt;C:\WINDOWS/PCHEALTH/HELPCTR/DataColl&lt;/ignore&gt;
&lt;ignore&gt;C:\WINDOWS/SoftwareDistribution&lt;/ignore&gt;
&lt;ignore&gt;C:\WINDOWS/Temp&lt;/ignore&gt;
&lt;ignore&gt;C:\WINDOWS/system32/config&lt;/ignore&gt;
&lt;ignore&gt;C:\WINDOWS/system32/spool&lt;/ignore&gt;
&lt;ignore&gt;C:\WINDOWS/system32/CatRoot&lt;/ignore&gt;
&lt;/syscheck&gt;

&lt;rootcheck&gt;
&lt;rootkit_files&gt;/var/ossec/etc/shared/rootkit_files.txt&lt;/rootkit_files&gt;
&lt;rootkit_trojans&gt;/var/ossec/etc/shared/rootkit_trojans.txt&lt;/rootkit_trojans&gt;
&lt;system_audit&gt;/var/ossec/etc/shared/system_audit_rcl.txt&lt;/system_audit&gt;
&lt;system_audit&gt;/var/ossec/etc/shared/cis_debian_linux_rcl.txt&lt;/system_audit&gt;
&lt;system_audit&gt;/var/ossec/etc/shared/cis_rhel_linux_rcl.txt&lt;/system_audit&gt;
&lt;system_audit&gt;/var/ossec/etc/shared/cis_rhel5_linux_rcl.txt&lt;/system_audit&gt;
&lt;/rootcheck&gt;

&lt;global&gt;
&lt;white_list&gt;127.0.0.1&lt;/white_list&gt;
&lt;white_list&gt;^localhost.localdomain$&lt;/white_list&gt;
&lt;/global&gt;

&lt;remote&gt;
&lt;connection&gt;syslog&lt;/connection&gt;
&lt;/remote&gt;

&lt;remote&gt;
&lt;connection&gt;secure&lt;/connection&gt;
&lt;/remote&gt;

&lt;alerts&gt;
&lt;log_alert_level&gt;1&lt;/log_alert_level&gt;
&lt;email_alert_level&gt;7&lt;/email_alert_level&gt;
&lt;/alerts&gt;

&lt;command&gt;
&lt;name&gt;host-deny&lt;/name&gt;
&lt;executable&gt;host-deny.sh&lt;/executable&gt;
&lt;expect&gt;srcip&lt;/expect&gt;
&lt;timeout_allowed&gt;yes&lt;/timeout_allowed&gt;
&lt;/command&gt;

&lt;command&gt;
&lt;name&gt;firewall-drop&lt;/name&gt;
&lt;executable&gt;firewall-drop.sh&lt;/executable&gt;
&lt;expect&gt;srcip&lt;/expect&gt;
&lt;timeout_allowed&gt;yes&lt;/timeout_allowed&gt;
&lt;/command&gt;

&lt;command&gt;
&lt;name&gt;disable-account&lt;/name&gt;
&lt;executable&gt;disable-account.sh&lt;/executable&gt;
&lt;expect&gt;user&lt;/expect&gt;
&lt;timeout_allowed&gt;yes&lt;/timeout_allowed&gt;
&lt;/command&gt;

&lt;command&gt;
&lt;name&gt;restart-ossec&lt;/name&gt;
&lt;executable&gt;restart-ossec.sh&lt;/executable&gt;
&lt;expect&gt;&lt;/expect&gt;
&lt;/command&gt;

&lt;command&gt;
&lt;name&gt;route-null&lt;/name&gt;
&lt;executable&gt;route-null.sh&lt;/executable&gt;
&lt;expect&gt;srcip&lt;/expect&gt;
&lt;timeout_allowed&gt;yes&lt;/timeout_allowed&gt;
&lt;/command&gt;

&lt;!-- Active Response Config --&gt;
&lt;active-response&gt;
&lt;!-- This response is going to execute the host-deny
- command for every event that fires a rule with
- level (severity) &gt;= 6.
- The IP is going to be blocked for  600 seconds.
--&gt;
&lt;command&gt;host-deny&lt;/command&gt;
&lt;location&gt;local&lt;/location&gt;
&lt;level&gt;6&lt;/level&gt;
&lt;timeout&gt;600&lt;/timeout&gt;
&lt;/active-response&gt;

&lt;active-response&gt;
&lt;!-- Firewall Drop response. Block the IP for
- 600 seconds on the firewall (iptables, ipfilter, etc). --&gt;
&lt;command&gt;firewall-drop&lt;/command&gt;
&lt;location&gt;local&lt;/location&gt;
&lt;level&gt;6&lt;/level&gt;
&lt;timeout&gt;600&lt;/timeout&gt;
&lt;/active-response&gt;

&lt;!-- Files to monitor (localfiles) --&gt;

&lt;localfile&gt;
&lt;log_format&gt;syslog&lt;/log_format&gt;
&lt;location&gt;/var/log/messages&lt;/location&gt;
&lt;/localfile&gt;

&lt;localfile&gt;
&lt;log_format&gt;syslog&lt;/log_format&gt;
&lt;location&gt;/var/log/auth.log&lt;/location&gt;
&lt;/localfile&gt;

&lt;localfile&gt;
&lt;log_format&gt;syslog&lt;/log_format&gt;
&lt;location&gt;/var/log/secure&lt;/location&gt;
&lt;/localfile&gt;

&lt;localfile&gt;
&lt;log_format&gt;syslog&lt;/log_format&gt;
&lt;location&gt;/var/log/syslog&lt;/location&gt;
&lt;/localfile&gt;

&lt;localfile&gt;
&lt;log_format&gt;syslog&lt;/log_format&gt;
&lt;location&gt;/var/log/security&lt;/location&gt;
&lt;/localfile&gt;

&lt;localfile&gt;
&lt;log_format&gt;syslog&lt;/log_format&gt;
&lt;location&gt;/var/log/maillog&lt;/location&gt;
&lt;/localfile&gt;

&lt;localfile&gt;
&lt;log_format&gt;syslog&lt;/log_format&gt;
&lt;location&gt;/var/log/proftpd/proftpd.log&lt;/location&gt;
&lt;/localfile&gt;

&lt;localfile&gt;
&lt;log_format&gt;apache&lt;/log_format&gt;
&lt;location&gt;/var/log/httpd/error_log&lt;/location&gt;
&lt;/localfile&gt;

&lt;localfile&gt;
&lt;log_format&gt;apache&lt;/log_format&gt;
&lt;location&gt;/var/log/httpd/access_log&lt;/location&gt;
&lt;/localfile&gt;
&lt;/ossec_config&gt;</pre>
Par défaut telle quelle, la configuration est tout-à-fait viable. On recevra alors des mails du genre :
<pre class="brush: bash">[...]Received: from notify.ossec.net (ossec-server.k-tux.com)[...]
To: &lt;k-tux@k-tux.com&gt;
From: "OSSEC HIDS" &lt;ossecm@ossec-server.k-tux&gt;
Date: Wed, 21 Sep 2011 14:23:41 +0200
Subject: OSSEC Notification - ossec-server.k-tux - Alert level 4
<br id="line1" />OSSEC HIDS Notification.
2011 Sep 21 14:23:28

Received From: ossec-server.k-tux-&gt;/var/log/messages
Rule: 10100 fired (level 4) -&gt; "First time user logged in."
Portion of the log(s):

Sep 21 14:23:26 ossec-server.k-tux sshd[3185]: Accepted password for k-user1 from 192.168.10.105 port 62205 ssh2

 --END OF NOTIFICATION</pre>
C'est pratique, notamment pour garder un oeil sur ce qui se passe sur votre infrastructure, cela s'inscrit notamment dans la même veine que le monitoring via Nagios, à ceci près qu'il n'a besoin que des logs de la cible. D'ailleurs, on pourrait mettre également en place la centralisation de logs, afin de pouvoir sécuriser les éléments sur lesquels OSSEC s'appuie.
<h3>Active responses</h3>
Les actives responses -ou réponses actives en français- sont une des principales fonctionnalités d'OSSEC.

Ce sont des actions qui, selon certaines conditions, permettent d'agir immédiatement et de prendre les mesures qui s'imposent. Comme on peut s'en douter, il est facile de mesurer les avantages et inconvénients de ces mécanismes : rapidité de réponse, efficacité (trop parfois), faux positifs, ...

Tout est contenu dans la définition : il s'agit d'une part de paramétrer une action / une commande, et de l'autre, de spécifier les conditions déclenchant l'action.

Comme vous pouvez le constater, la cnfiguration par défuat en contient déjà quelques unes, comme par exemple :
<pre>&lt;command&gt;
&lt;name&gt;firewall-drop&lt;/name&gt;
&lt;executable&gt;firewall-drop.sh&lt;/executable&gt;
&lt;expect&gt;srcip&lt;/expect&gt;
&lt;timeout_allowed&gt;yes&lt;/timeout_allowed&gt;
&lt;/command&gt;
[...]
&lt;active-response&gt;
&lt;!-- Firewall Drop response. Block the IP for
- 600 seconds on the firewall (iptables, ipfilter, etc). --&gt;
&lt;command&gt;firewall-drop&lt;/command&gt;
&lt;location&gt;local&lt;/location&gt;
&lt;level&gt;6&lt;/level&gt;
&lt;timeout&gt;600&lt;/timeout&gt;
&lt;/active-response&gt;</pre>
En ce qui concerne la définition de la commande, on a principalement :
<ul>
	<li>le nom de la commande</li>
	<li>l'exécutable auquel OSSEC doit se référer pour l'action, situé sous /var/ossec/active-response/bin/</li>
	<li>expect, qui contient l'argument nécessaire pour effectuer l'action</li>
	<li>la possibilité d'autoriser un timeout</li>
</ul>
Pour ce qui est de la définition de la réponse active, on doit spécifier :
<ul>
	<li>le nom de la commande</li>
	<li>location : où la commande doit être exécutée. 4 choix s'offrent à vous :</li>
<ul>
	<li>local ; c'est-à-dire sur la machine cliente, où l'agent s'est exécuté</li>
	<li>server ; donc sur le serveur OSSEC lui-même</li>
	<li>defined-agent ; sur un agent spécifique, il faut alors renseigner un champ agent_id pour que cela soit fait correctement</li>
	<li>all : partout</li>
</ul>
	<li>agent_id : le fameux agent sur lequel l'action sera faite si on a mentionné defined-agent dans les balises de location</li>
	<li style="text-align: left;">level : la réponse sera exécutée sur chaque évènement ayant un niveau supérieur ou égal à celui spécifié</li>
	<li style="text-align: left;">timeout : combien de temps avant que la réponse soit défaite (par exemple, ici, l'ip débloquée)</li>
</ul>
Voyons ce que cela donne dans le cadre d'une installation d'un client seulement...
<p style="text-align: left;"><!--nextpage--></p>

<h3 style="text-align: left;">Clients / Serveur</h3>
<p style="text-align: left;">L'installation d'un client distinct fonctionne à peu près pareil que pour l'installation du serveur, à ceci près que l'on mention agent au lieu de server.</p>

<pre class="brush: bash"># cd /usr/lcoal/src/ossec-hids-2.6
-bash-4.0# ls
active-response/  BUGS  CONFIG  contrib/  CONTRIBUTORS  doc/  etc/  INSTALL  install.sh*  LICENSE  README  src/
-bash-4.0# ./install.sh
** Pour une installation en français, choisissez [fr]
(en/br/cn/de/el/es/fr/it/jp/nl/pl/ru/sr/tr) [en]: fr

OSSEC HIDS v2.6 Script d'installation - http://www.ossec.net
[...]

- Système: Linux Debian
- Utilisateur: root
- Hôte: ossec-agent.k-tux.com

1- Quel type d'installation voulez-vous (serveur, agent, local ou aide) ? agent
- Installation de l'agent (client) choisie.
2- Définition de l'environnement d'installation.
- Choisissez votre répertoire d'installation de OSSEC HIDS [/var/ossec]:
- L'installation sera faite sur  /var/ossec .
3- Configuration de OSSEC HIDS.
3.1- Quelle est l'adresse IP de votre serveur OSSEC HIDS ?: 192.168.206.145
- Ajout de l'IP du Serveur 192.168.206.145
3.2- Voulez-vous démarrer le démon de vérification d'intégrité ? (o/n) [o]: o
- Lancement de syscheck (démon de vérification d'intégrité).
3.3- Voulez-vous démarrer le moteur de détection de rootkit ? (o/n) [o]:
- Lancement de rootcheck (détection de rootkit).
3.4 - voulez-vous démarrer la réponse active ? (o/n) [o]:
3.5- Mise en place de la configuration pour analyser les logs suivants :
-- /var/log/messages
-- /var/log/auth.log
-- /var/log/secure
-- /var/log/syslog
-- /var/log/security
-- /var/log/maillog
-- /var/log/proftpd/proftpd.log
-- /var/log/httpd/error_log (apache log)
-- /var/log/httpd/access_log (apache log)

5- Installation du système
- Exécution du Makefile [...]
- Le Système est Debian Linux.
- Script d'initialisation modifié pour démarrer OSSEC HIDS pendant le boot.
- Configuration correctement terminée.
- Pour démarrer OSSEC HIDS:
/var/ossec/bin/ossec-control start
- Pour arrêter OSSEC HIDS:
/var/ossec/bin/ossec-control stop
- La configuration peut être visualisée ou modifiée dans /var/ossec/etc/ossec.conf
- Vous devez d'abord ajouter cet agent sur le serveur pour
qu'ils communiquent entre eux. Quand cela sera fait,
vous pourrez lancer l'outil 'manage_agents' pour
importer la clef d'authentification depuis le serveur.

/var/ossec/bin/manage_agent</pre>
Comme mentionné, il faut ajouter manuellement l'agent sur le serveur, car sinon, il ne voit que lui-même. Pour cela il faut utiliser manage_agent, qui, sur mon serveur, se situe sous /var/ossec/bin. Quant à agent_control, il permet d'avoir la main sur la liste des agents référencés et de leur faire subir quelques contrôles.
<pre class="brush: bash"> ossec-server.k-tux# agent_control -l

OSSEC HIDS agent_control. List of available agents:
ID: 000, Name: ossec-serv.k-tux (server), IP: 127.0.0.1, Active/Local

# manage_agents
****************************************
* OSSEC HIDS v2.6 Agent manager.     *
* The following options are available: *
****************************************
(A)dd an agent (A).
(E)xtract key for an agent (E).
(L)ist already added agents (L).
(R)emove an agent (R).
(Q)uit.
Choose your action: A,E,L,R or Q: A

- Adding a new agent (use '\q' to return to the main menu).
Please provide the following:
* A name for the new agent: ossec-agent.k-tux
* The IP Address of the new agent: 192.168.206.151
* An ID for the new agent[001]:
Agent information:
ID:001
Name:ossec-agent.k-tux
IP Address:192.168.206.151
Confirm adding it?(y/n): y
Agent added.

****************************************
* OSSEC HIDS v2.6 Agent manager.     *
* The following options are available: *
****************************************
(A)dd an agent (A).
(E)xtract key for an agent (E).
(L)ist already added agents (L).
(R)emove an agent (R).
(Q)uit.
Choose your action: A,E,L,R or Q: Q

** You must restart the server for your changes to have effect.
manage_agents: Exiting ..</pre>
Et de redémarrer le serveur ossec :
<pre class="brush: bash"># ossec-control restart
Deleting PID file '/var/ossec/var/run/ossec-remoted-7684.pid' not used...
Killing ossec-monitord ..
Killing ossec-logcollector ..
ossec-remoted not running ..
Killing ossec-syscheckd ..
Killing ossec-analysisd ..
Killing ossec-maild ..
Killing ossec-execd ..
OSSEC HIDS v2.6 Stopped
Starting OSSEC HIDS v2.6 (by Trend Micro Inc.)...
OSSEC analysisd: Testing rules failed. Configuration error. Exiting.
Started ossec-maild...
Started ossec-execd...
Started ossec-analysisd...
Started ossec-logcollector...
Started ossec-remoted...
Started ossec-syscheckd...
Started ossec-monitord...
Completed.</pre>
Du client, si rien de plus n'est fait, on part tout de même en erreur sur une histoire de clé :
<pre class="brush: bash"> ossec-agent.k-tux # /var/ossec/bin/ossec-control start
Starting OSSEC HIDS v2.6 (by Trend Micro Inc.)...
Started ossec-execd...
2011/10/05 13:21:39 ossec-agentd(1402): ERROR: Authentication key file '/var/ossec/etc/client.keys' not found.
2011/10/05 13:21:39 ossec-agentd(1750): ERROR: No remote connection configured. Exiting.
2011/10/05 13:21:39 ossec-agentd(4109): ERROR: Unable to start without auth keys. Exiting.</pre>
Pour récupérer la clé du client, il faut créer un fichier /var/ossec/etc/client.keys qui contiendra la clé du client que le serveur garde sous son /var/ossec/etc/clients.keys (attention, il y a bien un s à clients, contrairement à celui du client).
<pre class="brush: bash">ossec-agent.k-tux # cat /var/ossec/etc/client.keys
001 ossec-agent.k-tux 192.168.206.151 3ba007429eb3f283e85cc18eefcf4e01e64604e82757723db94c23fd1026df88</pre>
Une autre méthode, mais qui n'a pas fonctionné pour moi, est, depuis le client, de passer par manage_agent avec un bon cut/paste de la clé :
<pre class="brush: bash">ossec-agent.k-tux # ./manage_agents

****************************************
* OSSEC HIDS v2.6 Agent manager.     *
* The following options are available: *
****************************************
(I)mport key from the server (I).
(Q)uit.
Choose your action: I or Q: I

* Provide the Key generated by the server.
* The best approach is to cut and paste it.
*** OBS: Do not include spaces or new lines.

Paste it here (or '\q' to quit): 3ba007429eb3f283e85cc18eefcf4e01e64604e82757723db94c23fd1026df88

** Invalid authentication key. Starting over again.
** Press ENTER to return to the main menu.</pre>
Dans un cas comme dans l'autre -du moins si votre manage_agent fonctionne sur l'import-, vous pouvez dès que cela est réglé, lancer ossec-agent sur le client :
<pre class="brush: bash">ossec-agent.k-tux # /var/ossec/bin/ossec-control start
Starting OSSEC HIDS v2.6 (by Trend Micro Inc.)...
ossec-execd already running...
Started ossec-agentd...
Started ossec-logcollector...
Started ossec-syscheckd...
Completed.</pre>
A partir de là, votre agent fonctionne tout comme votre serveur, notifications et réponses actives !
<h2>Conclusion</h2>
Il est indéniable qu'OSSEC dispose de fonctionnalités clé qui permettent d'avoir un état en temps réel de votre infrastructure. En cela, il devient un des outils nécessaires à tout administrateur voulant contrôler un peu plus ce qui se passe sur son parc.

Cependant, comme pour tous les outils puissants, il reste maintenant à faire un peu de tri dans les informations renvoyées, afin de distinguer celles qui sont vraiment importantes de celles qui relèvent plus de l'anecdote. Car c'est un risque identifié : plus il y a de bruit, et moins on voit le problème...]]></content:encoded>
			<wfw:commentRss>http://www.k-tux.com/ossec-surveillance-du-systeme-et-reponse-active/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Auditd : monitoring de données en temps réel</title>
		<link>http://www.k-tux.com/auditd-monitoring-de-donnees-en-temps-reel</link>
		<comments>http://www.k-tux.com/auditd-monitoring-de-donnees-en-temps-reel#comments</comments>
		<pubDate>Mon, 05 Sep 2011 16:45:14 +0000</pubDate>
		<dc:creator>KXan</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sysadmin apps]]></category>
		<category><![CDATA[audit]]></category>
		<category><![CDATA[conf]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[filesystem]]></category>
		<category><![CDATA[install]]></category>
		<category><![CDATA[opensrc]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[scripting]]></category>
		<category><![CDATA[sécurité]]></category>
		<category><![CDATA[system]]></category>

		<guid isPermaLink="false">http://www.k-tux.com/?p=1057</guid>
		<description><![CDATA[Auditd Auditd est un outil qui permet de monitorer les accès aux données et de pouvoir offrir un support stable pour l&#8217;exploitation des logs. Auditd fait partie d&#8217;un ensemble de composants qui ont pour fonctionnalités de gérer les règles de &#8230; <a href="http://www.k-tux.com/auditd-monitoring-de-donnees-en-temps-reel">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h2>Auditd</h2>
Auditd est un outil qui permet de monitorer les accès aux données et de pouvoir offrir un support stable pour l'exploitation des logs. Auditd fait partie d'un ensemble de composants qui ont pour fonctionnalités de gérer les règles de surveillance et d'afficher les rapports.

Auditd est le daemon qui tourne en fond, en userspace, et qui est au coeur de la récupération des informations.
<h2>Prise en main</h2>
L'installation est très facile, et comme l'outil a fait ses preuves, on peut l'installer directement depuis les dépôts officiels.
<pre class="brush: bash">$ apt-get install audit</pre>
Et oui, cela suffit...
<h3>Configuration</h3>
La configuration d'audit se trouve sous /etc/audit/. On y trouve auditd.conf, qui est la conf à proprement parler du daemon auditd et audit.rules qui est destiné à contenir vos règles en dur.
<pre class="brush: bash"># ls -asl /etc/audit/
total 24
4 drwxr-x--- 2 root root 4096 2011-09-02 15:13 ./
12 drwxr-xr-x 140 root root 12288 2011-09-05 15:23 ../
4 -rw-r----- 1 root root 680 2009-07-27 21:07 auditd.conf
4 -rw-r----- 1 root root 373 2009-07-27 21:07 audit.rules</pre>
La conf ressemble à ça :
<pre class="brush: bash">#
# This file controls the configuration of the audit daemon
#

log_file = /var/log/audit/audit.log
log_format = RAW
log_group = root
priority_boost = 4
flush = INCREMENTAL
freq = 20
num_logs = 4
disp_qos = lossy
dispatcher = /sbin/audispd
name_format = NONE
##name = mydomain
max_log_file = 5
max_log_file_action = ROTATE
space_left = 75
space_left_action = SYSLOG
action_mail_acct = root
admin_space_left = 50
admin_space_left_action = SUSPEND
disk_full_action = SUSPEND
disk_error_action = SUSPEND
##tcp_listen_port =
tcp_listen_queue = 5
##tcp_client_ports = 1024-65535
tcp_client_max_idle = 0
enable_krb5 = no
krb5_principal = auditd
##krb5_key_file = /etc/audit/audit.key</pre>
Cette conf nous apprend notamment l'emplacement du log généré par le daemon, ce qui nous permettra d'y jeter un œil plus tard, pour extraction.

Quant à <em>audit.rules</em>, à la base, il est un peu vide, comme vous pouvez le constater : un -D pour tout flusher, une instruction d'augmentation de buffer, en dehors de cela, tout reste à faire.
<pre class="brush: bash">$ cat /etc/audit/audit.rules

# This file contains the auditctl rules that are loaded
# whenever the audit daemon is started via the initscripts.
# The rules are simply the parameters that would be passed
# to auditctl.

# First rule - delete all
-D

# Increase the buffers to survive stress events.
# Make this bigger for busy systems
-b 320

# Feel free to add below this line. See auditctl man page</pre>
Il y a donc 2 manières différentes de faire des règles : en statique dans le fichier de conf <em>/etc/audit/audit.rules</em>, ou à la volée.

Bien sûr, les seules différences entre statique et à la volée sont que :
<ul>
	<li>la volée ne survit pas à un reboot, alors que statique se lancera avec le daemon auditd</li>
	<li>la syntaxe des règles statiques est la même que celles à la volée, mis à part l'invocation de <strong>auditctl</strong>.</li>
</ul>
<h3>Création et gestions des règles</h3>
Comme c'est plus facile, et que c'est pratique, nous allons créer quelques règles à la volée.

Pour information, voici les options que j'ai renseigné :
<ul>
	<li>w : watch, activer la surveillance</li>
	<li>p war : fixer le filtre concernant les permissions pour la surveillance d'un fichier. Ici, r pour read, w pour write, x pour execute, a pour append.</li>
	<li>k passwd-file : clé unique permettant d'identifier l'objet de la requête</li>
</ul>
<pre class="brush: bash">k-root # auditctl -w /etc/passwd -p war -k password-file
k-root # ausearch -f /etc/passwd</pre>
J'ai crée un watch sur le fichier <em>/etc/passwd</em>, qui relèvera toute tentative en read, write ou append sur le fichier.

Comme on peut le voir, pour le moment, aucun évènement n'a eu lieu... Mais c'est sans compter sur<em> k-user</em>, qui va <em>grepper</em> <strong>root</strong> sur ledit fichier...
<pre class="brush: bash">k-user $ grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash</pre>
Immédiatement, la tentative -fructueuse- est journalisée et vue par auditd :
<pre class="brush: bash">k-root # ausearch -f /etc/passwd
----
time-&gt;Fri Sep 2 15:16:50 2011
type=PATH msg=audit(1314969410.095:9): item=0 name="/etc/passwd" inode=1982554 dev=08:01 mode=0100644 ouid=0 ogid=0 rdev=00:00
type=CWD msg=audit(1314969410.095:9): cwd="/home/k-user/Documents"
type=SYSCALL msg=audit(1314969410.095:9): arch=40000003 syscall=5 success=yes exit=4 a0=b763b078 a1=80000 a2=1b6 a3=8295090 items=1 ppid=6893 pid=28672 auid=4294967295 uid=3100 gid=3000 euid=3100 suid=3100 fsuid=3100 egid=3000 sgid=3000 fsgid=3000 tty=(none) ses=4294967295 comm="ps" exe="/bin/ps" key="password-file"
----
time-&gt;Fri Sep 2 15:16:52 2011
type=PATH msg=audit(1314969412.095:10): item=0 name="/etc/passwd" inode=1982554 dev=08:01 mode=0100644 ouid=0 ogid=0 rdev=00:00
type=CWD msg=audit(1314969412.095:10): cwd="/home/k-user/Documents"
type=SYSCALL msg=audit(1314969412.095:10): arch=40000003 syscall=5 success=yes exit=4 a0=b7669078 a1=80000 a2=1b6 a3=86c6090 items=1 ppid=6893 pid=28673 auid=4294967295 uid=3100 gid=3000 euid=3100 suid=3100 fsuid=3100 egid=3000 sgid=3000 fsgid=3000 tty=(none) ses=4294967295 comm="ps" exe="/bin/ps" key="password-file"
---- [...]</pre>
On peut faire aussi un peu plus lisible, grâce à l'option -i qui interprètera les id (uid, guid, date, ...). Plus facile pour le coup d’œil, n'est-ce pas ?
<pre class="brush: bash">k-root # ausearch -f /etc/passwd -i
----
type=PATH msg=audit(02/09/2011 15:16:50.095:9) : item=0 name=/etc/passwd inode=1982554 dev=08:01 mode=file,644 ouid=root ogid=root rdev=00:00
type=CWD msg=audit(02/09/2011 15:16:50.095:9) : cwd=/home/k-user/Documents
type=SYSCALL msg=audit(02/09/2011 15:16:50.095:9) : arch=i386 syscall=open success=yes exit=4 a0=b763b078 a1=80000 a2=1b6 a3=8295090 items=1 ppid=6893 pid=28672 auid=unset uid=k-user gid=k-user euid=k-user suid=k-user fsuid=k-user egid=k-user sgid=k-user fsgid=k-user tty=(none) ses=4294967295 comm=ps exe=/bin/ps key=password-file
----
type=PATH msg=audit(02/09/2011 15:16:52.095:10) : item=0 name=/etc/passwd inode=1982554 dev=08:01 mode=file,644 ouid=root ogid=root rdev=00:00
type=CWD msg=audit(02/09/2011 15:16:52.095:10) : cwd=/home/k-user/Documents
type=SYSCALL msg=audit(02/09/2011 15:16:52.095:10) : arch=i386 syscall=open success=yes exit=4 a0=b7669078 a1=80000 a2=1b6 a3=86c6090 items=1 ppid=6893 pid=28673 auid=unset uid=k-user gid=k-user euid=k-user suid=k-user fsuid=k-user egid=k-user sgid=k-user fsgid=k-user tty=(none) ses=4294967295 comm=ps exe=/bin/ps key=password-file
----</pre>
Les commandes de base sont intuitives, par exemple, le listing des règles en place :
<pre class="brush: bash">k-root # auditctl -l
LIST_RULES: exit,always watch=/etc/passwd perm=rwa key=password-file
LIST_RULES: exit,always watch=/etc/shadow perm=rwax key=shadow-file</pre>
La suppression d'une règle (attention, une, et autant vous dire que les doublons ne sont pas conseillés).

En parlant de doublon, étant donné que l'évaluation d'une règle est parfois coûteuse, comme par exemple l'évaluation de tous les <strong>syscall</strong>, la factorisation d'expression est préconisée.
<pre class="brush: bash">k-root # auditctl -l
LIST_RULES: exit,always watch=/etc/shadow perm=rwxa key=shadow-file
LIST_RULES: exit,always watch=/etc/passwd perm=rwa key=passwd-file

k-root # auditctl -d exit,never -W /etc/shadow -k shadow-file

k-root # auditctl -l
LIST_RULES: exit,always watch=/etc/passwd perm=rwa key=passwd-file</pre>
<p style="text-align: left;">A titre d'information, le delete all a déjà été vu dans le fichier de règles : l'option en question est -D. Bon à savoir quand on veut resetter notre daemon :)</p>
<p style="text-align: left;"><!--nextpage--></p>

<h3 style="text-align: left;">Reporting</h3>
Pour ce qui est du reporting, pas de problème non plus, un tas d'options permettant en plus de mettre le focus sur ce que vous avez vraiment envie de consulter.

Pour savoir un peu ce qui tourne, on appellera <strong><em>auditctl</em></strong>.
<pre class="brush: bash">k-root # auditctl -s
AUDIT_STATUS: enabled=1 flag=1 pid=28521 rate_limit=0 backlog_limit=64 lost=0 backlog=0</pre>
Alors que pour le reporting à proprement parler, on passera par <strong><em>aureport</em></strong> : ici pour les évènements...
<pre class="brush: bash">k-root # aureport -e
1840. 02/09/2011 16:14:25 1846 USER_AUTH -1 yes
1841. 02/09/2011 16:14:25 1847 CRED_REFR -1 yes
1842. 02/09/2011 16:14:23 1840 SYSCALL -1 yes</pre>
Et là pour lister les authentifications, réussi ou pas d'ailleurs :)
<pre class="brush: bash">k-root # aureport --auth

Authentication Report
============================================
# date time acct host term exe success event
============================================
1. 02/09/2011 15:16:46 root ? pts/26 /bin/su yes 4
2. 02/09/2011 16:14:25 k-user ? :0 /usr/lib/kde4/libexec/kcheckpass yes 1846</pre>
Et enfin, vue d'ensemble, à la <a href="http://www.k-tux.com/centralisation-et-exploitation-de-logs-premiere-ebauche-des-bonnes-pratiques" target="_blank">logwatch </a>:
<pre class="brush: bash"># aureport --summary

Summary Report
======================
Range of time in logs: 02/09/2011 15:14:10.327 - 02/09/2011 16:17:06.165
Selected time for report: 02/09/2011 15:14:10 - 02/09/2011 16:17:06.165
Number of changes in configuration: 4
Number of changes to accounts, groups, or roles: 0
Number of logins: 0
Number of failed logins: 0
Number of authentications: 2
Number of failed authentications: 0
Number of users: 1
Number of terminals: 8
Number of host names: 1
Number of executables: 23
Number of files: 2
Number of AVC's: 0
Number of MAC events: 0
Number of failed syscalls: 1
Number of anomaly events: 0
Number of responses to anomaly events: 0
Number of crypto events: 0
Number of keys: 2
Number of process IDs: 1847
Number of events: 1930</pre>
A titre d'indication, voila ce que renvoie le help de <em>aureport</em>.
<pre class="brush: bash">k-root # aureport --help
usage: aureport [options]
-a,--avc Avc report
--auth Authentication report
-c,--config Config change report
-cr,--crypto Crypto report
-e,--event Event report
-f,--file File name report
--failed only failed events in report
-h,--host Remote Host name report
--help help
-i,--interpret Interpretive mode
-if,--input
<input type="text" name="" /> use this file as input
--input-logs Use the logs even if stdin is a pipe
-l,--login Login report
-k,--key Key report
-m,--mods Modification to accounts report
-ma,--mac Mandatory Access Control (MAC) report
--node Only events from a specific node
-n,--anomaly aNomaly report
-p,--pid Pid report
-r,--response Response to anomaly report
-s,--syscall Syscall report
--success only success events in report
--summary sorted totals for main object in report
-t,--log Log time range report
-te,--end [end date] [end time] ending date &amp; time for reports
-tm,--terminal TerMinal name report
-ts,--start [start date] [start time] starting data &amp; time for reports
-u,--user User name report
-v,--version Version
-x,--executable eXecutable name report
If no report is given, the summary report will be displayed</pre>
<h3>Auditd et Prelude</h3>
Ce qui est bien avec auditd, c'est qu'il ne fait pas sa soupe dans son coin, il peut aussi très bien échanger avec, mettons, des IDS...

Malheureusement, comme je souhaite me garder encore quelques tips pour plus tard, je n'ai pas joué avec, mais sachez qu'il existe un plugin,<strong> audisp-prelude</strong>, qui, utilisant la librairie de Prelude, permet d'envoyer des <strong>IDMEF</strong> (Intrusion Detection Message Exchange Format).

Ceci étant, il est nécessaire d'avoir un prelude-manager de disponible pour pouvoir agréger et corréler les données.

D'ailleurs, si certains l'utilisent, je les encourage à donner de la voix sur leurs ressentis du produit :)
<h2>Conclusion</h2>
<strong>Auditd</strong> est un outil bien pratique, à porter de main, qui peut être appliqué dans un contexet de sécurisation et de monitoring comme de reporting sur des modifications effectuées sur les données du système.

Il permet d'avoir un état des lieux concis et indiscutable et de pouvoir remonter le fil des évènements sans devoir dépendre totalement des informations fournies (ou pas) par les auteurs des modifs.

Bien entendu, même s'il s'agit d'un outil très puissant et pouvant être redoutable d'efficacité, rien ne pourra remplacer une bonne com au sein de l'équipe :)]]></content:encoded>
			<wfw:commentRss>http://www.k-tux.com/auditd-monitoring-de-donnees-en-temps-reel/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Wipe : suppression de données irréductibles</title>
		<link>http://www.k-tux.com/wipe-suppression-de-donnees-irreductibles</link>
		<comments>http://www.k-tux.com/wipe-suppression-de-donnees-irreductibles#comments</comments>
		<pubDate>Fri, 02 Sep 2011 09:56:38 +0000</pubDate>
		<dc:creator>KXan</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sysadmin apps]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[sécurité]]></category>
		<category><![CDATA[system]]></category>
		<category><![CDATA[Wipe]]></category>

		<guid isPermaLink="false">http://www.k-tux.com/?p=1053</guid>
		<description><![CDATA[Ce tip est issu d&#8217;une situation fort désagréable et inconfortable qui m&#8217;a été donnée de rencontrer : un rm qui ne fonctionne mais alors pas du tout ! Le pire, c&#8217;est que le fichier en question -car c&#8217;est bien un &#8230; <a href="http://www.k-tux.com/wipe-suppression-de-donnees-irreductibles">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[Ce tip est issu d'une situation fort désagréable et inconfortable qui m'a été donnée de rencontrer : un rm qui ne fonctionne mais alors pas du tout !

Le pire, c'est que le fichier en question -car c'est bien un fichier (?!!!?) qui bloque un rm -rf (pourtant, syntaxe ok) semble être un fichier vide.

Le fait est que :
<ol>
	<li>le récalcitrant se trouve sur un partage NFS</li>
	<li>le rm -rf n'a pas eu plus de succès en direct sur le serveur qu'en montage nfs.</li>
	<li>mv ne fonctionne pas, cela va sans dire</li>
	<li>... C'est un fichier vide...</li>
</ol>
Dans ce cas de figure, pas mal d'alternatives fourmillent, et la première étant de supprimer le fichier par son inode :
<pre class="brush: bash">k-srv:/export/beta $ stat HOME/Documents/LaTeX/Rapport4-b4/qt_temp.vM6596
File: `HOME/Documents/LaTeX/Rapport4-b4/qt_temp.vM6596'
Size: 0               Blocks: 0          IO Block: 32768  fichier régulier vide
Device: 1ah/26d Inode: 247409165   Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 3132/ UNKNOWN)   Gid: ( 3000/  k-user)
Access: 2011-09-02 09:43:04.000000000 +0200
Modify: 2011-09-01 16:33:48.000000000 +0200
Change: 2011-09-01 16:33:48.000000000 +0200

k-srv:/export $ ls -il HOME/Documents/LaTeX/Rapport4-b4/qt_temp.vM6596
247409165 -rw-r--r-- 1 3132 k-user 0 2011-09-01 16:33 HOME/Documents/LaTeX/Rapport4-b4/qt_temp.vM6596
k-srv:/export $ su -c "find . -inum 247409165 -exec rm -i {} \;"
Password:
rm: détruire fichier régulier vide `./HOME/Documents/LaTeX/Rapport4-b4/qt_temp.vM6596'? y
rm: ne peut enlever `./HOME/Documents/LaTeX/Rapport4-b4/qt_temp.vM6596': Aucun fichier ou dossier de ce type
k-srv:/export $ ls -il HOME/Documents/LaTeX/Rapport4-b4/qt_temp.vM6596
247409165 -rw-r--r-- 1 3132 k-user 0 2011-09-01 16:33 HOME/Documents/LaTeX/Rapport4-b4/qt_temp.vM6596</pre>
Comme vous pouvez le constater, cela ne fonctionne pas mieux que notre bon vieux rm -rf.
En farfouillant sur le Wired, j'ai pu trouver 2 outils ma foi bien sympa : <strong>Wipe</strong> et <strong>Schred</strong>.

Le second étant plutôt orienté "je te dd plusieurs fois avant de te supprimer", aka sécurité, je me suis penchée sur le premier : <a href="http://wipe.sourceforge.net/" target="_blank">Wipe</a>. Et là, bonne surprise, il est dans les dépôts !
<pre class="brush: bash">k-srv:/export $ apt-get install wipe</pre>
Le premier test, lancé en interactif (histoire de contrôler un minimum ce qui est fait) ne semble pas satisfaisant :
<pre class="brush: bash">k-srv:/export/beta $ su -c "wipe -r -i /export/beta/HOME/"
Password:
wipe: destroy files in `/export/beta/HOME/'? y
wipe: destroy files in `Documents'? y
wipe: destroy files in `LaTeX'? y
wipe: destroy files in `Rapport4-b4'? y
wipe: destroy file `qt_temp.vM6596'? y
wipe: cannot rename `qt_temp.vM6596': Invalid argument
wipe: remove directory `Rapport4-b4'? y
wipe: Directory not empty: unable to remove directory: `Rapport4-b4'
wipe: remove directory `LaTeX'? y
wipe: Directory not empty: unable to remove directory: `LaTeX'
wipe: remove directory `Documents'? y
wipe: Directory not empty: unable to remove directory: `Documents'
wipe: remove directory `/export/beta/HOME'? y
wipe: Directory not empty: unable to remove directory: `HOME'</pre>
Mais en fait si, quoique pas tout-à-fait propre : une arborescence a été créée par le run de wipe, pas très joli, un peu incompréhensible :
<pre class="brush: bash">k-srv:/export/beta $ ll
total 20
4 drwxr-xr-x  3 root root    4096 2011-09-02 09:54 .
12 drwxr-xr-x  3 3132 k-user 12288 2011-09-02 09:54 3s%@elQFgjxuX+YZ...
4 drwxr-xr-x 25 root root    4096 2011-09-01 04:42 ..</pre>
Le retry d'un peu plus haut, en revanche, paie, mais toujours avec ce faux-négatif.

Attention, ici, c'est la <strong>suppression COMPLETE</strong> du répertoire que je lance, car c'était dans mon intention de tout supprimer concernant beta !

Cela n'a pas résolu directement la suppression du fichier fautif ! Et surtout, gare si vous faites un copier/coller, les conséquences sont difficilement réparables...
<pre class="brush: bash">k-srv:/export $ wipe -r -v -f -i /export/beta/
wipe: destroy files in `/export/beta/'? y
wipe: destroy files in `j9E0tfoEivctXXg2Slx_MEYofK#cq...'? y
wipe: cannot rename `qt_temp.vM6596': Invalid argument
wipe: remove directory `LSmlfyE5s1@LTquaetz#%w2...'? y
wipe: Directory not empty: unable to remove directory: `LSmlfyE5s1@LTquaetz#%w...'
wipe: remove directory `74UAnCRudHzgJyZP1ydU1N08D%DNY3t3x5Q0N_HD...'? y
wipe: Directory not empty: unable to remove directory: `74UAnCRudJyZP1ydU1N08D%DN...'
wipe: remove directory `gP6Mw2SssTzzeWBAx7akfCZHw2jN8pMSZqM#qe8n%fc1FMWOAbklWObxvU...'? y
wipe: Directory not empty: unable to remove directory: `gP6Mw2SssTzzeWBAx7R3zakfCZHw2...'
wipe: remove directory `j9E0tfoEivctXXg2Slx_MEYofK#cq.kCGR9jpnAPR4C@xcRKiUJXB8uow...'? y
wipe: Directory not empty: unable to remove directory: `j9E0tfoEivctXXg2Slx_MEYofK#cq...'
wipe: remove directory `/export/beta'? y
wipe: Directory not empty: unable to remove directory: `beta'

k-srv:/export $ ls /export/beta
ls: ne peut accéder /export/beta : Aucun fichier ou dossier de ce type</pre>
Notez que :
<ol>
	<li>mon problème est résolu,</li>
	<li>j'ai dit que les conséquences d'un wipe étaient difficilement réparables.</li>
</ol>
En effet, car comme on trouve des utilitaires de suppression, on en trouve de restauration.
Ca fera d'ailleurs l'objet d'un autre tip  :)

Sur ce, have a nice day !]]></content:encoded>
			<wfw:commentRss>http://www.k-tux.com/wipe-suppression-de-donnees-irreductibles/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Mutt : client mail en ligne de commande</title>
		<link>http://www.k-tux.com/mutt-client-mail-en-ligne-de-commande</link>
		<comments>http://www.k-tux.com/mutt-client-mail-en-ligne-de-commande#comments</comments>
		<pubDate>Mon, 29 Aug 2011 11:45:44 +0000</pubDate>
		<dc:creator>KXan</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sysadmin apps]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[mail]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[remote]]></category>
		<category><![CDATA[scripting]]></category>
		<category><![CDATA[sécurité]]></category>

		<guid isPermaLink="false">http://www.k-tux.com/?p=1051</guid>
		<description><![CDATA[Bonjour à tous ! Parlons peu, parlons bien, j&#8217;ai été confrontée il y a peu au besoin d&#8217;envoyer de manière récurrence un backup de configurations. J&#8217;ai donc été amenée à jouer avec Mutt. Mutt est un client mail en ligne &#8230; <a href="http://www.k-tux.com/mutt-client-mail-en-ligne-de-commande">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[Bonjour à tous !

Parlons peu, parlons bien, j'ai été confrontée il y a peu au besoin d'envoyer de manière récurrence un backup de configurations. J'ai donc été amenée à jouer avec <strong>Mutt</strong>.

<a href="http://www.mutt.org/" target="_blank">Mutt</a> est un client mail en ligne de commande qui permet, entre autre, de pouvoir faire toutes les opérations du client mail natif de Linux, avec des options non négligeables en plus, comme, au hasard, la prise en charge des pièces jointes.
<h2>Mutt : Installation et... Utilisation</h2>
L'installation n'est pas plus difficile que ça, le maniement encore moins :
<pre class="brush: bash">$ apt-get install mutt
$ mutt
q:Quitter  d:Effacer  u:RM-CM-)cup  s:Sauver  m:Message  r:RM-CM-)pondre  g:Groupe  ?:Aide
1 N F Aug 29 To k-tux@192.168.1.105 (   2) test



---Mutt: /var/spool/mail/k-tux [Msgs:1 New:1 0,6K]---(date/date)-------------------(all)---</pre>
Au premier lancement, il vous demande où stocker les préférences, etc... Et l'emplacement par défaut de la mailbox sera très classique : sous <em>/var/spool/mail/</em>.

Mutt se présente un peu comme <a href="http://www.k-tux.com/iftop-visualisation-en-temps-reele-des-connexions" target="_blank">iftop</a>, avec une interface directement faite en ligne de commande. Comme vous pouvez le constater, les principales commandes sont renseignées en haut de l'écran Mutt, qui permettent d'interagir tout-à-fait comme un client mail graphique, comme <strong>Thunderbird</strong>.

Mais il peut également s'utiliser en ligne de commande sans passer par l'interface, ce qui est tout de même mieux pour le scripting :)
Ici, pour l'exemple, test est un fichier contenant la chaine de caractère "Testing Mutt" :
<pre class="brush: bash">$ mutt -s "k-tux test" k-tux@k-tux.com &lt; test</pre>
Les mails envoyés seront stockés sous <em>~/sent</em>, qui est un fichier text :
<pre class="brush: bash">$ cat sent
From k-tux@192.168.1.105 Mon Aug 29 10:50:34 2011
Date: Mon, 29 Aug 2011 10:50:34 +0200
From: k-tux &lt;k-tux@192.168.1.105&gt;
To: k-tux@k-tux.com
Subject: k-tux test
Message-ID: &lt;20110829085034.GA14010@192.168.1.105&gt;
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
User-Agent: Mutt/1.5.20 (2009-06-14)
Status: RO
Content-Length: 13
Lines: 1

Testing Mutt</pre>
Et maintenant, test d'envoi de pièce jointes :
<pre class="brush: bash">$ mutt -s "k-tux test" k-tux@k-tux.com -a /data/k-tux/backup.tar.gz &lt; test

Le ~/sent a rajouté :
From k-tux@192.168.1.105 Mon Aug 29 10:56:51 2011
Date: Mon, 29 Aug 2011 10:56:51 +0200
From: k-tux &lt;k-tux@192.168.1.105&gt;
To: k-tux@k-tux.com
Subject: k-tux test
Message-ID: &lt;20110829085651.GA14297@192.168.1.105&gt;
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="ZGiS0Q5IWpPtfppv"
Content-Disposition: inline
User-Agent: Mutt/1.5.20 (2009-06-14)
Status: RO
Content-Length: 6256
Lines: 96


--ZGiS0Q5IWpPtfppv
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline

Mutt : Testing enclosed data

--ZGiS0Q5IWpPtfppv
Content-Type: application/octet-stream
Content-Disposition: attachment; filename="backup.tar.gz"
Content-Transfer-Encoding: base64

H4sIAJATVk4AA+1dbZPbthH2V9+vYC8fnIxLHUmRVOpxPJMmbuMZx/bEdjqdTKeFSIhCRBI0
AOpO/vVdAJROOgOk7sVMbOOZxDphl3hb7GIXL9Q8WxTRhGO2xmwSJcG3YXh2744RAGZJoj4B
Vz/V32GYRkkchtM0uheEURrE97zkritiQssFYp53j1Eq+viG6J8o5gb5q7Q7HAVHyj8MgSmK
YpD/NJlFTv5jwC7/V6uiKthdDIOj5Z+ABYinIP8kCFMn/zHQI3+UrVCB+e1HwLHynyZROotn
Uv7TKHDyHwNHyD9D2RLfZhRcZ/5PppAeptM4cfIfA8fIn9YLUkwuqvKGZUgBp3FslX8SR1v7
H0aR9P9m0Qz0P7jTllrwhcv/8WvasgzzJyf3Pe/x96/e6O/66z8ZbZsnOZ4TVPv8XYvxe/z4
TKcqhre/PH+yFKJ5dHa2EM0kxxPNPKGsONN/nj0+k1ySXeLxr5hxQusnu+y2CTuOH2jV0BrX
4kmFSP347PK7iaUtBYGxy/EAI8NcMJIJnA8wtnVPft+zbPkEVXkaPz5Tf594HeD7Zec9Ptt1
[...]</pre>
<h3>PGP</h3>
Il est possible d'utiliser PGP pour signer le mail, le chiffrer ou les deux.
Pour cela, en interface, il suffit de taper "p" lors du récapitulatif du mail à envoyer :
<pre class="brush: bash">y:Envoyer  q:Abandonner  t:To  c:CC  s:Subj  a:Attacher fichier  d:Description  ?:Aide
From: K-Tux &lt;k-tux@192.168.1.105&gt;
To: k-tux@k-tux.com
Cc:
Bcc:
Subject: Mutt : Test PGP
Reply-To:
Fcc: ~/sent
Security: Clair


-- Attachements
- I     1 /tmp/mutt-192.168.1.105-3100-15158-0      [text/plain, 7bit, iso-8859-1, 0,1K]
-- Mutt: Compose  [Approx. msg size: 0,1K   Atts: 1]---------------------------------------
(c)hiffrer PGP, (s)igner, (e)n tant que, les (d)eux, en l(i)gne, en clai(r)M-BM- ?</pre>
Ici, on veut chiffrer, donc "c". Cela provoque la mise à jour du champ Security :
<pre class="brush: bash">y:Envoyer  q:Abandonner  t:To  c:CC  s:Subj  a:Attacher fichier  d:Description  ?:Aide
From: K-Tux &lt;k-tux@192.168.1.105&gt;
To: k-tux@k-tux.com
Cc:
Bcc:
Subject: Mutt : Test PGP
Reply-To:
Fcc: ~/sent
PGP: Chiffrer (PGP/MIME)


-- Attachements
- I     1 /tmp/mutt-192.168.1.105-3100-15158-0   [text/plain, 7bit, iso-8859-1, 0,1K]
-- Mutt: Compose  [Approx. msg size: 0,1K   Atts: 1]---</pre>
Mutt demandera alors la clé PGP avant d'envoyer le mail. Et avec ça, mon besoin est totalement comblé -du moins pour l'usage que je voulais en faire :).

Il existe pas mal d'option et de fonctionnalités dans Mutt, que je ne détaillerais pas car à la fois la doc en ligne et le man -voire pour le reste, mutt -h- renvoient de manière concise les options et les fonctionnalités qu'il est possible d'utiliser :)

En bref, pourquoi se priver ?]]></content:encoded>
			<wfw:commentRss>http://www.k-tux.com/mutt-client-mail-en-ligne-de-commande/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Rsnapshot : utilisataire de prise de cliché</title>
		<link>http://www.k-tux.com/rsnapshot-utilisataire-de-prise-de-cliche</link>
		<comments>http://www.k-tux.com/rsnapshot-utilisataire-de-prise-de-cliche#comments</comments>
		<pubDate>Tue, 23 Aug 2011 12:06:32 +0000</pubDate>
		<dc:creator>KXan</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sysadmin apps]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[conf]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[opensrc]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[sécurité]]></category>
		<category><![CDATA[system]]></category>

		<guid isPermaLink="false">http://www.k-tux.com/?p=1040</guid>
		<description><![CDATA[Aujourd&#8217;hui, petit tip sur un utilitaire de sauvegarde / restauration : rsnapshot. Principes Rsnapshot est un outil système qui permet de prendre des clichés de répertoire. Cela permet notamment de sauvegarder localement ou de manière distante les données. Les transferts &#8230; <a href="http://www.k-tux.com/rsnapshot-utilisataire-de-prise-de-cliche">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[Aujourd'hui, petit tip sur un utilitaire de sauvegarde / restauration : <a href="http://rsnapshot.org/" target="_blank">rsnapshot</a>.
<h2>Principes</h2>
Rsnapshot est un outil système qui permet de prendre des clichés de répertoire. Cela permet notamment de sauvegarder localement ou de manière distante les données.

Les transferts de données s'appuient sur rsync : les snapshots de données locales sont effectués via rsync, tandis que pour ceux de données distantes, rsync à travers ssh est utilisé.

Le principal intérêt de rsnapshot est le cron, et le fait que tout s'appuie sur un fichier de configuration situé sous /etc/rsnapshot.conf.
<h2>Pratique</h2>
Pour commencer, nous allons installer -ce serait difficile de s'abstenir- rsnapshot depuis ces sources. A l'heure où j'écris ces lignes, la dernière version stable est la 1.3.1, aussi, si celle-ci venait à évoluer, il vous faudra alors adapter ces lignes en conséquence.

Alors, comme d'habitude, hein, pas de grande difficulté ici :
<pre class="brush: bash">$ wget http://rsnapshot.org/downloads/rsnapshot-1.3.1.tar.gz
$ tar zxvf rsnapshot-1.3.1.tar.gz
$ cd rsnapshot-1.3.1
rsnapshot-1.3.1 $ ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make sets $(MAKE)... (cached) yes
checking for a BSD-compatible install... /usr/bin/install -c
checking for perl... /usr/bin/perl
checking for rsync... /usr/bin/rsync
checking for cp... /bin/cp
checking for rm... /bin/rm
checking for ssh... /usr/bin/ssh
checking for logger... /bin/logger
checking for du... /usr/bin/du
configure: creating ./config.status
config.status: creating Makefile
config.status: creating rsnapshot
config.status: creating rsnapshot-diff
config.status: creating rsnapshot.conf.default
config.status: creating t/support/etc/configtest.conf
config.status: creating t/support/etc/rsync.conf
config.status: creating t/support/etc/gnu_cp.conf
config.status: creating t/support/etc/relative_delete_bugfix.conf
config.status: creating t/configtest.t
config.status: creating t/rsync.t
config.status: creating t/gnu_cp.t
config.status: creating t/relative_delete_bugfix.t

Now type  "make test"    to run the regression test suite.
Then type "make install" to install the program.

After rsnapshot is installed, don't forget to copy
/usr/local/etc/rsnapshot.conf.default to /usr/local/etc/rsnapshot.conf</pre>
Puisque c'est si bien dit, c'est parti pour la séquence make &amp;&amp; make install.
<pre class="brush: bash">rsnapshot-1.3.1 $ make
/usr/bin/pod2man -c '' -n 'rsnapshot' -r '' rsnapshot &gt; rsnapshot.1
/usr/bin/pod2man -c '' -n 'rsnapshot-diff' -r '' rsnapshot-diff &gt; rsnapshot-diff.1

rsnapshot-1.3.1 $ make test
/usr/bin/perl -MTest::Harness -e 'runtests(glob "t/*.t")';
t/configtest.t .............. ok
t/gnu_cp.t .................. ok
t/relative_delete_bugfix.t .. ok
t/rsync.t ................... ok
All tests successful.
Files=4, Tests=5,  1 wallclock secs ( 0.02 usr  0.02 sys +  0.38 cusr  0.10 csys =  0.52 CPU)
Result: PASS

rsnapshot-1.3.1 $ su -c "make install"
Password:
make[1]: entrant dans le répertoire « /usr/local/src/rsnapshot/rsnapshot-1.3.1 »
test -z "/usr/local/bin" || mkdir -p -- "/usr/local/bin"
/usr/bin/install -c 'rsnapshot' '/usr/local/bin/rsnapshot'
/usr/bin/install -c 'rsnapshot-diff' '/usr/local/bin/rsnapshot-diff'
test -z "/usr/local/etc" || mkdir -p -- "/usr/local/etc"
/usr/bin/install -c -m 644 'rsnapshot.conf.default' '/usr/local/etc/rsnapshot.conf.default'
test -z "/usr/local/man/man1" || mkdir -p -- "/usr/local/man/man1"
/usr/bin/install -c -m 644 './rsnapshot.1' '/usr/local/man/man1/rsnapshot.1'
/usr/bin/install -c -m 644 './rsnapshot-diff.1' '/usr/local/man/man1/rsnapshot-diff.1'
make[1]: quittant le répertoire « /usr/local/src/rsnapshot/rsnapshot-1.3.1</pre>
<h3 style="text-align: left;"><!--nextpage--></h3>
<h3 style="text-align: left;">Configuration</h3>
<p style="text-align: left;">Au niveau configuration, 2 fichiers ont été crées, qui ne sont, somme toute, pas si différent l'un de l'autre :</p>

<pre class="brush: bash">$ diff /etc/rsnapshot.conf /etc/rsnapshot.conf.default
27c27
&lt; #snapshot_root        /home/.snapshots/
---
&gt; snapshot_root /.snapshots/
57c57
&lt; cmd_ssh       /usr/bin/ssh
---
&gt; #cmd_ssh      /usr/bin/ssh
167c167
&lt; link_dest     1
---
&gt; #link_dest    0</pre>
Nous allons nous baser sur le .conf et voir un peu de quoi il en retourne.
<pre class="brush: bash">$ cat /etc/rsnapshot.conf
Password:
#################################################
# rsnapshot.conf - rsnapshot configuration file #
#################################################
# PLEASE BE AWARE OF THE FOLLOWING RULES:
# This file requires tabs between elements
# Directories require a trailing slash:
#   right: /home/                               #
#   wrong: /home                                #
#################################################

#######################
# CONFIG FILE VERSION #
#######################

config_version  1.2

###########################
# SNAPSHOT ROOT DIRECTORY #
###########################

# All snapshots will be stored under this root directory.
#
#snapshot_root  /home/.snapshots/

# If no_create_root is enabled, rsnapshot will not automatically create the
# snapshot_root directory. This is particularly useful if you are backing
# up to removable media, such as a FireWire or USB drive.
#
#no_create_root 1

#################################
# EXTERNAL PROGRAM DEPENDENCIES #
#################################

# LINUX USERS:   Be sure to uncomment "cmd_cp". This gives you extra features.
# EVERYONE ELSE: Leave "cmd_cp" commented out for compatibility.
#
# See the README file or the man page for more details.
#
cmd_cp          /bin/cp

# uncomment this to use the rm program instead of the built-in perl routine.
#
cmd_rm          /bin/rm

# rsync must be enabled for anything to work. This is the only command that
# must be enabled.
#
cmd_rsync       /usr/bin/rsync

# Uncomment this to enable remote ssh backups over rsync.
#
cmd_ssh /usr/bin/ssh

# Comment this out to disable syslog support.
#
cmd_logger      /bin/logger

# Uncomment this to specify the path to "du" for disk usage checks.
# If you have an older version of "du", you may also want to check the
# "du_args" parameter below.
#
cmd_du          /usr/bin/du

# Uncomment this to specify the path to rsnapshot-diff.
#
cmd_rsnapshot_diff      /usr/bin/rsnapshot-diff

# Specify the path to a script (and any optional arguments) to run right
# before rsnapshot syncs files
#
#cmd_preexec    /path/to/preexec/script

# Specify the path to a script (and any optional arguments) to run right
# after rsnapshot syncs files
#
#cmd_postexec   /path/to/postexec/script

#########################################
#           BACKUP INTERVALS            #
# Must be unique and in ascending order #
# i.e. hourly, daily, weekly, etc.      #
#########################################

interval        hourly  6
interval        daily   7
interval        weekly  4
#interval       monthly 3

############################################
#              GLOBAL OPTIONS              #
# All are optional, with sensible defaults #
############################################

# Verbose level, 1 through 5.
# 1     Quiet           Print fatal errors only
# 2     Default         Print errors and warnings only
# 3     Verbose         Show equivalent shell commands being executed
# 4     Extra Verbose   Show extra verbose information
# 5     Debug mode      Everything
#
verbose         2

# Same as "verbose" above, but controls the amount of data sent to the
# logfile, if one is being used. The default is 3.
#
loglevel        3

# If you enable this, data will be written to the file you specify. The
# amount of data written is controlled by the "loglevel" parameter.
#
logfile /var/log/rsnapshot

# If enabled, rsnapshot will write a lockfile to prevent two instances
# from running simultaneously (and messing up the snapshot_root).
# If you enable this, make sure the lockfile directory is not world
# writable. Otherwise anyone can prevent the program from running.
#
lockfile        /var/run/rsnapshot.pid

# Default rsync args. All rsync commands have at least these options set.
#
#rsync_short_args       -a
#rsync_long_args        --delete --numeric-ids --relative --delete-excluded

# ssh has no args passed by default, but you can specify some here.
#
#ssh_args       -p 22

# Default arguments for the "du" program (for disk space reporting).
# The GNU version of "du" is preferred. See the man page for more details.
# If your version of "du" doesn't support the -h flag, try -k flag instead.
#
#du_args        -csh

# If this is enabled, rsync won't span filesystem partitions within a
# backup point. This essentially passes the -x option to rsync.
# The default is 0 (off).
#
#one_fs         0

# The include and exclude parameters, if enabled, simply get passed directly
# to rsync. If you have multiple include/exclude patterns, put each one on a
# separate line. Please look up the --include and --exclude options in the
# rsync man page for more details on how to specify file name patterns.
#
#include        ???
#include        ???
#exclude        ???
#exclude        ???

# The include_file and exclude_file parameters, if enabled, simply get
# passed directly to rsync. Please look up the --include-from and
# --exclude-from options in the rsync man page for more details.
#
#include_file   /path/to/include/file
#exclude_file   /path/to/exclude/file

# If your version of rsync supports --link-dest, consider enable this.
# This is the best way to support special files (FIFOs, etc) cross-platform.
# The default is 0 (off).
#
link_dest       1

# When sync_first is enabled, it changes the default behaviour of rsnapshot.
# Normally, when rsnapshot is called with its lowest interval
# (i.e.: "rsnapshot hourly"), it will sync files AND rotate the lowest
# intervals. With sync_first enabled, "rsnapshot sync" handles the file sync,
# and all interval calls simply rotate files. See the man page for more
# details. The default is 0 (off).
#
#sync_first     0

# If enabled, rsnapshot will move the oldest directory for each interval
# to [interval_name].delete, then it will remove the lockfile and delete
# that directory just before it exits. The default is 0 (off).
#
#use_lazy_deletes       0

# Number of rsync re-tries. If you experience any network problems or
# network card issues that tend to cause ssh to crap-out with
# "Corrupted MAC on input" errors, for example, set this to a non-zero
# value to have the rsync operation re-tried
#
#rsync_numtries 0

###############################
### BACKUP POINTS / SCRIPTS ###
###############################

# LOCALHOST
backup  /home/          localhost/
backup  /etc/           localhost/
backup  /usr/   localhost/
#backup /var/log/rsnapshot              localhost/
#backup /etc/passwd     localhost/
#backup /home/foo/My Documents/         localhost/
#backup /foo/bar/       localhost/      one_fs=1, rsync_short_args=-urltvpog
#backup_script  /usr/bin/backup_pgsql.sh        localhost/postgres/

# EXAMPLE.COM
#backup_script  /bin/date "+ backup of example.com started at %c"       unused1
#backup root@example.com:/home/ example.com/    +rsync_long_args=--bwlimit=16,exclude=core
#backup root@example.com:/etc/  example.com/    exclude=mtab,exclude=core
#backup_script  ssh root@example.com "mysqldump -A &gt; /var/db/dump/mysql.sql"    unused2
#backup root@example.com:/var/db/dump/  example.com/
#backup_script  /bin/date       "+ backup of example.com ended at %c"   unused9

# CVS.SOURCEFORGE.NET
#backup_script  /usr/bin/backup_rsnapshot_cvsroot.sh    rsnapshot.cvs.sourceforge.net/

# RSYNC.SAMBA.ORG
#backup rsync://rsync.samba.org/rsyncftp/       rsync.samba.org/rsyncftp/</pre>
Telle quelle, la configuration créée n'est pas utilisable, et le test de celle-ci ne tarde pas à sortir en erreur :
<pre class="brush: bash">rsnapshot-1.3.1 $ rsnapshot configtest
1823: priorité précédente 0, nouvelle priorité 19
----------------------------------------------------------------------------
rsnapshot encountered an error! The program was invoked with these options:
/usr/bin/rsnapshot configtest
----------------------------------------------------------------------------
ERROR: /etc/rsnapshot.conf on line 196:
ERROR: backup /home/ localhost/ - snapshot_root needs to be \
defined before backup points
ERROR: /etc/rsnapshot.conf on line 197:
ERROR: backup /etc/ localhost/ - snapshot_root needs to be defined before \
backup points
ERROR: /etc/rsnapshot.conf on line 198:
ERROR: backup /usr/ localhost/ - snapshot_root needs to be defined before \
backup points
ERROR: ---------------------------------------------------------------------
ERROR: Errors were found in /etc/rsnapshot.conf,
ERROR: rsnapshot can not continue. If you think an entry looks right, make
ERROR: sure you don't have spaces where only tabs should be.</pre>
En fait, au lieu d'une erreur, il s'agit surtout de la non prise en compte des défauts, notamment, comme c'est explicitement dit, le snapshot_root. Pour le coup, il faut donc décommenter le paramètre et, tant qu'à faire, le customiser.

La partie en question est située au tout début du fichier de conf.
<pre class="brush: bash"># All snapshots will be stored under this root directory.
#
snapshot_root  /home/.snapshots/</pre>
Même chose pour vos backups, car sauvegarder /etc et /usr n'est parfois pas essentiel / suffisant. On travaillera donc sur la partie qui parle de :
<pre class="brush: bash">backup  /home/          localhost/
backup  /etc/           localhost/
backup  /usr/   localhost/</pre>
Pour test, j'ai commenté le backup de /etc et /usr. Vérifions notre configuration à nouveau :
<pre class="brush: bash">$ rsnapshot configtest
1880: priorité précédente 0, nouvelle priorité 19
Syntax OK</pre>
Un test rapide (-t) renverra les lignes de commandes qui seront exécutées si on relance sans l'option -t, option qui représente une sorte de dry run.
<pre class="brush: bash">$ rsnapshot -t hourly
1936: priorité précédente 0, nouvelle priorité 19
echo 1936 &gt; /var/run/rsnapshot.pid
mkdir -m 0700 -p /home/.snapshots/
mkdir -m 0755 -p /home/.snapshots/hourly.0/
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded \
/home/k-tux /home/.snapshots/hourly.0/localhost/
mkdir -m 0755 -p /home/.snapshots/hourly.0/
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded /etc \
/home/.snapshots/hourly.0/localhost/
mkdir -m 0755 -p /home/.snapshots/hourly.0/
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded /usr \
/home/.snapshots/hourly.0/localhost/
touch /home/.snapshots/hourly.0/</pre>
<h3>Sauvegarde</h3>
Puisqu'après tout il ne faut jamais craindre la sauvegarde, qu'à cela ne tienne, lançons le comme dans la vraie vie :
<pre class="brush: bash">$ rsnapshot hourly
2187: priorité précédente 0, nouvelle priorité 19</pre>
Et vérifions ce qui a été crée :
<pre class="brush: bash">$ ll /home/.snapshots/hourly.0/localhost/home/
total 12
4 drwxr-xr-x  3 root      root   4096 2011-08-21 20:03 .
4 drwxr-xr-x  3 root      root   4096 2011-08-22 11:09 ..
4 drwxr-xr-x 83 k-tux k-tux 4096 2011-08-22 10:31 k-tux</pre>
Ce qui est bien, c'est qu'on n'a pas vraiment besoin de tout faire soi-même. Par exemple, Rsnapshot dispose d'une option bien nommée "du" qui renvoie la taille des données sauvegardées.
<pre class="brush: bash">$ rsnapshot du
2540: priorité précédente 0, nouvelle priorité 19
720M    /home/.snapshots/hourly.0/
720M    total</pre>
La relance du hourly crée un autre répertoire :
<pre class="brush: bash">$ rsnapshot hourly
3019: priorité précédente 0, nouvelle priorité 19

$ ll /home/.snapshots/hourly*
hourly.0/ hourly.1/</pre>
En réalité, ici, hourly.0 est toujours l'image la plus récente. En pratique, rsnapshot crée le répertoire et copie l'image précédente dedans avant d'effectuer la sauvegarde des données dans hourly.0, comme nous l'a précédemment indiqué le dry-run :
<pre class="brush: bash">$ rsnapshot -t hourly
4732: priorité précédente 0, nouvelle priorité 19
echo 4732 &gt; /var/run/rsnapshot.pid
mv /home/.snapshots/hourly.1/ /home/.snapshots/hourly.2/
mv /home/.snapshots/hourly.0/ /home/.snapshots/hourly.1/
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded \
--link-dest=/home/.snapshots/hourly.1/localhost/ /home/ \
/home/.snapshots/hourly.0/localhost/
touch /home/.snapshots/hourly.0/</pre>
Il s'agit donc bien de rotation des sauvegardes.

A l'image de rsnapshot du, il existe également une version du diff, par contre, pas très pratique, il faut mentionner les répertoires en eux-mêmes. La version de base n'est pas très exploitable...
<pre class="brush: bash">$ rsnapshot-diff /home/.snapshots/hourly.0 /home/.snapshots/hourly.1
Comparing /home/.snapshots/hourly.1 to /home/.snapshots/hourly.0
Between /home/.snapshots/hourly.1 and /home/.snapshots/hourly.0:
17 were added, taking 1006442932 bytes;
17 were removed, saving 446593057 bytes;</pre>
Oui, mais !!! En réalité, rsnapshot permet d'être plus précis (-v) ou encore plus précis que précis (-V). Et là, effectivement, c'est tout de suite mieux :)
<pre class="brush: bash">$ rsnapshot-diff -v /home/.snapshots/hourly.0 /home/.snapshots/hourly.1
Comparing /home/.snapshots/hourly.1 to /home/.snapshots/hourly.0
+ /home/.snapshots/hourly.0/localhost/home/k-tux/.viminfo
+ /home/.snapshots/hourly.0/localhost/home/k-tux/.recently-used.xbel
+ /home/.snapshots/hourly.0/localhost/home/k-tux/.xsession-errors
- /home/.snapshots/hourly.1/localhost/home/k-tux/.viminfo
- /home/.snapshots/hourly.1/localhost/home/k-tux/.recently-used.xbel
[...]
Between /home/.snapshots/hourly.1 and /home/.snapshots/hourly.0:
17 were added, taking 1006442932 bytes;
17 were removed, saving 446593057 bytes;</pre>
Voilà, il ne reste plus qu'à se concocter son cron, qui ressemblera à un truc du genre :<a name="automation"></a>

0 */4 * * * /usr/local/bin/rsnapshot hourly

Il est important de noter que si un fichier ne change pas d'une version à l'autre, il ne sera pas dupliqué mais sera dans les faits un hard link sur la donnée. Ce n'est que lorsque la donnée est modifiée que le lien est supprimé et la donnée mise à jour et sauvegardée. Du coup, il n'y a pas de consommation inutile de place.

&nbsp;
<h3>Hourly, Daily, Weekly</h3>
C'est bien joli tout ça, mais lorsque l'on met notre hourly, de quoi il en retourne ?

En fait, rsnapshot propose 3 modes de sauvegarde : hourly, daily et weekly. Ces noms sont assez évocateurs, mais le fonctionnement de rsnapshot mérite d'être explicité.

Pour expliquer le fonctionnement, il faut expliquer le paramètre interval qui est mentionné dans la configuration.
<pre class="brush: bash">interval        hourly  6
interval        daily   7
interval        weekly  4</pre>
Par exemple, prenons la première ligne mentionnant hourly : l'intervalle définit hourly tel que 6 sauvegardes par jour sont faites. Ce qui signifie que faire tourner 7 fois hourly revient à prendre 6 snapshots hourly et de passer le 7ème, le plus récent en daily.

Il est important -et souligné- que les paramétrages d'interval doivent être mentionnés du plus petit au plus grand dans le fichier de conf. Cela vient du fait que c'ets la première occurrence d'interval qui va récupérer les données du filesystem, tandis que les autres utiliseront celles de la première occurrence.
<h3>Restauration</h3>
Les restaurations ne sont pas plus compliquées qu'un rsync : il suffit de récupérer la dernière des sauvegardes effectuées -ou du moins celle qui correspond au besoin-, et d'en récupérer les données, de façon classique.

Étrangement, et cela contraste par ailleurs avec la version du et diff, rsnapshot ne fournit pas d'option pour faire la restauration en elle-même. Mais qu'importe, puisque vous pouvez :)
<h3>Conclusion</h3>
Un petit outil somme toute bien pratique qu'est rsnapshot : gain de place, de lisibilité, conf aux petits oignons... Il ne vous reste plus qu'à l'utiliser en fait :)

Enjoy !]]></content:encoded>
			<wfw:commentRss>http://www.k-tux.com/rsnapshot-utilisataire-de-prise-de-cliche/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bcfg2 : la gestion de conf du bout des doigts</title>
		<link>http://www.k-tux.com/bcfg2-la-gestion-de-conf-du-bout-des-doigts</link>
		<comments>http://www.k-tux.com/bcfg2-la-gestion-de-conf-du-bout-des-doigts#comments</comments>
		<pubDate>Thu, 21 Jul 2011 13:49:18 +0000</pubDate>
		<dc:creator>KXan</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sysadmin apps]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[authentication]]></category>
		<category><![CDATA[Bcfg2]]></category>
		<category><![CDATA[conception]]></category>
		<category><![CDATA[conf]]></category>
		<category><![CDATA[install]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[opensrc]]></category>
		<category><![CDATA[planet-libre]]></category>

		<guid isPermaLink="false">http://www.k-tux.com/?p=1029</guid>
		<description><![CDATA[Il n&#8217;y a pas si longtemps que ça, je vous avais parlé d&#8217;un gestionnaire de conf, Puppet, qui s&#8217;appuyait sur son propre langage descriptif et jouait avec du Ruby. Après quelques essais ma foi assez pertinents, je me suis aperçue &#8230; <a href="http://www.k-tux.com/bcfg2-la-gestion-de-conf-du-bout-des-doigts">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[Il n'y a pas si longtemps que ça,<a href="http://www.k-tux.com/puppet-gestionnaire-de-configuration" target="_blank"> je vous avais parlé d'un gestionnaire de conf, Puppet</a>, qui s'appuyait sur son propre langage descriptif et jouait avec du <strong>Ruby</strong>.

Après quelques essais ma foi assez pertinents, je me suis aperçue que <strong>Puppet</strong> était somme toute un peu lent : pour 3 packages (certes, il y avait du java dans le tas) et 2 conf, plus de 20 minutes étaient nécessaires pour mettre à niveau les nodes.

Un autre fâcheux défaut est que, par défaut, il agrège toutes les instructions dans un même espace, sans tenir compte de la séquence selon laquelle ils sont définis.

Pour le coup, les résultats sont pour le moins inattendus, surtout si on est dans un cas de figure où l'on doit passer une instruction (exemple : définition des dépôts officiels) avant une autre (installation de package).

Au final, l'organisation des manifests finit, par défaut en un gigantesque mashup d'instructions. Pas trop sympa quand, naif, on n'y a pas pensé et passé des heures à tout bien organiser. Le seul moyen d'échapper à ce mécanisme est de passer par de lourdes définitions de dépendances.

Il était temps de faire jouer <a href="http://alternativeto.net/" target="_blank">AlternativeTo</a>... Et de tomber sur <strong>bcfg2</strong>, un gestionnaire de conf s'appuyant sur du python ! Retour sur une conf aux petits oignons !
<h2>Principes de fonctionnement</h2>
Dans l'absolu, le fonctionnement de bcfg2 est assez similaire à celui de Puppet  : on a un agent qui interroge le serveur, et exécute -ou pas- les modifications.

Après, étant un peu flemmarde et n'étant pas trop pour la copie illégitime de contenu, je vous renvoie sur <a href="http://trac.mcs.anl.gov/projects/bcfg2" target="_blank">le fonctionnement détaillé au poil du projet</a> !
<h2>Un peu de technique</h2>
<h3>Installation</h3>
Comme d'habitude, on partira des sources : fraîches, dispo, et surtout dernière version :)
<pre class="brush: bash">$ cd /usr/local/src
$ wget ftp://ftp.mcs.anl.gov/pub/bcfg/bcfg2-1.1.2.tar.gz
$ tar zxvf bcfg2-1.1.2.tar.gz
$ python setup.py build
$ python setup.py install</pre>
<pre class="brush: bash">$ bcfg2-admin init
Store bcfg2 configuration in [/etc/bcfg2.conf]:
Location of bcfg2 repository [/var/lib/bcfg2]:
Input password used for communication verification (without echoing; leave blank for a random):
What is the server's hostname [bcfg2-server]:
Input the server location [https://bcfg2-server:6789]:
Input base Operating System for clients:
1: Redhat/Fedora/RHEL/RHAS/Centos
2: SUSE/SLES
3: Mandrake
4: Debian
5: Ubuntu
6: Gentoo
7: FreeBSD
: 5
Generating a 2048 bit RSA private key
.......+++
........+++
writing new private key to '/etc/bcfg2.key'
-----
Signature ok
subject=/C=US/ST=Illinois/L=Argonne/CN=bcfg2-server.k-tux.com
Getting Private key
Repository created successfuly in /var/lib/bcfg2</pre>
Bon, certificat un peu faussé parce que <strong>K-Tux</strong>, dans l'Illinois, c'est un peu tiré par les cheveux, mais bon, en s'en contentera :)
<h3>Configuration du service</h3>
La configuration du serveur en lui-même (je veux dire par là, le paramétrage du service, hein, pas celui concernant les nodes qui vont le solliciter) se situe tout simplement sous <em>/etc</em> et se compose de 3 éléments : la conf, la clé et le certificat en lui-même.
<pre class="brush: bash">bcfg2-server $ ls /etc/bc*
bcfg2.conf  bcfg2.crt   bcfg2.key</pre>
Un petit start du service pour se rendre compte du truc :
<pre class="brush: bash">bcfg2-server $ bcfg2-server start
Handled 14 events in 0.017s
service available at https://bcfg2-server.k-tux.com:6789
serving bcfg2-server at https://bcfg2-server.k-tux.com:6789
serve_forever() [start]</pre>
...Qui reste en foreground, mais c'est pas plus mal pour voir ce qui se passe !

La première conf est celle du Hello World : tester le service en local. Notre serveur sera donc, pour cette fois-ci du moins, également notre node. On lance donc la partie cliente, avec les options qui vont bien : -q (query) -v (verbose) -n (dry-run mode)
<pre class="brush: bash">bcfg2-server $ bcfg2 -q -v -n
Loaded tool drivers:
Action     Chkconfig  POSIX      RPMng

Phase: initial
Correct entries:        0
Incorrect entries:      0
Total managed entries:  0
Unmanaged entries:      2754

Phase: final
Correct entries:        0
Incorrect entries:      0
Total managed entries:  0
Unmanaged entries:      2754</pre>
C'est un peu violent de se prendre 2754 Unmanaged entries dans la tronche, mais pas d'erreur, le serveur nous renvoie tout simplement un :
<pre class="brush: bash">Generated config for bcfg2-server.k-tux.com in 0.001s
Client bcfg2-server.k-tux.com reported state clean</pre>
En clair, il nous reste 2754 packages à configurer.
<h3>Configuration du client en local</h3>
Il faut savoir, et c'est intéressant car c'est là que vous allez bosser, que la configuration des paramétrages pour les nodes tapant sur votre bcfg2-server se situe par défaut sous /var/lib/bcfg2. Là-dedans, vous avez tout une arborescence qui a été mise en place lors de l'installation :
<pre class="brush: bash">bcfg2-server $ ls -lsaR  /var/lib/bcfg2
/var/lib/bcfg2:
total 40
4 drwxr-xr-x 10 root root 4096 2011-07-06 16:14 .
4 drwxr-xr-x 48 root root 4096 2011-07-06 16:14 ..
4 drwxr-xr-x  2 root root 4096 2011-07-06 16:14 Base
4 drwxr-xr-x  2 root root 4096 2011-07-06 16:14 Bundler
4 drwxr-xr-x  2 root root 4096 2011-07-06 16:14 Cfg
4 drwxr-xr-x  2 root root 4096 2011-07-06 16:14 etc
4 drwxr-xr-x  2 root root 4096 2011-07-06 16:14 Metadata
4 drwxr-xr-x  2 root root 4096 2011-07-06 16:14 Pkgmgr
4 drwxr-xr-x  2 root root 4096 2011-07-06 16:14 Rules
4 drwxr-xr-x  2 root root 4096 2011-07-06 16:14 SSHbase

/var/lib/bcfg2/Base:
total 8
4 drwxr-xr-x  2 root root 4096 2011-07-06 16:14 .
4 drwxr-xr-x 10 root root 4096 2011-07-06 16:14 ..

/var/lib/bcfg2/Bundler:
total 8
4 drwxr-xr-x  2 root root 4096 2011-07-06 16:14 .
4 drwxr-xr-x 10 root root 4096 2011-07-06 16:14 ..

/var/lib/bcfg2/Cfg:
total 8
4 drwxr-xr-x  2 root root 4096 2011-07-06 16:14 .
4 drwxr-xr-x 10 root root 4096 2011-07-06 16:14 ..

/var/lib/bcfg2/etc:
total 8
4 drwxr-xr-x  2 root root 4096 2011-07-06 16:14 .
4 drwxr-xr-x 10 root root 4096 2011-07-06 16:14 ..

/var/lib/bcfg2/Metadata:
total 16
4 drwxr-xr-x  2 root root 4096 2011-07-06 16:14 .
4 drwxr-xr-x 10 root root 4096 2011-07-06 16:14 ..
4 -rw-r--r--  1 root root  111 2011-07-06 16:14 clients.xml
4 -rw-r--r--  1 root root  354 2011-07-06 16:14 groups.xml

/var/lib/bcfg2/Pkgmgr:
total 8
4 drwxr-xr-x  2 root root 4096 2011-07-06 16:14 .
4 drwxr-xr-x 10 root root 4096 2011-07-06 16:14 ..

/var/lib/bcfg2/Rules:
total 8
4 drwxr-xr-x  2 root root 4096 2011-07-06 16:14 .
4 drwxr-xr-x 10 root root 4096 2011-07-06 16:14 ..

/var/lib/bcfg2/SSHbase:
total 8
4 drwxr-xr-x  2 root root 4096 2011-07-06 16:14 .
4 drwxr-xr-x 10 root root 4096 2011-07-06 16:14 ..</pre>
Et par défaut, et bien vous avez vraiment peu de choses :)

En  fait, seuls /var/lib/bcfg2/Metadata/clients.xml et groups.xml sont définis. Soit dit en passant, ce sont ces fichiers qui vont permettre d'associer un profil à un node, le profil pouvant ensuite se moduler à l'infini, par le biais de Bundle et d'autres subtilités. Jetons-y un oeil, pour le coup :
<pre class="brush: bash">bcfg2-server $ cat /var/lib/bcfg2/Metadata/clients.xml
&lt;Clients version="3.0"&gt;
&lt;Client profile="basic" pingable="Y" pingtime="0" name="bcfg2-server.k-tux.com"/&gt;
&lt;/Clients&gt;</pre>
Ici, notre client (qui est aussi le serveur) est associé au profil par défaut; "basic". pinguable et pingtime parlent d'eux même.

Pour ce qui est de groups.xml, c'est la même trame : une série de &lt;Group&gt; sont définis, par défaut vides et fonction de la distribution du client.
<pre class="brush: bash">bcfg2-server $ cat /var/lib/bcfg2/Metadata/groups.xml
&lt;Groups version='3.0'&gt;
&lt;Group profile='true' public='true' default='true' name='basic'&gt;
&lt;Group name='ubuntu'/&gt;
&lt;/Group&gt;
&lt;Group name='ubuntu'/&gt;
&lt;Group name='debian'/&gt;
&lt;Group name='freebsd'/&gt;
&lt;Group name='gentoo'/&gt;
&lt;Group name='redhat'/&gt;
&lt;Group name='suse'/&gt;
&lt;Group name='mandrake'/&gt;
&lt;Group name='solaris'/&gt;
&lt;/Groups&gt;</pre>
<p style="text-align: left;">A noter que 2 types de groupes existent : les publics, qui sont en fait les entrées par lesquelles les clients accèdent à leur catalogue, et les autres, qui ne sont pas directement visibles par les clients mais servent à mieux organiser les catégories.</p>
<p style="text-align: left;"><!--nextpage--></p>

<h3 style="text-align: left;">Jouer avec les conf</h3>
Le premier jeu va consister à mettre à jour une conf sur un client.Les conf, les fichiers texte e, général sont toujours stockés dans /var/lib/bcfg2/Cfg.

Pour jouer donc, tapons et modifions d'abord nos jolis xml :
<pre class="brush: bash">bcfg2-server:/var/lib/bcfg2 $ cat Metadata/groups.xml
&lt;Groups version='3.0'&gt;
&lt;Group profile='true' public='true' default='true' name='basic'&gt;
&lt;Group name='ubuntu'/&gt;
&lt;/Group&gt;
&lt;Group name='debian'/&gt;
&lt;Group name='ubuntu'&gt;
&lt;Bundle name='release'/&gt;
&lt;/Group&gt;
&lt;/Groups&gt;

/var/lib/bcfg2 $ cat Bundler/release.xml
&lt;Bundle name='release' version='2.0'&gt;
&lt;Path name="/etc/ubuntu-release"/&gt;
&lt;/Bundle&gt;</pre>
Bien sûr, il faut tout de même mettre la conf dans un endroit précis, distinct du système (que se passerait-il si ce ne sont pas les mêmes OS ?). Pour cela, il suffit de créer un dir portant le path et le nom de la conf sous /var/lib/bcfg2/Cfg/. Par exemple, ici, on va :
<pre class="brush: bash">bcfg2-server $ mkdir -p /var/lib/bcfg2/Cfg/etc/ubuntu-release/
bcfg2-server $ cp /etc/ubuntu-release /var/lib/bcfg2/Cfg/etc/ubuntu-release/</pre>
Enfantin, n'est-ce pas ? Le plus embêtant, c'est que j'ai dû redémarrer le service pour qu'il prenne en compte les changements.
<pre class="brush: bash">bcfg2-server $ bcfg2-server start
service available at https://bcfg2.k-tux.com:6789
serving bcfg2-server at https://bcfg2.k-tux.com:6789
serve_forever() [start]
Handled 30 events in 0.020s</pre>
Lançons le client,qui dispose de son ubuntu-release correctement paramétré :
<pre class="brush: bash">bcfg2-server $ bcfg2 -q -v -n
Loaded tool drivers:
Action     Chkconfig  POSIX      RPMng

Phase: initial
Correct entries:        1
Incorrect entries:      0
Total managed entries:  1
Unmanaged entries:      2754

Phase: final
Correct entries:        1
Incorrect entries:      0
Total managed entries:  1
Unmanaged entries:      2754</pre>
Et cette fois, qui a volontairement le ubuntu-release tronqué :
<pre class="brush: bash">bcfg2-server $ bcfg2 -q -v -n
Loaded tool drivers:
Action     Chkconfig  POSIX      RPMng

Phase: initial
Correct entries:        0
Incorrect entries:      1
Total managed entries:  1
Unmanaged entries:      2759</pre>
Le dry-run mode ne faisant rien de spécial sur le système, il se contente de nous broncher une Incorrect entry. Virons le dry-run et voyons si la conf redescend bien comme il faut !
<pre class="brush: bash">bcfg2-server $ bcfg2 -q -v
Loaded tool drivers:
Action     Chkconfig  POSIX      RPMng

Phase: initial
Correct entries:        0
Incorrect entries:      1
Total managed entries:  1
Unmanaged entries:      2759

Installing ConfigFile /etc/ubuntu-release
The Following Bundles have been modified:
release

Phase: final
Correct entries:        1
Incorrect entries:      0
Total managed entries:  1
Unmanaged entries:      2759</pre>
Clair, net, concis : notre conf est bien redescendue !

C'est bien joli tout ça, mais tant qu'à y être, autant voir les choses en grand :) Passons donc en multi clients !
<h3>Client - Serveur distincts</h3>
Notre client, lui, n'est plus sous ubuntu comme le serveur mais sur une autre machine , en Debian 6.0.1. En réalité, que se passe-t-il qui est différent de notre mode client=serveur ? Et bien, rien de spécial, si ce n'est qu'on a rajouté une entrée dans le clients.xml.
<pre class="brush: bash">bcfg2-server $ /var/lib/bcfg2 $ cat Metadata/clients.xml
&lt;Clients version="3.0"&gt;
&lt;Client profile="basic" pingable="Y" pingtime="0" name="bcgf2-server.k-tux.com"/&gt;
&lt;Client profile="deb" pingable="Y" pingtime="0" name="bcfg2cli-deb.k-tux.com"/&gt;
&lt;/Clients&gt;</pre>
Notre groups.xml est aussi enrichi, puisque l'OS est différent et qu'il existe pile poil la bonne catégorie pour ce type de machine :

bcfg2-server&lt;Groups version='3.0'&gt;
&lt;Group profile='true' public='true' default='true' name='basic'&gt;
&lt;Group name='ubuntu'/&gt;
&lt;/Group&gt;
&lt;Group profile='true' public='true' default='true' name='deb'&gt;
&lt;Group name='debian'/&gt;
&lt;/Group&gt;
&lt;Group name='ubuntu'&gt;
&lt;Bundle name='release'/&gt;
&lt;/Group&gt;
&lt;Group name='debian'/&gt;
&lt;/Groups&gt;

Au niveau du client, c'est un peu plus palpable :
<pre class="brush: bash">bcfg2cli-deb $ apt-get update &amp;&amp; apt-get upgrade
bcfg2cli-deb $ apt-get install bcfg2
Creating config file /etc/bcfg2.conf with new version</pre>
Forcément, la conf par défaut n'est pas valide, puisque pour fonctionner doit d'ailleurs directement taper sur le serveur (logique). Avant, on avait donc ça :
<pre class="brush: bash">bcfg2cli-deb $ cat /etc/bcfg2.conf
[communication]
protocol = xmlrpc/ssl
password = foobat
# certificate = /etc/bcfg2.key
# key = /etc/bcfg2.key

[components]
bcfg2 = https://localhost:6789</pre>
Et après modification du general password et du serveur sur lequel taper :
<pre class="brush: bash">bcfg2cli-deb $ cat /etc/bcfg2.conf
[communication]
protocol = xmlrpc/ssl
password = sF9Xlpuv
# certificate = /etc/bcfg2.key
# key = /etc/bcfg2.key

[components]
bcfg2 = https://bcfg2-server.k-tux.com:6789</pre>
On lance le client :
<pre class="brush: bash">bcfg2cli-deb $ bcfg2 -qvn
No ca is specified. Cannot authenticate the server with SSL.
No ca is specified. Cannot authenticate the server with SSL.
Loaded tool drivers:
APT      Action   DebInit  POSIX

Phase: initial
Correct entries:        0
Incorrect entries:      0
Total managed entries:  0
Unmanaged entries:      365

Phase: final
Correct entries:        0
Incorrect entries:      0
Total managed entries:  0
Unmanaged entries:      365

No ca is specified. Cannot authenticate the server with SSL.</pre>
Au niveau du serveur, il existe des outils permettant de bien visualiser ce que l'on a, sans forcément rentrer dans le xml. Un peu comme... bcfg2-info :
<pre class="brush: bash">bcfg2-server $ bcfg2-info "clients"
Handled 31 events in 0.012s
cli Client          | Profile
============================
bcfg2cli-deb   | deb
bcfg2-server  | basic</pre>
<h3>Installer des packages via bcfg2</h3>
Forcément, la conf ne fait pas tout, et on aimerait -moi en tout cas- pouvoir monter un noeud qui aurait été victime d'une installation très basique pour en faire un noeud fonctionnel, prêt à brasser du code.

Contrairement à son petit nom qui sonne un peu restrictif somme toute, bcfg2 peut, comme Puppet, prendre en charge cette opération, aussi facilement que pour la partie configuration.

Attaquons de suite par un exemple on ne peut plus simple ! Je rappelle que le noeud en question rentre dans le profil deb qui fait appel au group debian.

Pour pouvoir accéder à la fonctionnalité installation / gestion des packages, il faut retoucher la conf de bcfg2 et rajouter le plugin Packages au bon endroit. Votre conf deviendra donc :
<pre class="brush: bash">bcfg2-server $ cat /etc/bcfg2.conf

[server]
repository = /var/lib/bcfg2
plugins = Base,Bundler,Cfg,Metadata,Pkgmgr,Packages,Rules,SSHbase

[statistics]
sendmailpath = /usr/lib/sendmail
database_engine = sqlite3
# 'postgresql', 'mysql', 'mysql_old', 'sqlite3' or 'ado_mssql'.
database_name =
# Or path to database file if using sqlite3.
#&lt;repository&gt;/etc/brpt.sqlite is default path if left empty
database_user =
# Not used with sqlite3.
database_password =
# Not used with sqlite3.
database_host =
# Not used with sqlite3.
database_port =
# Set to empty string for default. Not used with sqlite3.
web_debug = True

[communication]
protocol = xmlrpc/ssl
password = sF9Xlpuv
certificate = /etc/bcfg2.crt
key = /etc/bcfg2.key
ca = /etc/bcfg2.crt

[components]
bcfg2 = https://bcfg2-server.k-tux.com:6789</pre>
Il faut également créer le répertoire et la configuration qu'il contiendra et qui permettra d'indiquer les dépôts sur lesquels chercher les packages. Dans ma config.xml, comme c'est une Debian Squeeze à qui je m'adresse, les dépôts sont spécifiques. Donc à modifier pour aligner sur vos noeuds.
<pre class="brush: bash">bcfg2-server:/var/lib/bcfg2 $ mkdir /var/lib/bcfg2/Packages
bcfg2-server:/var/lib/bcfg2 $ vim Packages/config.xml

&lt;Sources&gt;
&lt;APTSource&gt;
&lt;Group&gt;debian-squeeze&lt;/Group&gt;
&lt;URL&gt;http://ftp.de.debian.org/debian/&lt;/URL&gt;
&lt;Version&gt;squeeze&lt;/Version&gt;
&lt;Component&gt;main&lt;/Component&gt;
&lt;Component&gt;multiverse&lt;/Component&gt;
&lt;Component&gt;restricted&lt;/Component&gt;
&lt;Component&gt;universe&lt;/Component&gt;
&lt;Arch&gt;amd64&lt;/Arch&gt;
&lt;/APTSource&gt;
&lt;/Sources&gt;</pre>
A présent, il faut indiquer quels packages, et pour qui.
<pre class="brush: bash">bcfg2-server $ cat /var/lib/bcfg2/Metadata/groups.xml
&lt;Groups version='3.0'&gt;
&lt;Group profile='true' public='true' default='true' name='basic'&gt;
&lt;Group name='ubuntu'/&gt;
&lt;/Group&gt;
&lt;Group profile='true' public='true' default='true' name='deb'&gt;
&lt;Group name='debian'/&gt;
&lt;/Group&gt;
&lt;Group name='debian'&gt;
&lt;Bundle name='python'/&gt;
&lt;/Group&gt;
&lt;Group name='ubuntu'&gt;
&lt;Bundle name='release'/&gt;
&lt;/Group&gt;
&lt;/Groups&gt;</pre>
Voila pour qui. Maintenant, le quoi en question. Pour les packages, on utilise ce que bcfg2 appelle des Bundles, qui permettent de grouper plusieurs définitions pour actions. Le tout étant, bien entendu, stocké à sa place dans /var/lib/bcfg2/Bundler/. Nous avons indiqué un Bundle nommé python, nous allons le mettre en forme :
<pre class="brush: bash">bcfg2-server $ cat /var/lib/bcfg2/Bundler/python.xml
&lt;Bundle name="python" version="2.0"&gt;
&lt;Package name="python-openssl"/&gt;
&lt;Package name="python-pytools"/&gt;
&lt;Package name="python-setuptools"/&gt;
&lt;/Bundle&gt;</pre>
Le restart du service n'est pas très rassurant :
<pre class="brush: bash">bcfg2-server:/var/lib/bcfg2 $ bcfg2-server start
Failed to read file /var/lib/bcfg2/Packages/cache/http:@@ftp.de.debian.org@debian@dists@squeeze@multiverse@binary-amd64@Packages.gz
Packages: File read failed; falling back to file download
Packages: Updating http://ftp.de.debian.org/debian/dists/squeeze/main/binary-amd64/Packages.gz
Packages: Updating http://ftp.de.debian.org/debian/dists/squeeze/multiverse/binary-amd64/Packages.gz
Packages: Failed to fetch url http://ftp.de.debian.org/debian/dists/squeeze/multiverse/binary-amd64/Packages.gz. code=404
Packages: Updating http://ftp.de.debian.org/debian/dists/squeeze/restricted/binary-amd64/Packages.gz
Packages: Failed to fetch url http://ftp.de.debian.org/debian/dists/squeeze/restricted/binary-amd64/Packages.gz. code=404
Packages: Updating http://ftp.de.debian.org/debian/dists/squeeze/universe/binary-amd64/Packages.gz
Packages: Failed to fetch url http://ftp.de.debian.org/debian/dists/squeeze/universe/binary-amd64/Packages.gz. code=404
Failed to read file /var/lib/bcfg2/Packages/cache/http:@@ftp.de.debian.org@debian@dists@squeeze@multiverse@binary-amd64@Packages.gz
Failed to update source
Traceback (most recent call last):
File "/usr/lib/python2.6/site-packages/Bcfg2/Server/Plugins/Packages.py", line 120, in setup_data
self.read_files()
File "/usr/lib/python2.6/site-packages/Bcfg2/Server/Plugins/Packages.py", line 406, in read_files
raise
File "/usr/lib/python2.6/site-packages/Bcfg2/Server/Plugins/Packages.py", line 403, in read_files
reader = gzip.GzipFile(fname)
File "/usr/lib/python2.6/gzip.py", line 79, in __init__
fileobj = self.myfileobj = __builtin__.open(filename, mode or 'rb')
IOError: [Errno 2] No such file or directory: '/var/lib/bcfg2/Packages/cache/http:@@ftp.de.debian.org@debian@dists@squeeze@multiverse@binary-amd64@Packages.gz'
The following plugins conflict with Packages;Unloading ['Pkgmgr']
Loading experimental plugin(s): Packages
NOTE: Interfaces subject to change
Handled 32 events in 0.012s
service available at https://bcfg2-server.k-tux.com:6789
serving bcfg2-server at https://bcfg2-server.k-tux.com:6789
serve_forever() [start]</pre>
Par contre, le service est opérationel ! Le client en dry-run, nous renvoie :
<pre class="brush: bash">bcfg2cli-deb $ bcfg2 -qvn
No ca is specified. Cannot authenticate the server with SSL.
No ca is specified. Cannot authenticate the server with SSL.
Loaded tool drivers:
APT      Action   DebInit  POSIX
Package python-openssl not installed
Package python-pytools not installed
Package python-setuptools not installed

Phase: initial
Correct entries:        0
Incorrect entries:      3
Total managed entries:  3
Unmanaged entries:      364

In dryrun mode: suppressing entry installation for:
Package:python-openssl     Package:python-pytools     Package:python-setuptools

Phase: final
Correct entries:        0
Incorrect entries:      3
Package:python-openssl     Package:python-pytools     Package:python-setuptools
Total managed entries:  3
Unmanaged entries:      364

No ca is specified. Cannot authenticate the server with SSL.</pre>
Et en mode non dry-run, on a effectivement les installations qui se déroulent comme prévu :
<pre class="brush: bash">bcfg2cli-deb $ bcfg2 -qv
No ca is specified. Cannot authenticate the server with SSL.
No ca is specified. Cannot authenticate the server with SSL.
Loaded tool drivers:
APT      Action   DebInit  POSIX
Package python-openssl not installed
Package python-pytools not installed
Package python-setuptools not installed

Phase: initial
Correct entries:        0
Incorrect entries:      3
Total managed entries:  3
Unmanaged entries:      364

The Following Bundles have been modified:
python

Phase: final
Correct entries:        3
Incorrect entries:      0
Total managed entries:  3
Unmanaged entries:      364

No ca is specified. Cannot authenticate the server with SSL.

bcfg2cli-deb $ dpkg -s python-openssl
Package: python-openssl
Status: install ok installed [...]</pre>
Et voilà !

Il ne reste plus qu'à gérer les 364 entrées restantes, plus celles que vous allez rajouter pour enrichir vos nodes :) Pour ma part, je dois encore paufiner la conf sur la partie authentification par certificat SSL et tant qu'à faire résoudre le pourquoi-qu'il-me-crache-des-erreurs-python-au-start. Mais tout ceci est une autre histoire !

Ah ! Et à toujours garder en tête : garder la conf par défaut est trèèèèèèèèèèèès dangereux (je pense au port 6789 en question) !!!

Enjoy !!!]]></content:encoded>
			<wfw:commentRss>http://www.k-tux.com/bcfg2-la-gestion-de-conf-du-bout-des-doigts/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ubuntu Server 11.04 i686 sur plus de 8 CPU</title>
		<link>http://www.k-tux.com/ubuntu-server-11-04-i686-sur-plus-de-8-cpu</link>
		<comments>http://www.k-tux.com/ubuntu-server-11-04-i686-sur-plus-de-8-cpu#comments</comments>
		<pubDate>Fri, 08 Jul 2011 09:02:32 +0000</pubDate>
		<dc:creator>KXan</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sysadmin apps]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[conf]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[system]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.k-tux.com/?p=1023</guid>
		<description><![CDATA[Récemment, j&#8217;ai pu tester l&#8217;installation d&#8217;un Ubuntu Server 11.04 i686 sur un serveur contenant 2 CPU Intel® Xeon® Processor X5650, ce qui fait pas moins de 24 CPUs visibles sous nunux. La demande était expresse : OS 32 bits imposé, &#8230; <a href="http://www.k-tux.com/ubuntu-server-11-04-i686-sur-plus-de-8-cpu">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[Récemment, j'ai pu tester l'installation d'un Ubuntu Server 11.04 i686 sur un serveur contenant 2 CPU Intel® Xeon® Processor X5650, ce qui fait pas moins de 24 CPUs visibles sous nunux. La demande était expresse : OS 32 bits imposé, donc aucune discussion possible.

Et là surprise : à la fin de l'install, on ne voit plus que 8 CPU. Alors forcément, on se pose des questions... Enfin, on pose des questions à dmesg, qui nous renvoie un joli : WARNING: NR_CPUS <em>limit</em> of 8 <em>reached</em>.

Pour cela, il existe une solution : recompiler le noyau avec les bonnes options :)

Pas de panique ni de make menuconfig, sous Ubuntu, la <a href="https://help.ubuntu.com/community/Kernel/Compile" target="_blank">procédure est standardisée</a>.

Au cas où le lien n'est plus valide :
<pre class="brush: bash">sudo apt-get install fakeroot build-essential crash kexec-tools makedumpfile kernel-wedge
sudo apt-get build-dep linux
sudo apt-get install git-core libncurses5 libncurses5-dev libelf-dev asciidoc binutils-dev

fakeroot debian/rules clean
sudo apt-get build-dep --no-install-recommends linux-image-$(uname -r)
apt-get source linux-image-$(uname -r)</pre>
A partir de là, il suffit juste d'éditer <em>linux-2.6.38/debian.master/config/i386/config.flavour.generic-pae</em> (enfin pour moi, à modifier pour votre cas de figure), et de stipuler en plus 2 options :
<pre class="brush: bash">CONFIG_NR_CPUS=32
CONFIG_X86_BIGSMP=y</pre>
Pourquoi 32 ?

D'une, il s'agit en fait d'une limite, donc pas besoin de mettre 24 dans la mesure où <strong>Ubuntu</strong> va lui-même détecter le bon nombre de <strong>CPU</strong> présent.

Et de deux, pour l'avoir testé avec 24, j'ai pu constater qu'en fait, il pouvait voir 32 slots possibles -sûrement la capacité d'accueil de la carte mère-, donc au cas où je décide de rajouter des processeurs (on ne sait jamais), autant la fixer au max :)

Ne pas oublier le <em>chmod</em> des scripts :
<pre class="brush: bash">chmod -R u+x debian/scripts/*</pre>
Update de la <strong>config</strong> :
<pre class="brush: bash">debian/rules updateconfigs</pre>
On recompile en adoptant l'option <em>skipabi</em> (car pour moi ça partait en erreur):
<pre class="brush: bash">DEB_BUILD_OPTIONS=parallel=2 AUTOBUILD=1 NOEXTRAS=1 skipabi=true fakeroot debian/rules binary-generic-pae</pre>
Si vous tombez sur une question vous demandant de choisir entre <em>Sparse</em> et <em>Discontinious Memory</em> et que vous ne savez absolument pas de quoi il en retourne, mieux vaut choisir la Discontinuous Memory, car la Sparse est à titre expérimentale. <a href="http://how-to.wikia.com/wiki/How_to_configure_the_Linux_kernel/mm" target="_blank">Toute l'information est ici</a>.

Et c'est parti pour la génération des <strong>.deb</strong> !

Il ne restera plus qu'à <em>dpkg -i</em> les .deb, rebooter et vous avez un serveur prêt, frais et dispo !!]]></content:encoded>
			<wfw:commentRss>http://www.k-tux.com/ubuntu-server-11-04-i686-sur-plus-de-8-cpu/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

