<?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>Je pensais qu&#039;il était avec vous... &#187; BSD</title>
	<atom:link href="http://www.patpro.net/blog/index.php/tag/bsd/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.patpro.net/blog</link>
	<description>patpro.net</description>
	<lastBuildDate>Mon, 23 Jan 2012 23:09:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>Nuxeo contre Alfresco</title>
		<link>http://www.patpro.net/blog/index.php/2012/01/05/1990-nuxeo-contre-alfresco/</link>
		<comments>http://www.patpro.net/blog/index.php/2012/01/05/1990-nuxeo-contre-alfresco/#comments</comments>
		<pubDate>Thu, 05 Jan 2012 11:05:09 +0000</pubDate>
		<dc:creator>patpro</dc:creator>
				<category><![CDATA[Grrr]]></category>
		<category><![CDATA[BSD]]></category>
		<category><![CDATA[Logiciel]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://www.patpro.net/blog/?p=1990</guid>
		<description><![CDATA[Après un mois d'utilisation du logiciel de GED Nuxeo DM, le bilan est plutôt négatif. Je pensais naïvement avoir mis la main sur une application correcte (comme elle est en JAVA, elle peut tout au plus être correcte). Un pré-requis très important pour moi était la possibilité d'utiliser MySQL comme moteur de base de données. [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2012/01/05/1990-nuxeo-contre-alfresco/' addthis:title='Nuxeo contre Alfresco '><a href="//addthis.com/bookmark.php?v=250&#38;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></description>
			<content:encoded><![CDATA[<p>Après un mois d'utilisation du logiciel de GED <a href="/blog/index.php/2011/12/03/1940-la-gestion-electronique-de-documents-episode-1/" title="La gestion électronique de documents, épisode 1">Nuxeo DM</a>, le bilan est plutôt négatif. Je pensais naïvement avoir mis la main sur une application correcte (comme elle est en JAVA, elle peut tout au plus être correcte). Un pré-requis très important pour moi était la possibilité d'utiliser MySQL comme moteur de base de données. En réalité, bien que Nuxeo supporte MySQL officiellement, l'usage de ce moteur est absolument découragé. Les développeurs listent <a href="http://doc.nuxeo.com/pages/viewpage.action?pageId=3343486">une série de raisons</a> somme-toute valables, et qui peuvent se résumer comme ceci : il aurait fallu coder Nuxeo pour qu'il supporte les spécificités de MySQL, et on a eu la flemme. En réalité, rien ne fonctionne vraiment correctement si on utilise Nuxeo avec MySQL. À tel point qu'il ne devrait même pas être possible de choisir ce serveur de base de données dans les menus de configuration de Nuxeo. Et c'est bien ça qui me met en rogne. J'ai perdu un mois, et de nombreuses heures de travail pour un logiciel qui oscille finalement entre le "peu fiable" et le "carrément inutilisable".<br />
Entre alors en scène Alfresco. Un logiciel concurrent, codé lui aussi en (<a href="http://www.urbandictionary.com/define.php?term=wait%20for%20it">wait for it</a>) JAVA. Ce dernier fonctionne très bien avec MySQL, je l'ai donc installé sans tarder pour me faire une opinion  sur ses capacités. Les différences avec Nuxeo sont importantes.<br />
<span id="more-1990"></span><br />
Sur le plan de l'installation, Nuxeo est livré tout packagé. Il utilise un tomcat "clé en main" pré-configuré et se trouve centralisé dans un répertoire unique. A contrario, Alfresco est livré sous la forme d'un fichier WAR, qu'il faut installer dans un serveur tomcat. Il faut en plus déplacer ou copier des fichiers à la main, en suivant des instructions souvent incomplètes glanées sur internet. Par contre sur FreeBSD tomcat est livré avec un script de lancement, alors que pour Nuxeo <a href="/blog/index.php/2011/12/12/1979-installation-de-nuxeo-dm-sur-freebsd-episode-3/" title="Installation de Nuxeo DM sur FreeBSD, épisode 3">j'ai du en créer un</a>.<br />
Bref, sur FreeBSD Nuxeo est à peu près utilisable immédiatement après l'avoir téléchargé, alors qu'Alfresco nécessite plus de travail et que sa documentation est déficiente à ce sujet.</p>
<p>Sur le plan de la configuration initiale, Nuxeo est aussi en tête. Une fois l'application lancée, on s'y connecte, et on personnalise les réglages via l'interface web directement. Du côté d'Alfresco, rien n'est prévu pour faciliter la configuration au moment du déploiement. Il faut éditer un fichier de configuration à la main dans le quel on indique des chemins de fichiers, des informations de connexions pour le serveur de bases de données, etc. De même seul Nuxeo prévoit un menu d'administration complet gérant entre autres choses les patch de mises à jour, et le redémarrage de l'application.</p>
<p>Mais tout ça n'est pas grand chose. Finalement, on ne passe pas son temps à installer et configurer une application. La différence se fait sur l'usage.</p>
<p>En terme d'ergonomie, c'est Nuxeo qui remporte la palme. L'interface est enrichie de fonctions en AJAX, qui permettent par exemple de déplacer un document d'une catégorie à une autre par glisser-déposer, ou bien d'envoyer des documents directement à partir de votre ordinateur vers Nuxeo. Alfresco quant à lui est très en dessous. Tout d'abord il est livré sous la forme de deux applications Alfresco d'un côté, et Share de l'autre. La première se rapproche un peu de Nuxeo DM, mais sans l'AJAX. Pour faire la moindre choses il faut multiplier les clics, c'est assez pénible. La seconde, Share, est plutôt orientée utilisateur final, publication, média "sociaux". Elle propose l'import de documents par glissé-déposé comme Nuxeo, mais elle manque de sobriété. Les documents sont présentés par défaut sous forme de liste de grosses icones aussi inélégantes qu'encombrantes. De nombreuses actions peuvent être faites aussi bien dans Alfresco que dans Share, mais pas toutes. Par exemple je peux utiliser des noms de tags dans le champs de recherche de Share, alors que cela ne fonctionne pas dans Alfresco. Finalement quand on veut faire quelque chose, il faut d'abord se souvenir dans la quelle des deux applications c'est possible (et le plus simple) et s'y connecter. C'est juste n'importe quoi.</p>

<a href='http://www.patpro.net/blog/index.php/2012/01/05/1990-nuxeo-contre-alfresco/nuxeo-liste/' title='nuxeo-liste'><img width="150" height="95" src="http://www.patpro.net/blog/wp-content/uploads/2011/12/nuxeo-liste-150x95.png" class="attachment-thumbnail" alt="affichage d&#039;une liste de documents dans Nuxeo" title="nuxeo-liste" /></a>
<a href='http://www.patpro.net/blog/index.php/2012/01/05/1990-nuxeo-contre-alfresco/alfresco-liste/' title='alfresco-liste'><img width="150" height="84" src="http://www.patpro.net/blog/wp-content/uploads/2011/12/alfresco-liste-150x84.png" class="attachment-thumbnail" alt="affichage d&#039;une liste de documents dans Alfresco" title="alfresco-liste" /></a>
<a href='http://www.patpro.net/blog/index.php/2012/01/05/1990-nuxeo-contre-alfresco/share-liste/' title='share-liste'><img width="150" height="100" src="http://www.patpro.net/blog/wp-content/uploads/2011/12/share-liste-150x100.png" class="attachment-thumbnail" alt="affichage d&#039;une liste de documents dans Share (Alfresco)" title="share-liste" /></a>

<p>La recherche des documents est aussi une dimension importante de la GED. Elle repose sur une indexation du contenu des documents, sur des métadonnées, sur une organisation. J'ai tendance à considérer que l'organisation physique des documents ne doit pas trop peser dans la balance. Il n'y a qu'une manière de classer une facture médicale. Doit-on la ranger dans le dossier "facture", dans le dossier "facture" du dossier "santé" ou dans le dossier "santé" du dossier "facture" ?<br />
Je préfère de loin un système de tags ou de catégories qui me permette d'accoler plus d'une étiquette à un document, et surtout de retrouver tel ou tel document en combinant ces étiquettes dans un champ de recherche. Les tags dans Nuxeo sont assez accessibles. On en ajoute facilement, mais je ne peux pas chercher un document en tapant un ou plusieurs tags dans le champs de recherche. Les tags sont très bien cachés dans Alfresco, et ils sont inutilisables par défaut. A contrario, sans Share les tags sont accessibles, et on peut les utiliser facilement pour une recherche. Malheureusement, il est alors impossible de préciser qu'on souhaite chercher uniquement dans les tags, ce qui réduit l'intérêt de la chose.</p>
<p>La gestion des sauvegardes d'un entrepôt de données est primordiale. Nuxeo étant par défaut entièrement inclus dans un répertoire unique, il n'y a que deux choses importantes à sauvegarder pour que l'application puisse repartir rapidement en cas de désastre : le répertoire de l'application, et la base de données. J'ai déjà un script qui sauvegarde automatiquement mes bases MySQL, mais comme expliqué plus haut, MySQL n'est pas une option. Garder Nuxeo impliquerait donc d'apprendre à gérer des sauvegardes PostgreSQL (dump, rétention, archivage, et restauration), en plus de l'administration courante.<br />
Alfresco est fragmenté, et nécessite un peu plus de préparation pour gérer les sauvegardes, en contrepartie, son support de MySQL m'assure une sauvegarde fonctionnelle immédiatement, et des archives que je sais restaurer sans lire le manuel. Alfresco bénéficie aussi d'un mécanisme de réplication, ce qui permet de bénéficier d'un second serveur de secours (ou de proximité) en cas de panne du serveur habituel.</p>
<p>Au bout du compte, j'ai l'impression que Nuxeo reste une solution intéressante. Ses points faibles ne sont pas si dramatiques, même si pour moi une bonne recherche par tags est primordiale. Alfresco propose des fonctionnalités appétissantes comme la réplication de serveur, une interface orientée utilisateur permettant la recherche par tags (Share). Mais le manque de glisser-déposer et glisser-déplacer, ainsi que le très grand nombre de clics pour la moindre action sont de vrais handicaps dans la phase de remplissage.<br />
Malheureusement pour Nuxeo, je n'ai pas une minute à consacrer à l'apprentissage de PostgreSQL, ce qui laisse une chance à Alfresco de se faire une place sur mon serveur. Comme la migration d'un système à l'autre est totalement illusoire, voire impossible, je vais me laisser encore le temps de la réflexion, avant de charger et classer des centaines de documents dans l'un ou l'autre.</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2012/01/05/1990-nuxeo-contre-alfresco/' addthis:title='Nuxeo contre Alfresco '><a href="//addthis.com/bookmark.php?v=250&amp;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></content:encoded>
			<wfw:commentRss>http://www.patpro.net/blog/index.php/2012/01/05/1990-nuxeo-contre-alfresco/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Welcome to our Z410 Storage Beta program</title>
		<link>http://www.patpro.net/blog/index.php/2012/01/04/2015-welcome-to-our-z410-storage-beta-program/</link>
		<comments>http://www.patpro.net/blog/index.php/2012/01/04/2015-welcome-to-our-z410-storage-beta-program/#comments</comments>
		<pubDate>Wed, 04 Jan 2012 11:00:23 +0000</pubDate>
		<dc:creator>patpro</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[BSD]]></category>
		<category><![CDATA[Logiciel]]></category>
		<category><![CDATA[MacOSX]]></category>
		<category><![CDATA[ZFS]]></category>

		<guid isPermaLink="false">http://www.patpro.net/blog/?p=2015</guid>
		<description><![CDATA[C'est Noël ! Dommage que mes congés soient terminés...<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2012/01/04/2015-welcome-to-our-z410-storage-beta-program/' addthis:title='Welcome to our Z410 Storage Beta program '><a href="//addthis.com/bookmark.php?v=250&#38;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></description>
			<content:encoded><![CDATA[<p><a href="http://tenscomplement.com/"><img src="/blog/wp-content/uploads/2012/01/zfs-sur-mac.jpg" alt="rahhh lovely" title="zfs-sur-mac" width="580" height="482" class="aligncenter size-full wp-image-2016" /></a></p>
<p>C'est Noël ! Dommage que mes congés soient terminés...</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2012/01/04/2015-welcome-to-our-z410-storage-beta-program/' addthis:title='Welcome to our Z410 Storage Beta program '><a href="//addthis.com/bookmark.php?v=250&amp;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></content:encoded>
			<wfw:commentRss>http://www.patpro.net/blog/index.php/2012/01/04/2015-welcome-to-our-z410-storage-beta-program/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installation de Nuxeo DM sur FreeBSD, épisode 3</title>
		<link>http://www.patpro.net/blog/index.php/2011/12/12/1979-installation-de-nuxeo-dm-sur-freebsd-episode-3/</link>
		<comments>http://www.patpro.net/blog/index.php/2011/12/12/1979-installation-de-nuxeo-dm-sur-freebsd-episode-3/#comments</comments>
		<pubDate>Mon, 12 Dec 2011 11:00:20 +0000</pubDate>
		<dc:creator>patpro</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[BSD]]></category>
		<category><![CDATA[Logiciel]]></category>

		<guid isPermaLink="false">http://www.patpro.net/blog/?p=1979</guid>
		<description><![CDATA[Avec un peu de travail, Nuxeo DM peut être abrité en HTTPS derrière un serveur Apache. Je fais l'impasse sur la configuration interne à Nuxeo, elle se fait très simplement à la première connexion via l'assistant fourni. Si vous êtes arrivés jusque là, il ne manque plus qu'un script de démarrage pour que tout fonctionne [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2011/12/12/1979-installation-de-nuxeo-dm-sur-freebsd-episode-3/' addthis:title='Installation de Nuxeo DM sur FreeBSD, épisode 3 '><a href="//addthis.com/bookmark.php?v=250&#38;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></description>
			<content:encoded><![CDATA[<p>Avec <a href="http://www.patpro.net/blog/index.php/2011/12/09/1969-installation-de-nuxeo-dm-sur-freebsd-episode-2/" title="Installation de Nuxeo DM sur FreeBSD, épisode 2">un peu de travail</a>, Nuxeo DM peut être abrité en HTTPS derrière un serveur Apache. Je fais l'impasse sur la configuration interne à Nuxeo, elle se fait très simplement à la première connexion via l'assistant fourni. Si vous êtes arrivés jusque là, il ne manque plus qu'un script de démarrage pour que tout fonctionne de manière transparente sur votre serveur.<br />
Voici le contenu du script de lancement/arrêt pour une instance de Nuxeo DM, <code>/usr/local/etc/rc.d/nuxeo</code>. N'oubliez pas de remplacer la valeur de <code>nuxeo_home</code> par le chemin de votre répertoire nuxeo :</p>
<pre>#!/bin/sh

# PROVIDE: nuxeo
# REQUIRE: DAEMON
# BEFORE: LOGIN

# Define these nuxeo_* variables in one of these files:
#       /etc/rc.conf
#       /etc/rc.conf.local
#
# DO NOT CHANGE THESE DEFAULT VALUES HERE
#
nuxeo_enable="${nuxeo_enable-NO}"
nuxeo_user="${nuxeo_user-nuxeo}"
nuxeo_home="/CHEMIN/DE/nuxeo"

. /etc/rc.subr

name="nuxeo"
rcvar=`set_rcvar`
start_cmd=${name}_start
stop_cmd=${name}_stop

nuxeo_start()
{
cd $nuxeo_home
$nuxeo_auditflags sudo -u $nuxeo_user ./bin/nuxeoctl startbg
}

nuxeo_stop()
{
cd $nuxeo_home
sudo -u $nuxeo_user ./bin/nuxeoctl stop
}

load_rc_config $name

run_rc_command "$1"</pre>
<p>Une fois le fichier créé, rempli, et rendu exécutable, il faut ajouter ces quelques lignes à votre fichier <code>/etc/rc.conf</code> :</p>
<pre>nuxeo_enable="YES"
nuxeo_user="NUXEO_USER"</pre>
<p>Vous remplacerez bien sûr <code>NUXEO_USER</code> par le nom du compte utilisateur qui fera tourner l'application Nuxeo DM. Après cela, les commandes <code>/usr/local/etc/rc.d/nuxeo restart</code>, <code>/usr/local/etc/rc.d/nuxeo stop</code> et <code>/usr/local/etc/rc.d/nuxeo start</code> doivent fonctionner.<br />
Attention, suivant la puissance de votre machine, et l'état de remplissage de Nuxeo, le temps de lancement peut varier énormément.</p>
<p>Côté mise à jour, vous pouvez accéder aux "hotfix" officiels, gratuitement pendant 30 jours, moyennant une inscription sur le site web de Nuxeo. L'inscription se passe facilement, par contre les mise à jour sont délicates et nécessitent de suivre scrupuleusement <a href="https://connect.nuxeo.com/nuxeo/site/marketplace/hotfixes">les instructions du support Nuxeo</a>. Notamment, relancez bien l'application entre chaque mise à jour.</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2011/12/12/1979-installation-de-nuxeo-dm-sur-freebsd-episode-3/' addthis:title='Installation de Nuxeo DM sur FreeBSD, épisode 3 '><a href="//addthis.com/bookmark.php?v=250&amp;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></content:encoded>
			<wfw:commentRss>http://www.patpro.net/blog/index.php/2011/12/12/1979-installation-de-nuxeo-dm-sur-freebsd-episode-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installation de Nuxeo DM sur FreeBSD, épisode 2</title>
		<link>http://www.patpro.net/blog/index.php/2011/12/09/1969-installation-de-nuxeo-dm-sur-freebsd-episode-2/</link>
		<comments>http://www.patpro.net/blog/index.php/2011/12/09/1969-installation-de-nuxeo-dm-sur-freebsd-episode-2/#comments</comments>
		<pubDate>Fri, 09 Dec 2011 20:04:59 +0000</pubDate>
		<dc:creator>patpro</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[BSD]]></category>
		<category><![CDATA[Logiciel]]></category>

		<guid isPermaLink="false">http://www.patpro.net/blog/?p=1969</guid>
		<description><![CDATA[Une application Tomcat ne devrait pas se trouver nue sur internet. J'ai pour habitude de toujours placer un frontal Apache devant. Cela autorise divers améliorations du service. Apache peut par exemple gérer l'authentification des utilisateurs, faire une balance de charge entre plusieurs instances de l'application, etc. Il permet aussi à votre application d'être joignable sur [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2011/12/09/1969-installation-de-nuxeo-dm-sur-freebsd-episode-2/' addthis:title='Installation de Nuxeo DM sur FreeBSD, épisode 2 '><a href="//addthis.com/bookmark.php?v=250&#38;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></description>
			<content:encoded><![CDATA[<p>Une application Tomcat ne devrait pas se trouver nue sur internet. J'ai pour habitude de toujours placer un frontal Apache devant. Cela autorise divers améliorations du service. Apache peut par exemple gérer l'authentification des utilisateurs, faire une balance de charge entre plusieurs instances de l'application, etc. Il permet aussi à votre application d'être joignable sur les port HTTP(S) standard (80 et 443) sans que l'application doive être lancée en root (et sans recourir à une redirection dans votre firewall).</p>
<p>Il existe <a href="http://doc.nuxeo.com/display/NXDOC54/HTTP+and+HTTPS+reverse-proxy+configuration">plusieurs moyens</a> de présenter Nuxeo DM au travers d'un proxy Apache. J'ai choisi d'utiliser mod_proxy. Avec mod_proxy, la configuration est assez standard. Tout, ou presque, est réglé en 3 lignes si on se contente de l'HTTP. Mais pour sécuriser mes connexions à Nuxeo, qui contiendra mes documents personnels et confidentiels, j'ai décidé d'utiliser HTTPS.<br />
J'ai donc un virtual host Apache, et un certificat SSL associé, dans le quel j'inclue les directives de mod_proxy.</p>
<pre>&lt;VirtualHost IP.DU.SER.VEUR:443&gt;
   ServerName DOMAINE.TLD:443
   UseCanonicalName On
   DocumentRoot "/chemin/de/nuxeo/"

   SSLEngine on
   #... config SSL ...

   RequestHeader append nuxeo-virtual-host "https://DOMAINE.TLD/"
   &lt;IfModule proxy_module&gt;
     ProxyRequests Off
     &lt;Proxy *&gt;
        Order deny,allow
        Allow from all
     &lt;/Proxy&gt;
     ProxyPass /nuxeo/ http://localhost:8080/nuxeo/
     ProxyPassReverse /nuxeo/ http://localhost:8080/nuxeo/
     ProxyPreserveHost On
   &lt;/IfModule&gt;

&lt;/VirtualHost&gt;</pre>
<p>Ça c'est d'après la documentation. En réalité, ce n'est pas suffisant. Tout d'abord, il faut bien placer la directive <code>RequestHeader</code> à l'extérieur du bloc <code>proxy_module</code>, sinon elle est juste ignorée par le serveur. Il ne m'a pas fallu moins qu'un tcpdump pour localiser le problème.<br />
J'ai aussi constaté qu'avec ces directives, la première connexion à l'application se fait bien, puis on est immédiatement redirigé vers le même virtual host mais sur le port 80. Je règle le problème avec une directive de redirection dans le vhost http :</p>
<pre>&lt;VirtualHost *&gt;
    ServerName DOMAINE.TLD
    DocumentRoot /chemin/de/nuxeo
    Redirect / https://DOMAINE.TLD/
&lt;/VirtualHost&gt;</pre>
<p>Ce n'est pas totalement satisfaisant, mais faute de mieux, cela fonctionne parfaitement.<br />
En relançant Apache à ce stade, on obtient un proxy fonctionnel et sécurisé par SSL pour Nuxeo.</p>
<p>Avant d'aller plus loin, on peut prendre quelques minutes pour créer une base de données MySQL (ou autre) et un utilisateur MySQL associé à cette base. C'est ce compte de base de données qu'il faudra fournir au moment de la configuration de Nuxeo.</p>
<p>Je fais totalement l'impasse sur la configuration de Nuxeo DM dans le "wizard", elle est bien documentée, et plutôt simple. Il suffit de lancer l'application par la commande ad-hoc si ce n'est pas déjà fait :</p>
<pre># cd /chemin/du/répertoire/nuxeo
# sudo -u nuxeo_user ./bin/nuxeoctl startbg</pre>
<p>Ensuite on se connecte à l'adresse <code>https://DOMAINE.TLD/nuxeo</code> et on peut entamer la configuration.</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2011/12/09/1969-installation-de-nuxeo-dm-sur-freebsd-episode-2/' addthis:title='Installation de Nuxeo DM sur FreeBSD, épisode 2 '><a href="//addthis.com/bookmark.php?v=250&amp;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></content:encoded>
			<wfw:commentRss>http://www.patpro.net/blog/index.php/2011/12/09/1969-installation-de-nuxeo-dm-sur-freebsd-episode-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installation de Nuxeo DM sur FreeBSD, épisode 1</title>
		<link>http://www.patpro.net/blog/index.php/2011/12/08/1956-installation-de-nuxeo-dm-sur-freebsd-episode-1/</link>
		<comments>http://www.patpro.net/blog/index.php/2011/12/08/1956-installation-de-nuxeo-dm-sur-freebsd-episode-1/#comments</comments>
		<pubDate>Thu, 08 Dec 2011 19:27:55 +0000</pubDate>
		<dc:creator>patpro</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[BSD]]></category>
		<category><![CDATA[Logiciel]]></category>

		<guid isPermaLink="false">http://www.patpro.net/blog/?p=1956</guid>
		<description><![CDATA[J'ai récemment choisi Nuxeo DM comme application de GED. C'est une application en JAVA, tournant dans un serveur d'application Tomcat. Nuxeo est packagé sous différentes formes, une seule est utilisable sur FreeBSD : Nuxeo DM Tomcat bundle. L'installation de Nuxeo sur FreeBSD nécessite trois choses : installer les pré-requis logiciels, configurer l'environnement pour sécuriser l'application, [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2011/12/08/1956-installation-de-nuxeo-dm-sur-freebsd-episode-1/' addthis:title='Installation de Nuxeo DM sur FreeBSD, épisode 1 '><a href="//addthis.com/bookmark.php?v=250&#38;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></description>
			<content:encoded><![CDATA[<p>J'ai récemment choisi <strong>Nuxeo DM</strong> comme <a href="http://www.patpro.net/blog/index.php/2011/12/03/1940-la-gestion-electronique-de-documents-episode-1/" title="La gestion électronique de documents, épisode 1">application de GED</a>. C'est une application en JAVA, tournant dans un serveur d'application Tomcat. Nuxeo est packagé sous différentes formes, une seule est utilisable sur FreeBSD : Nuxeo DM Tomcat bundle.<br />
L'installation de Nuxeo sur FreeBSD nécessite trois choses : installer les pré-requis logiciels, configurer l'environnement pour sécuriser l'application, et configurer l'application elle-même.</p>
<p>Côté pré-requis, il faut tout d'abord installer le Java Runtime Environment, et le Java Development Kit. Sous FreeBSD, il faut donc installer les ports <strong>java/diablo-jdk16</strong> et <strong>java/diablo-jre16</strong>. Pour une question de licence, il faut télécharger à la main les packages nécessaires chez Oracle. Il suffit simplement de suivre les instructions obtenues pour chaque port au moment du make. Par exemple :</p>
<pre>$ cd /usr/ports/java/diablo-jdk16/
$ make
===>  License check disabled, port has not defined LICENSE
===>  Found saved configuration for diablo-jdk-1.6.0.07.02_12

 Because of licensing restrictions, you must fetch the distribution
 manually.

 Please open http://www.oracle.com/technetwork/java/javase/downloads/index.html
 in a web browser and follow the "Download" link for
 "JDK DST Timezone Update Tool - 1_3_42" to obtain the
 time zone update file, tzupdater-1_3_42-2011k.zip.

 Please place the downloaded file(s) in /usr/ports/distfiles.
 ...
</pre>
<p>Une fois les ports java/diablo-jdk16 et java/diablo-jre16 installés, il faut installer un serveur web comme Apache 2.2, un serveur de bases de données (MySQL ou PostgreSQL par exemple), et à minima pdftohtml. Il est aussi possible d'installer OpenOffice, mais comme il n'existe pas de version "headless" dans les ports de FreeBSD, cela vous embarque dans l'installation complète avec gestionnaire de fenêtre et tutti quanti. Une calamité.<br />
Pour utiliser l'application sur une connexion sécurisée (HTTPS), il faut qu'Apache dispose d'un certificat SSL adéquat.</p>
<p>Quand tout ceci est installé et configuré, il faut encore ajouter un compte utilisateur pour l'application Nuxeo. Les paresseux pourront la faire tourner sous le compte www. J'ai préféré un utilisateur indépendant, plus facile à tracer via auditd et l'accounting.</p>
<p>On peut alors télécharger et décompresser le package multiplateforme à partir du <a href="http://www.nuxeo.com/en/downloads/download-dm-form">site internet de Nuxeo</a>. On obtient un répertoire nommé <code>nuxeo-dm-5.4.2-tomcat</code>. J'ai pour habitude d'exploiter une application à partir d'un répertoire ne portant pas de numéro de version. On aura intérêt à renommer ce répertoire en <code>nuxeo</code>, car ici, faire un lien symbolique de nuxeo-dm-5.4.2-tomcat vers nuxeo ne donne pas vraiment satisfaction.<br />
Pour en finir avec les fichiers, il faut faire un <code>chown -R</code> sur le répertoire nuxeo pour que les fichiers appartiennent tous à l'utilisateur non privilégié que l'on a créé plus haut.</p>
<p>Ensuite, comme nous sommes sur FreeBSD et pas Linux, il faut revoir certains scripts shell. Ces derniers ont un <a href="http://fr.wikipedia.org/wiki/Shebang">shebang</a> qui pointe vers <code>/bin/bash</code> alors que notre bash est dans <code>/usr/local/bin/</code>. Les scripts à modifier sont les suivants : <code>bin/monitorctl.sh</code>, <code>bin/nuxeoctl</code>, <code>bin/pack</code>.</p>
<p>Arrivé là, il est intéressant de lancer l'application via la ligne de commande pour tester qu'au moins elle se lance et répond sur le port 8080 :</p>
<pre># cd nuxeo
# sudo -u nuxeo_user ./bin/nuxeoctl startbg
...
No current configuration, generating files...
Configuration files generated.
Server started with process ID 1438.</pre>
<p>Le serveur est lancé, et il écoute bien sur le port 8080 :</p>
<pre># netstat -alnf inet | grep 8080
tcp4       0      0  *.8080                 *.*                    LISTEN</pre>
<p>Ce que l'on peut aisément vérifier avec un client HTTP en ligne de commande, ou un coup de telnet :</p>
<pre>$ curl http://127.0.0.1:8080
&lt;META HTTP-EQUIV="refresh" CONTENT="0;URL=/nuxeo"&gt;</pre>
<p>On a maintenant une application Tomcat/Java qui tourne sur notre serveur FreeBSD, sous un compte utilisateur dédié. Il reste à brancher devant un proxy Apache HTTPS, créer un script de démarrage automatique pour l'application, et configurer cette dernière.</p>
<p>La suite au prochain épisode :)</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2011/12/08/1956-installation-de-nuxeo-dm-sur-freebsd-episode-1/' addthis:title='Installation de Nuxeo DM sur FreeBSD, épisode 1 '><a href="//addthis.com/bookmark.php?v=250&amp;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></content:encoded>
			<wfw:commentRss>http://www.patpro.net/blog/index.php/2011/12/08/1956-installation-de-nuxeo-dm-sur-freebsd-episode-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Utiliser auditd sur Mac OS X et FreeBSD &#8211; 3</title>
		<link>http://www.patpro.net/blog/index.php/2011/06/05/1895-utiliser-auditd-sur-mac-os-x-et-freebsd-3/</link>
		<comments>http://www.patpro.net/blog/index.php/2011/06/05/1895-utiliser-auditd-sur-mac-os-x-et-freebsd-3/#comments</comments>
		<pubDate>Sun, 05 Jun 2011 16:17:00 +0000</pubDate>
		<dc:creator>patpro</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[Analyse]]></category>
		<category><![CDATA[BSD]]></category>
		<category><![CDATA[MacOSX]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[Surveillance]]></category>

		<guid isPermaLink="false">http://www.patpro.net/blog/?p=1895</guid>
		<description><![CDATA[Cet article est la suite de Utiliser auditd sur Mac OS X et FreeBSD - 2 Exploiter les résultats de l'audit Dans le premier article j'ai mentionné très succinctement une commande qui permet de lire les logs d'audit en temps réel. Et finalement la consultation de ces logs est sans doute la chose la plus [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2011/06/05/1895-utiliser-auditd-sur-mac-os-x-et-freebsd-3/' addthis:title='Utiliser auditd sur Mac OS X et FreeBSD &#8211; 3 '><a href="//addthis.com/bookmark.php?v=250&#38;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></description>
			<content:encoded><![CDATA[<p>Cet article est la suite de <ins datetime="2011-06-01T13:53:14+00:00"><a href="/blog/index.php/2011/06/01/1840-utiliser-auditd-sur-mac-os-x-et-freebsd-2/">Utiliser auditd sur Mac OS X et FreeBSD - 2</a></ins></p>
<h4>Exploiter les résultats de l'audit</h4>
<p>Dans le premier article j'ai mentionné très succinctement une commande qui permet de lire les logs d'audit en temps réel. Et finalement la consultation de ces logs est sans doute la chose la plus intéressante. Personne n'a envie d'activer l'audit sur une machine pour le simple plaisir de remplir son disque dur. Tout ceci doit avoir une raison d'être&nbsp;: pouvoir ensuite (ou en temps réel) exploiter les logs d'<code>auditd</code>.<span id="more-1895"></span><br />
Comme précisé par défaut dans le fichier <code>audit_control</code>, la taille maximale d'un fichier de log d'audit est 2Mo, et les anciens fichiers sont supprimés pour que le volume total ne dépasse pas 10 Mo&nbsp;:</p>
<pre>filesz:2M
expire-after:10M</pre>
<p>Il existe plusieurs options intéressantes pour <code>expire-after</code> que je vous laisse découvrir dans le <a href="x-man-page://audit_control">man audit_control</a>. Sachez seulement qu'en fonction de ce que vous choisirez de surveiller, vous allez devoir modifier ces paramètres. Sur une machine assez sollicitée, 10 Mo de log peuvent représenter moins d'une heure d'audit. Si vous avez besoin d'enquêter sur un événement de la veille, il vous sera alors impossible d'en retrouver la trace.</p>
<p>Il y a deux moyens immédiats d'exploiter les logs d'audit. Vous pouvez soit les suivre en direct comme je l'ai montré dans le premier article via la commande <code>praudit /dev/auditpipe</code>, soit les étudier <em>a posteriori</em>. C'est sans doute cette option qui sera le plus souvent utilisée. Vous pouvez ainsi utiliser <code>praudit</code> pour lire les fichiers de logs enregistrés dans <code>/var/audit/</code>.<br />
Comme les logs d'audit peuvent grossir très vite, et qu'on cherche souvent l'aiguille dans la meule de foin, il est bon de pouvoir réduire les logs à ce que l'on cherche avant de les afficher. C'est le rôle de la commande <a href="x-man-page://auditreduce">auditreduce</a>. Cette commande permet de filtrer les logs selon une série de critères tels que la date, le ou les flags d'évènement (<code>fc</code>, <code>ex</code>, ...), l'UID, le ou les évènements précis (tels qu'ils sont répertoriés dans le fichier <code>audit_event</code>), et d'autres encore.<br />
auditreduce s'utilise sous la forme générale suivante&nbsp;:</p>
<pre>auditreduce paramètres fichiers_de_log | praudit</pre>
<p>Comme les logs sont binaires, il est impératif de les traduire via <code>praudit</code>.<br />
Sur Mac OS X, voici un exemple de ce que l'on peut obtenir avec la configuration par défaut d'<code>auditd</code>. Je cherche ici tous les événements pour l'UID réelle patpro ayant eu lieu après le 5 juin 2011 à 12h. Je fais cette recherche dans le fichier de log ouvert par <code>auditd</code>.</p>
<pre># auditreduce -a 2011060512 -r patpro /var/audit/current | praudit
header,68,11,logout - local,0,Sun Jun  5 15:47:35 2011, + 877 msec
subject,patpro,root,patpro,patpro,patpro,10485,10485,0,0.0.0.0
return,success,0
trailer,68
header,68,11,logout - local,0,Sun Jun  5 15:57:05 2011, + 718 msec
subject,patpro,root,patpro,patpro,patpro,10948,10948,0,0.0.0.0
return,success,0
trailer,68</pre>
<p>Ces deux évènements correspondent à la fermeture d'une fenêtre de terminal. On voit que chacun d'eux commence par "header" et termine par "trailer". Je ne vais pas couvrir l'intégralité des champs d'un enregistrement de log d'audit, il y a beaucoup trop de possibilités. Reportez-vous au <a href="x-man-page://audit.log">man audit.log</a> pour le détail. Ceux qui ont un intérêt sinon universel, au moins relativement général, sont <code>subject</code> qui décrit le sujet qui a généré les évènements, <code>path</code> qui décrit le chemin du fichier concerné, et <code>return</code> qui indique si l'opération a réussi ou non.<br />
Le champ <code>subject</code> contient les UID et GID (audit UID, effective UID et GID, real UID et GID), le PID, et le port et l'IP de la machine connectée.<br />
Le champ <code>path</code> donne par exemple le chemin d'un exécutable lancé, ou le chemin d'un fichier créé/modifié/détruit.<br />
Le champ <code>return</code> indique success ou failure.</p>
<p>Voici un second exemple, pour un serveur Apache sur Mac OS X, lancé via l'utilitaire <code>setaudit</code>&nbsp;:</p>
<pre>header,127,11,execve(2),0,Wed Jun  1 14:50:44 2011, + 667 msec
exec arg,ls
path,/bin/ls
path,/bin/ls
attribute,100555,root,wheel,234881026,24767,0
subject,_www,_www,_www,_www,_www,26696,100031,0,0.0.0.0
return,success,0
trailer,127
header,131,11,open(2) - write,creat,trunc,0,Wed Jun  1 14:50:44 2011, + 735 msec
argument,3,0x1a4,mode
argument,2,0x601,flags
path,/Users/patpro/Sites/testFile.txt
subject,_www,_www,_www,_www,_www,26694,100031,0,0.0.0.0
return,failure : Permission denied,4294967295
trailer,131</pre>
<p>La requête http s'est faite sur la machine locale (http://localhost/...) vers un fichier PHP dont le code exécute la commande <code>system("ls");</code>  puis tente d'écrire un fichier testFile.txt.<br />
Le premier évènement enregistré montre le lancement de la commande <code>ls</code>, avec succès. Le second évènement montre la tentative d'écriture du fichier testFile.txt qui échoue.<br />
Cet exemple montre donc clairement comment les logs d'audit peuvent permettre, par exemple, de remonter la trace d'une compromission d'un serveur web. Notez que si j'avais lancé le serveur web normalement, sans utiliser <code>setaudit</code>, la ligne <code>subject</code> aurait indiqué <code>subject,patpro,_www,_www,_www,_www...</code>, patpro étant l'UID suivi par auditd. Il aurait donc fallu que le fichier <code>audit_user</code> indique les flags <code>ex</code> et <code>fc</code> pour le login patpro, sans quoi les évènements pour le serveur web n'auraient pas été enregistrés.</p>
<p><code>auditreduce</code> permet de filtrer les évènements selon un critère beaucoup plus fin que le simple flag (<code>fc</code>, <code>fd</code>, <code>ex</code>, ...). Il vous autorise à différencier chaque évènement avec la granularité du fichier <code>audit_event</code>. Si vous avez eu la curiosité d'ouvrir ce fichier, vous savez qu'il contient plus de 600 lignes de ce genre&nbsp;:</p>
<pre>0:AUE_NULL:indir system call:no
1:AUE_EXIT:exit(2):pc
2:AUE_FORK:fork(2):pc
3:AUE_OPEN:open(2) - attr only:fa
4:AUE_CREAT:creat(2):fc
5:AUE_LINK:link(2):fc
6:AUE_UNLINK:unlink(2):fd
7:AUE_EXEC:exec(2):pc,ex
8:AUE_CHDIR:chdir(2):pc
9:AUE_MKNOD:mknod(2):fc</pre>
<p>La nomenclature est simple. Chaque colonne est séparée des autres par ":". La première donne le numéro de référence d'un événement, la seconde donne son nom, la troisième le nom de la fonction correspondante, avec éventuellement un complément d'information, et la dernière indique le ou les flags correspondants.<br />
Sur les 10 lignes citées au dessus, vous notez qu'il y a déjà 4 évènements correspondants au flag <code>pc</code>, et 3 au flag <code>fc</code>. Donc si on se contente de faire un filtrage sur <code>pc</code> ou <code>fc</code>, on peut remontrer beaucoup trop d'évènements par rapport à ce que l'on cherche vraiment. Par ailleurs, dans certains cas, un même évènement peut correspondre à plusieurs flags contradictoires. Par exemple&nbsp;:</p>
<pre>75:AUE_OPEN_RTC:open(2) - read,creat,trunc:fc,fd,fr,fa,fm</pre>
<p>Cet évènement peut être détecté si on souhaite suivre les flags fc, fd, fr, fa ou fm !<br />
C'est ici qu'intervient le contenu de la ligne header des logs d'audit. En effet, l'entête indique clairement l'évènement qui est capturé. Par exemple <code>open(2) - write,creat,trunc</code>. Il suffit alors de chercher son nom dans le fichier <code>audit_event</code> pour pouvoir s'en servir de clé de filtrage&nbsp;:</p>
<pre>grep 'open(2) - write,creat,trunc' /etc/security/audit_event
79:AUE_OPEN_WTC:open(2) - write,creat,trunc:fc,fd,fw,fa,fm</pre>
<p>Il est alors possible d'utiliser <code>AUE_OPEN_WTC</code> comme ceci pour obtenir en sortie une sélection parfaite des évènements qu'on recherche&nbsp;:</p>
<pre>auditreduce -m AUE_OPEN_WTC -r www -o file=".*/bd/.*" /var/audit/current | praudit</pre>
<p>Cette commande permet de trouver tous les évènements <code>AUE_OPEN_WTC</code> pour l'utilisateur www qui ont eu pour cible des fichiers dont le chemin contient la chaîne "/bd/" dans le fichier de log d'audit courant.<br />
Il ne vous reste plus qu'à essayer par vous même !</p>
<h4>Bibliographie sommaire</h4>
<p><a href="http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/audit-config.html">http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/audit-config.html</a><br />
<a href="https://ssl.apple.com/support/security/commoncriteria/CommonCriteriaAdminGuide.pdf">https://ssl.apple.com/support/security/commoncriteria/CommonCriteriaAdminGuide.pdf</a><br />
<a href="x-man-page://auditreduce">man auditreduce</a><br />
<a href="x-man-page://auditd">man auditd</a><br />
<a href="x-man-page://audit_user">man audit_user</a><br />
<a href="x-man-page://audit_control">man audit_control</a><br />
<a href="x-man-page://audit_event">man audit_event</a><br />
<a href="x-man-page://audit.log">man audit.log</a><br />
<a href="http://forums.freebsd.org/showthread.php?t=23716">http://forums.freebsd.org/showthread.php?t=23716</a></p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2011/06/05/1895-utiliser-auditd-sur-mac-os-x-et-freebsd-3/' addthis:title='Utiliser auditd sur Mac OS X et FreeBSD &#8211; 3 '><a href="//addthis.com/bookmark.php?v=250&amp;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></content:encoded>
			<wfw:commentRss>http://www.patpro.net/blog/index.php/2011/06/05/1895-utiliser-auditd-sur-mac-os-x-et-freebsd-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Utiliser auditd sur Mac OS X et FreeBSD &#8211; 2</title>
		<link>http://www.patpro.net/blog/index.php/2011/06/01/1840-utiliser-auditd-sur-mac-os-x-et-freebsd-2/</link>
		<comments>http://www.patpro.net/blog/index.php/2011/06/01/1840-utiliser-auditd-sur-mac-os-x-et-freebsd-2/#comments</comments>
		<pubDate>Wed, 01 Jun 2011 13:45:02 +0000</pubDate>
		<dc:creator>patpro</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[Analyse]]></category>
		<category><![CDATA[BSD]]></category>
		<category><![CDATA[MacOSX]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[Surveillance]]></category>

		<guid isPermaLink="false">http://www.patpro.net/blog/?p=1840</guid>
		<description><![CDATA[Cet article est la suite de Utiliser auditd sur Mac OS X et FreeBSD - 1 Configuration : quid des utilisateurs comme www ? J'expliquais précédemment que le système d'audit ne peut suivre un utilisateur que si ce dernier se connecte à la machine (par ssh par exemple), et que quelques soient les ruses utilisées [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2011/06/01/1840-utiliser-auditd-sur-mac-os-x-et-freebsd-2/' addthis:title='Utiliser auditd sur Mac OS X et FreeBSD &#8211; 2 '><a href="//addthis.com/bookmark.php?v=250&#38;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></description>
			<content:encoded><![CDATA[<p>Cet article est la suite de <ins datetime="2011-06-01T13:55:03+00:00"><a href="/blog/index.php/2011/05/31/1822-utiliser-auditd-sur-mac-os-x-et-freebsd-1/">Utiliser auditd sur Mac OS X et FreeBSD - 1</a></ins> </p>
<h4>Configuration : quid des utilisateurs comme www ?</h4>
<p>J'expliquais précédemment que le système d'audit ne peut suivre un utilisateur que si ce dernier se connecte à la machine (par ssh par exemple), et que quelques soient les ruses utilisées (su, sudo...) c'est toujours l'UID réelle de l'utilisateur qui est suivie.</p>
<p>À cause de cela, il est totalement impossible de traquer des évènements appartenant à des utilisateurs qui ne peuvent pas se connecter au système. Ainsi, une ligne comme celle-ci dans <code>audit_user</code> ne permettra de traquer aucun évènement : </p>
<pre># pour freebsd remplacer _www par www
_www:fc,fd,ex:</pre>
<p>Il serait pourtant très intéressant de savoir ce que fait Apache dans votre dos, parfois sous la direction de méchants pirates.<br />
De nos jours, La plupart des serveurs utilisent des protocoles comme l'HTTP qui permettent aux utilisateurs d'accéder aux ressources sans être authentifiés au niveau du système. Les utilisateurs en question n'existent d'ailleurs pas au niveau du système. Néanmoins, les applications web permettent de faire énormément de choses via les langages comme le PHP, y compris d'interagir avec le système, en lançant des commandes, en créant des fichiers, etc.</p>
<p>Si on souhaite qu'auditd puisse contrôler les actions de www, il faut recourir à un artifice. Attention tout de même, ce qui suit est plus proche d'un hack que d'une méthode vraiment propre, et je ne peux pas garantir son fonctionnement correct dans un environnement de production.</p>
<p>En premier lieu il faut installer un programme spécifique, qui va permettre de forcer <code>auditd</code> à suivre les actions pour une UID donnée, sans que l'utilisateur correspondant ait besoin de se connecter à la machine.</p>
<pre>curl -LO http://www.freebsd.org/~csjp/setaudit.c
cc -o setaudit -lbsm setaudit.c </pre>
<p>Cela vous donne, si tout se passe bien, le binaire <code>setaudit</code>, que l'on va utiliser sous cette forme&nbsp;: </p>
<pre>setaudit -a UID_WWW -m FLAGS /programme/de/lancement/d/apache</pre>
<p>Pour suivre les évènements d'exécution de commande sous respectivement FreeBSD et Mac OS X, cela donnera :</p>
<pre>setaudit -a www -m ex /usr/local/etc/rc.d/apache22 restart
setaudit -a _www -m ex /usr/sbin/apachectl restart</pre>
<p>Ainsi, toutes les commandes lancées par Apache (donc sous l'UID www) sont enregistrées par <code>auditd</code>.<br />
Comme le masque des évènements (les flags de l'argument <code>-m</code>) décrit ce que l'on doit suivre, il est même inutile de renseigner le fichier <code>audit_user</code>.</p>
<p><strong>Pour résumer</strong> : </p>
<ul compact="" type="square">
<li>Si vous souhaitez que l'audit suive les utilisateurs qui se connectent à la machine, vous pouvez régler les classes d'évènements qui seront soumises à l'audit pour l'ensemble des utilisateurs dans le fichier <code>audit_control</code>, et gérer les cas particuliers dans <code>audit_user</code>.</li>
<li>Si vous souhaitez que l'audit suive des UID "interne", pour traquer tout signe de compromission sur un serveur web, un serveur de mail, etc. il faudra recourir à <code>setaudit</code> pour activer l'audit au moment du lancement du service correspondant.</li>
<li>Faites attention à la liste de flags que vous choisissez. Le volume des logs d'audit peut grossir très rapidement.</li>
</ul>
<p><a href="/blog/index.php/2011/06/05/1895-utiliser-auditd-sur-mac-os-x-et-freebsd-3/">Troisième partie de l'article -&gt;</a></p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2011/06/01/1840-utiliser-auditd-sur-mac-os-x-et-freebsd-2/' addthis:title='Utiliser auditd sur Mac OS X et FreeBSD &#8211; 2 '><a href="//addthis.com/bookmark.php?v=250&amp;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></content:encoded>
			<wfw:commentRss>http://www.patpro.net/blog/index.php/2011/06/01/1840-utiliser-auditd-sur-mac-os-x-et-freebsd-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Utiliser auditd sur Mac OS X et FreeBSD &#8211; 1</title>
		<link>http://www.patpro.net/blog/index.php/2011/05/31/1822-utiliser-auditd-sur-mac-os-x-et-freebsd-1/</link>
		<comments>http://www.patpro.net/blog/index.php/2011/05/31/1822-utiliser-auditd-sur-mac-os-x-et-freebsd-1/#comments</comments>
		<pubDate>Tue, 31 May 2011 21:51:19 +0000</pubDate>
		<dc:creator>patpro</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[Analyse]]></category>
		<category><![CDATA[BSD]]></category>
		<category><![CDATA[MacOSX]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[Surveillance]]></category>

		<guid isPermaLink="false">http://www.patpro.net/blog/?p=1822</guid>
		<description><![CDATA[FreeBSD et les versions récentes de Mac OS X sont livrées avec un système d'audit intégré, dérivé du Basic Security Module de SUN, et disponible en logiciel libre sous le nom d'OpenBSM. Ce système d'audit se décompose en deux parties : un ensemble d'appels systèmes dédiés et de librairies d'un côté, et des logiciels "utilisateur" [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2011/05/31/1822-utiliser-auditd-sur-mac-os-x-et-freebsd-1/' addthis:title='Utiliser auditd sur Mac OS X et FreeBSD &#8211; 1 '><a href="//addthis.com/bookmark.php?v=250&#38;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></description>
			<content:encoded><![CDATA[<p><strong>FreeBSD</strong> et les versions récentes de <strong>Mac OS X</strong> sont livrées avec un système d'audit intégré, dérivé du Basic Security Module de SUN, et disponible en logiciel libre sous le nom d'<strong><a href="http://en.wikipedia.org/wiki/OpenBSM">OpenBSM</a></strong>. Ce système d'audit se décompose en deux parties : un ensemble d'appels systèmes dédiés et de librairies d'un côté, et des logiciels "utilisateur" de l'autre. Sauf précision contraire, les explications présentées ici sont valables à la fois pour FreeBSD 7 et 8, et Mac OS X 10.6. Dans cette série d'articles je ne vais aborder que l'aspect "utilisateur" du système d'audit : comment l'activer, comment le configurer, comment exploiter les résultats.<br />
Le système d'audit fourni par OpenBSM a pour but la surveillante des actions des utilisateurs. Un certain nombre d'évènements peuvent être mis sous surveillance, pour tout ou partie des utilisateurs. Quand le système d'exploitation détecte qu'un utilisateur sous surveillance génère un des évènements à surveiller, il averti le démon <code>auditd</code> qui se charge de reporter cet évènement dans un fichier de log.<span id="more-1822"></span><br />
On parle ici d'évènements de bas niveau, c'est à dire que le système d'audit ne peut pas dire que tel utilisateur à envoyé un email ou passé quinze minutes à coder en AppleScript. Par contre, il est capable de dire qu'un utilisateur à ouvert un fichier en écriture, ou juste en lecture, ou qu'il a exécuté un programme, etc.<br />
On parle donc d'un système d'audit de sécurité, totalement sans rapport avec des logiciels comme <a href="/blog/index.php/2008/10/19/541-slife-le-time-tracking-pour-tous/">SLife</a>. </p>
<p><a href="#activation">Activation du système d'audit</a><br />
<a href="#config">Configuration</a><br />
<a href="/blog/index.php/2011/06/01/1840-utiliser-auditd-sur-mac-os-x-et-freebsd-2/">Configuration : quid des utilisateurs comme www ?</a><br />
<a href="/blog/index.php/2011/06/05/1895-utiliser-auditd-sur-mac-os-x-et-freebsd-3/">Exploiter les résultats de l'audit</a></p>
<p><a id="activation"></a></p>
<h4>Activation du système d'audit</h4>
<p>Sous FreeBSD 7 et 8, le noyau est déjà compilé avec <code>options AUDIT</code>, il ne reste donc qu'à lancer le démon <code>auditd</code> en ajoutant la ligne suivante au fichier <code>/etc/rc.conf</code> :</p>
<pre>auditd_enable="YES"</pre>
<p>puis en lançant le démon à la main :</p>
<pre>sudo /etc/rc.d/auditd start</pre>
<p>Sous Mac OS X 10.6, <code>auditd</code> est lancé d'office par <code>launchd</code>, il n'y a rien à faire.<br />
<a id="config"></a></p>
<h4>Configuration</h4>
<p>Une fois lancé, le système d'audit va enregistrer très peu d'évènements par défaut. Il convient donc de faire quelques réglages en fonction de ce que l'on cherche à accomplir.<br />
Les fichiers de configuration d'<code>auditd</code> se trouvent dans le répertoire <code>/etc/security</code> où seul root peut écrire. </p>
<ul compact="" type="square">
<li><code>audit_class</code> : décrit les différentes classes d'évènements qu'il est possible de surveiller. Il est sage de ne pas éditer ce fichier.</li>
<li><code>audit_control</code> : lisible seulement par root, ce fichier défini la politique d'audit par défaut.</li>
<li><code>audit_event</code> : le grand frère de <code>audit_class</code>, on ne le modifie pas.</li>
<li><code>audit_user</code> : le fichier de réglages par utilisateur. Il complète <code>audit_control</code> et n'est lisible que par root.</li>
<li><code>audit_warn</code> : un fichier exécutable qui est lancé quand <code>auditd</code> manque de place sur le disque pour écrire les logs.</li>
</ul>
<p>Pour un usage courant, seuls les fichiers <a href="x-man-page://audit_control">audit_control</a> et <a href="x-man-page://audit_user">audit_user</a> sont intéressants. La première chose à faire est d'aller lire leur page man respective.</p>
<p>Par défaut, le contenu du fichier <code>audit_control</code> est le suivant : </p>
<pre>dir:/var/audit
flags:lo,aa
minfree:5
naflags:lo,aa
policy:cnt,argv
filesz:2M
expire-after:10M</pre>
<p>Avec ces valeurs, <code>auditd</code> ne va répertorier que les évènements des classes "<code>lo</code>" (login/logout) et "<code>aa</code>" (authentification/autorisation). Et il va le faire pour l'ensemble des utilisateurs.<br />
Attention : après avoir lu le <a href="x-man-page://audit_control">man audit_control</a>, vous serez peut être tenté d'ajouter le champs "host" pour compléter la configuration. N'en faites rien. Cela peut perturber les outils utilisateur et rendre l'exploitation des résultats hasardeuse, voire impossible.<br />
Le contenu de <code>audit_user</code> quant à lui nous permet de préciser des flags en se basant sur le login des utilisateurs. Par défaut, le fichier <code>audit_user</code> contient :</p>
<pre>root:lo:no
</pre>
<p>C'est à dire que, quelque soit la liste des flags <code>audit_control</code>, les évènements de la classe "<code>lo</code>" seront suivis pour l'utilisateur root, et les évènements de la classe "<code>no</code>" (invalides) ne seront jamais suivis.<br />
Vous pouvez immédiatement vérifier que votre système d'audit fonctionne en lisant en direct les évènements qu'il enregistre. Il suffit pour cela de taper la commande suivante en root (ou via <code>sudo</code>) :</p>
<pre># praudit /dev/auditpipe</pre>
<p>Utilisez alors une autre fenêtre de terminal pour gérer des traces. Sous Mac OS X vous pouvez faire un sudo, ou simplement fermer la fenêtre de terminal, par exemple. Vous pourrez alors lire des choses comme cela :</p>
<pre>header,104,11,user authentication,0,Wed Jun  1 14:53:39 2011, + 965 msec
subject,root,root,wheel,root,wheel,26712,0,0,0.0.0.0
text,Authentication for user &lt;patpro&gt;
return,success,0
trailer,104
header,68,11,logout - local,0,Wed Jun  1 15:36:12 2011, + 554 msec
subject,patpro,root,patpro,patpro,patpro,28079,28079,0,0.0.0.0
return,success,0
trailer,68</pre>
<p>Nous en reparlerons dans le dernier article de la série.</p>
<p>Faites bien attention aux flags que vous allez régler. Dans certains cas, le nombre d'évènements enregistrés par le système d'audit peut être extrêmement élevé. Par défaut peu de choses sont soumises à l'audit, si bien qu'en 18 mois sur une station de travail, le contenu de <code>/var/audit</code> représente moins de 10 Mo. A contrario, sur un serveur web assez actif, où les classes d'audit sont "<code>fd,^fc,ex:no,fc</code>", on dépasse les 43 Mo en a peine 4 heures d'audit. </p>
<p>Il faut bien comprendre que l'activation de l'audit pour un utilisateur ne se produit qu'au moment de la première connexion de l'utilisateur au système. Prenons un exemple. Le fichier <code>audit_user</code> contient :</p>
<pre>root:lo:no
patpro:fc,fd,ex:
</pre>
<p>Donc pour l'utilisateur patpro, les créations, ouvertures, suppression de fichier, ou exécutions de programmes doivent être suivis. Cet utilisateur a une crontab qui tourne toutes les nuits et télécharge un fichier. Pourtant, auditd ne capturera aucun de ces évènements tant que l'utilisateur patpro ne se sera pas connecté à la machine, alors même que de nombreux évènements correspondants aux critères de l'audit se produisent.<br />
Dès que l'utilisateur patpro se sera connecté à la machine, auditd se mettra à enregistrer toutes les actions correspondant aux classes <code>fc</code>, <code>fd</code> et <code>ex</code> exécutées sous l'UID patpro. Cet audit se poursuivra même après la déconnexion de l'utilisateur.<br />
Par ailleurs, l'UID qui est traquée par auditd n'est pas l'UID apparente, mais l'UID d'origine de l'utilisateur. Si je me connecte en tant que patpro, et que je fais un <code>su -</code> ou un <code>sudo -Es</code>, je deviens root dans le shell (UID apparente), mais je reste patpro aux yeux d'auditd.<br />
Nous verrons dans un second article pourquoi ces deux contraintes sont importantes. D'ici là, vous pouvez approfondir les aspects simples de la configuration en lisant ces différents documents : </p>
<p><a href="http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/audit-config.html">http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/audit-config.html</a><br />
<a href="https://ssl.apple.com/support/security/commoncriteria/CommonCriteriaAdminGuide.pdf">https://ssl.apple.com/support/security/commoncriteria/CommonCriteriaAdminGuide.pdf</a></p>
<p><a href="/blog/index.php/2011/06/01/1840-utiliser-auditd-sur-mac-os-x-et-freebsd-2/">Deuxième partie -&gt;</a></p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2011/05/31/1822-utiliser-auditd-sur-mac-os-x-et-freebsd-1/' addthis:title='Utiliser auditd sur Mac OS X et FreeBSD &#8211; 1 '><a href="//addthis.com/bookmark.php?v=250&amp;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></content:encoded>
			<wfw:commentRss>http://www.patpro.net/blog/index.php/2011/05/31/1822-utiliser-auditd-sur-mac-os-x-et-freebsd-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mon ami grep</title>
		<link>http://www.patpro.net/blog/index.php/2011/05/13/1801-mon-ami-grep/</link>
		<comments>http://www.patpro.net/blog/index.php/2011/05/13/1801-mon-ami-grep/#comments</comments>
		<pubDate>Fri, 13 May 2011 06:04:28 +0000</pubDate>
		<dc:creator>patpro</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[Benchmark]]></category>
		<category><![CDATA[BSD]]></category>
		<category><![CDATA[MacOSX]]></category>

		<guid isPermaLink="false">http://www.patpro.net/blog/?p=1801</guid>
		<description><![CDATA[grep, c'est mon ami. C'est d'ailleurs probablement l'ami de pas mal d'administrateurs système (enfin, les vrais quoi*). De temps en temps, il faut quand même bien vérifier que son ami est au mieux de sa forme, s'enquérir de ses performances, évaluer d'un œil critique si son environnement lui convient bien. Quand vous avez un millier [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2011/05/13/1801-mon-ami-grep/' addthis:title='Mon ami grep '><a href="//addthis.com/bookmark.php?v=250&#38;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></description>
			<content:encoded><![CDATA[<p><a href="x-man-page://grep">grep</a>, c'est mon ami. C'est d'ailleurs probablement l'ami de pas mal d'<a href="http://www.patpro.net/cv">administrateurs système</a> (enfin, les vrais quoi*). De temps en temps, il faut quand même bien vérifier que son ami est au mieux de sa forme, s'enquérir de ses performances, évaluer d'un œil critique si son environnement lui convient bien.</p>
<p>Quand vous avez un millier de chaînes de caractères, dont vous souhaitez retrouver toutes les occurrences dans un gros fichier de 685000 lignes, vous pouvez utiliser <code>grep</code> de deux manières :</p>
<ol type="1">
<li>vous dites à votre ami <code>grep</code> de chercher toutes les chaînes en même temps dans le gros fichier,</li>
<li>vous utilisez une boucle pour dire à <code>grep</code> de chercher une chaîne dans le fichier, puis de passer à la chaîne suivante, …</li>
</ol>
<p>La solution 1 semble la plus intéressante. Une seule commande, pas de boucle, on se dit naturellement que c'est plus économique, et donc plus rapide. La solution 2, on se dit qu'elle est moche, complexe, et que les performances vont être mauvaises.</p>
<p>Petit test grandeur nature sur un serveur FreeBSD 7.x virtualisé, 2 CPU, 2Go de RAM :</p>
<p>Méthode 1 :<br />
<code>grep -i -f liste_emails maillog</code><br />
opération terminée en 370 min environ.<br />
Méthode 2 :<br />
<code>while read email; do grep -i $email maillog ; done&lt;liste_emails</code><br />
opération terminée en 1 min 32 s.</p>
<p>Bien sûr, le résultat est le même en terme de contenu, la seule différence est l'ordre des lignes. La méthode moche et supposée lente est juste 240 fois plus rapide que la méthode académique. Shame on you <code>grep</code>. Shame on you.</p>
<p>L'environnement est aussi important. On pourrait se dire qu'avec plus de CPU (en puissance, pas en nombre), plus de RAM, tout irait tellement plus vite. Essayons la même chose sur un Mac Pro Xeon quad-core, avec 12 Go de RAM, sous Mac OS X 10.6.</p>
<p>Méthode 1 : 223 min.<br />
Méthode 2 : 35 min 45 s.</p>
<p>Ce qui prouve une fois de plus que Mac OS X est un gros tromblon quand il s'agit de fork. Comprendre que le coût du lancement d'un programme, en terme de ressources système, est beaucoup plus fort que sur d'autres OS, comme FreeBSD par exemple. Ce qui fait de Mac OS X un très mauvais candidat pour les scripts shell utilisant des boucles de manière très intensive.<br />
On voit aussi que la vitesse d'exécution de la méthode 1 est essentiellement liée à la puissance de calcul du CPU, alors que la vitesse de la méthode 2 est essentiellement liée à la capacité du système d'exploitation de créer des process rapidement.</p>
<p>Pour conclure, j'ai fait un petit test avec <a href="x-man-page://awk">awk</a>, sur les mêmes fichiers. Moyennant quelques aménagements triviaux pour transformer le fichier liste_emails en programme <code>awk</code>, j'ai pu lancer la commande <code>awk -f liste_emails maillog</code> qui est l'équivalent de la méthode 1 pour <code>grep</code>. Le temps d'exécution est tombé à moins de 15 minutes sur Mac OS X, et moins de 30 minutes sur le FreeBSD.</p>
<p>* ceux qui ont fait 5 ans d'études dans une autre branche, avant de passer à l'informatique, par exemple.</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2011/05/13/1801-mon-ami-grep/' addthis:title='Mon ami grep '><a href="//addthis.com/bookmark.php?v=250&amp;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></content:encoded>
			<wfw:commentRss>http://www.patpro.net/blog/index.php/2011/05/13/1801-mon-ami-grep/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installer un serveur dédié &#171;&#160;Source&#160;&#187; sur FreeBSD 8</title>
		<link>http://www.patpro.net/blog/index.php/2010/11/19/1709-installer-un-serveur-dedie-source-sur-freebsd-8/</link>
		<comments>http://www.patpro.net/blog/index.php/2010/11/19/1709-installer-un-serveur-dedie-source-sur-freebsd-8/#comments</comments>
		<pubDate>Fri, 19 Nov 2010 01:11:03 +0000</pubDate>
		<dc:creator>patpro</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[BSD]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Logiciel]]></category>

		<guid isPermaLink="false">http://www.patpro.net/blog/?p=1709</guid>
		<description><![CDATA[Source Dedicated Server, le serveur de jeu dédié de Valve pour Team Fortress, Left 4 Dead et Counter Strike (entre autres), est un logiciel Linux ou Windows, propriétaire. Donc les choses ne se présentent pas forcément très bien pour une installation sur FreeBSD. Cependant, il n'y a pas beaucoup d'efforts à faire pour installer et [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2010/11/19/1709-installer-un-serveur-dedie-source-sur-freebsd-8/' addthis:title='Installer un serveur dédié &#171;&#160;Source&#160;&#187; sur FreeBSD 8 '><a href="//addthis.com/bookmark.php?v=250&#38;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></description>
			<content:encoded><![CDATA[<p><strong>Source Dedicated Server</strong>, le serveur de jeu dédié de Valve pour Team Fortress, Left 4 Dead et Counter Strike (entre autres), est un logiciel Linux ou Windows, propriétaire. Donc les choses ne se présentent pas forcément très bien pour une installation sur FreeBSD. Cependant, il n'y a pas beaucoup d'efforts à faire pour installer et faire fonctionner ce logiciel grace à la compatibilité Linux de FreeBSD.</p>
<p>Dans un premier temps il faut activer, si ce n'est déjà fait, la compatibilité Linux dans le noyau de FreeBSD :</p>
<pre># chargement manuel du module
kldload /boot/kernel/linux.ko
# activation du chargement automatique au démarrage
echo 'linux_enable="YES"' &gt;&gt; /etc/rc.conf </pre>
<p>Ensuite (et pas avant), on peut installer les librairies Linux. Pour FreeBSD 8, il faut installer la version f10 :</p>
<pre>portinstall -PP linux_base-f10</pre>
<p>Attention, si vous êtes en FreeBSD 64 bits (amd64), le package refusera de s'installer, il faudra alors utiliser :</p>
<pre>portinstall linux_base-f10</pre>
<p>On termine de préparer l'environnement de compatibilité Linux en montant le système de fichier <code>procfs</code>. Il faut ajouter la ligne suivante au fichier <code>/etc/fstab</code></p>
<pre>linproc         /compat/linux/proc      linprocfs       rw 0 0</pre>
<p>puis faire un </p>
<pre>mount -a</pre>
<p>Enfin, on peut installer le client <code>steam</code> : </p>
<pre>portinstall linux-steam</pre>
<p>En réalité, c'est seulement un logiciel de mise à jour du client <code>steam</code> qui est installé, il faut lancer la mise à jour pour que la vraie commande <code>steam</code> soit installée. Je fais cette étape deux fois :</p>
<pre>cd /usr/local/steam/
./steam
# on attend la fin de l'exécution
# puis on recommence
./steam</pre>
<p>Le binaire <code>steam</code> est maintenant installé, à jour, et totalement fonctionnel. Via ce client, il est possible d'installer n'importe quel jeu compatible. Voilà comment procéder pour installer Left 4 Dead 2 :</p>
<pre>./steam -command update -game left4dead2 -dir /chemin/du/jeu</pre>
<p>On remplacera <code>/chemin/du/jeu</code> par le chemin du répertoire dans le quel on souhaite stocker les fichiers du jeu. Attention, pour Left 4 Dead 2 il y a environ 8 Go à télécharger. Si vous êtes sur de l'UFS, c'est donc 8 Go de stockage qui seront consommés. Si vous êtes sur un volume ZFS avec compression GZip, il faut compter environ 4,2 Go d'espace disque consommé. Le téléchargement est assez long, faites une pause, voire même, lancez la commande avant d'aller vous coucher.</p>
<p>Après cela, le répertoire <code>/chemin/du/jeu</code> contiendra un répertoire <code>left4dead2</code>. Dans ce dernier se trouve un script de lancement qui permet de démarrer le serveur dédié Source : <code>srcds_run</code>.<br />
Voici un exemple de lancement :</p>
<pre>cd /chemin/du/jeu/left4dead2
./srcds_run -ip 192.168.1.1 +sv_lan 1</pre>
<p>L'option <code>-ip</code> permet d'imposer l'IP sur la quelle le serveur écoute. C'est très utile car le script est d'une bêtise monumentale. En effet, pour une raison que j'ignore, le serveur dédié se lance par défaut en utilisant la toute première IP configurée dans le fichier <code>/etc/rc.conf</code> même si la ligne est commentée !<br />
C'est à dire que si votre <code>rc.conf</code> contient les lignes suivantes :</p>
<pre>#ifconfig_em0="inet 192.168.128.201  netmask 255.255.255.0"
ifconfig_em0="inet 193.30.227.216  netmask 255.255.255.192"</pre>
<p>et bien cet abruti de serveur tente de se lancer sur l'IP 192.168.128.201, alors que, bien sûr, l'IP n'est pas active. Épargnez votre santé mentale, imposez dès le départ une IP à <code>srcds</code>.<br />
L'option <code>+sv_lan 1</code> quant à elle impose un fonctionnement sur le LAN uniquement, ce qui permet aisément de tester le fonctionnement du serveur sans l'ouvrir sur le monde.</p>
<p>Vous devrez veiller à quelques points de détail : </p>
<ul type="circle">
<li>le firewall doit autoriser les connexions TCP et UDP sur les ports 26901 et 27015.</li>
<li>le jeu peut (doit) être lancé avec un utilisateur non privilégié. Créez un compte pour l'occasion, avec un shell <code>/bin/nologin</code>, et toute autre mesure de protection que vous jugerez nécessaire.<br />
Attention, faire tourner le jeu avec un utilisateur non privilégié n'est pas forcément très simple, surtout si vous l'avez installé en root. J'ai découvert que lancer le jeu une première fois en root peut régler certains problèmes.</li>
<li>l'utilisateur en question devra notamment pouvoir écrire dans les répertoires <code>/chemin/du/jeu/left4dead2/update</code>, <code>/chemin/du/jeu/left4dead2/left4dead2</code> et <code>/chemin/du/jeu/left4dead2/left4dead2/{downloads,logs}</code> et dans les fichiers <code>/chemin/du/jeu/left4dead2/left4dead2/*.cache</code></li>
<li>il devra aussi pouvoir exécuter les fichiers <code>/chemin/du/jeu/left4dead2/srcds_run</code> <code>/chemin/du/jeu/left4dead2/srcds_linux</code></li>
</ul>
<p>Pour un utilisateur non privilégié, en "nologin", le moyen fiable de lancer le serveur est d'utiliser sudo, dans un screen pour être tranquille :</p>
<pre>cd /chemin/du/jeu/left4dead2/
screen nice -n -5 sudo -u utilisateur_steam ./srcds_run -ip 192.168.1.1</pre>
<p>Avec tout ceci, votre serveur doit être fonctionnel, et permet déjà de jouer. Le plus dur reste à faire, puisque de toute l'histoire de l'informatique, ce sont les serveurs de jeu qui détiennent la triste palme des logiciels les moins bien documentés au monde. Créez un fichier <code>/chemin/du/jeu/left4dead2/left4dead2/cfg/server.cfg</code> et testez des combinaisons jusqu'à obtenir le résultat souhaité.</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2010/11/19/1709-installer-un-serveur-dedie-source-sur-freebsd-8/' addthis:title='Installer un serveur dédié &laquo;&nbsp;Source&nbsp;&raquo; sur FreeBSD 8 '><a href="//addthis.com/bookmark.php?v=250&amp;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></content:encoded>
			<wfw:commentRss>http://www.patpro.net/blog/index.php/2010/11/19/1709-installer-un-serveur-dedie-source-sur-freebsd-8/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

