<?xml version="1.0" encoding="iso-8859-1"?>
<rss version="2.0"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
>

<channel>
	<title>Geek or not</title>
	<link>http://geekz.fr/</link>
	<description></description>
	<language>fr</language>
	<generator>SPIP - www.spip.net</generator>





	<item>
		<title>Fermeture automatique des processus inutilises VNC de xen guest</title>
		<link>http://geekz.fr/Fermeture-automatique-des</link>
		<guid isPermaLink="true">http://geekz.fr/Fermeture-automatique-des</guid>
		<dc:date>2008-01-31T19:37:03Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>b3nj</dc:creator>

<category domain="http://geekz.fr/-Boite-a-outils-">Boite &#224; outils</category>


		<description>

-
&lt;a href="http://geekz.fr/-Boite-a-outils-" rel="directory"&gt;Boite &#224; outils&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;Le pourquoi&lt;/strong&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;J'ai remarqu&#233; que sur les machines de virtualisation &#224; base de xen (que l'on nommera xen host par la suite), dans le cas pr&#233;cis o&#249; les xen guests fonctionnent en HVM et n&#233;cessitent donc un processus VNC pour pouvoir acc&#232;s &#224; la console, et que les xen guests sont d&#233;marr&#233;s/red&#233;marr&#233;s, il arrive que les processus en attente de connection VNC en relation avec le xen guest pr&#233;c&#233;demment red&#233;marr&#233; restent actifs m&#234;me s'il n'existe plus.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;Le comment&lt;/strong&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Voici donc le script qui va :
* lister les xen guests effectivement en fonctionnement
* lister les processus VNC en fonctionnement
* tuer les processus qui ne sont pas dans l'intersection logique des deux listes&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;br /&gt; #!/bin/env bash&lt;br /&gt; active_xen_domUs=$(xm list | awk '{print &quot;-&quot;$2&quot;-&quot;}' | grep -v ID | tr '\n' '|')&lt;br /&gt; active_xen_domUs=&quot;(${active_xen_domUs%'|'})&quot;&lt;br /&gt; tokill=$(ps faux | grep -v grep | grep xen-vncfb | awk '{print $2 &quot;-&quot;$16&quot;-&quot;}')&lt;br /&gt; echo &quot;Process to kill :&quot;&lt;br /&gt; for i in $tokill; do&lt;br /&gt; echo $i | egrep -v $active_xen_domUs | cut -d &quot;-&quot; -f 1 | xargs kill -9&lt;br /&gt; done&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;C'est un peu barbare, mais &#231;a fonctionne bien.
Vous pouvez enregistrer ce script dans &lt;code&gt;/usr/local/sbin/&lt;code&gt; et cr&#233;er un job cron s'ex&#233;cutant &#224; votre guise.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_ps'&gt;Le script n'est pas parfait, mais a le merite d'exister et n'utilise que tres peu de ressources.&lt;/div&gt;
		</content:encoded>


		

	</item>



	<item>
		<title>Apache et SuExec, execution de php en tant que script CGI</title>
		<link>http://geekz.fr/Apache-et-SuExec-execution-de-php</link>
		<guid isPermaLink="true">http://geekz.fr/Apache-et-SuExec-execution-de-php</guid>
		<dc:date>2007-12-29T21:40:08Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>b3nj</dc:creator>

<category domain="http://geekz.fr/-Systeme-">Syst&#232;me</category>

		<dc:subject>Apache</dc:subject>
		<dc:subject>Securite</dc:subject>

		<description>L'interet de la mise en place d'une telle solution est de changer les droits avec lesquels le serveur apache fonctionne avec les droits d'utilisateurs differents et plus restreints. &lt;br /&gt;Execution de scripts CGI avec SuEXEC &lt;br /&gt;Qu'est-ce que SuExec ? &lt;br /&gt;SuExec est la fonctionnalit&#233; apache permettant d'executer les processus fils avec d'autres droits d'utilisateur/de groupe. &lt;br /&gt;Comment savoir si mon installation apache dispose du m&#233;canisme SuExec ? &lt;br /&gt;Par d&#233;faut, sous gentoo, du tant que vous n'avez pas (...)


-
&lt;a href="http://geekz.fr/-Systeme-" rel="directory"&gt;Syst&#232;me&lt;/a&gt;

/ 
&lt;a href="http://geekz.fr/+-Apache-+" rel="tag"&gt;Apache&lt;/a&gt;, 
&lt;a href="http://geekz.fr/+-Securite-+" rel="tag"&gt;Securite&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;L'interet de la mise en place d'une telle solution est de changer les droits avec lesquels le serveur apache fonctionne avec les droits d'utilisateurs differents et plus restreints.&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h3 class=&quot;spip&quot;&gt;Execution de scripts CGI avec SuEXEC&lt;/h3&gt;
&lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;Qu'est-ce que SuExec ?&lt;/strong&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;SuExec est la fonctionnalit&#233; apache permettant d'executer les processus fils avec d'autres droits d'utilisateur/de groupe.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;Comment savoir si mon installation apache dispose du m&#233;canisme SuExec ?&lt;/strong&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Par d&#233;faut, sous gentoo, du tant que vous n'avez pas compil&#233; apache avec le use flag &lt;code class='spip_code' dir='ltr'&gt;no-suexec&lt;/code&gt;, cette fonctionnalit&#233; est disponible.
Il est important de sp&#233;cifier dans le fichier de configuration de d&#233;marrage d'apache &lt;code class='spip_code' dir='ltr'&gt;/etc/conf.d/apache2&lt;/code&gt; l'option &lt;code class='spip_code' dir='ltr'&gt;-D SUEXEC&lt;/code&gt; ce qui peut &#234;tre par exemple : &lt;code class='spip_code' dir='ltr'&gt;APACHE2_OPTS=&quot;-D DEFAULT_VHOST -D INFO -D LANGUAGE -D MANUAL -D SUEXEC -D PHP5&quot;&lt;/code&gt;.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Pour v&#233;rifier si le m&#233;canisme est actif lors du d&#233;marrage d'apache, vous trouverez dans le fichier &lt;code class='spip_code' dir='ltr'&gt;/var/log/apache2/error.log&lt;/code&gt; quelque chose de similaire &#224; &lt;code class='spip_code' dir='ltr'&gt;suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)&lt;/code&gt;.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;Sp&#233;cifier les droits corrects sur le logiciel &#233;tablissant le m&#233;canisme&lt;/strong&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Il est important de changer les droits sur le wrapper suexec :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;br /&gt; chown root:apache /usr/bin/suexec&lt;br /&gt; chmod 4750 /usr/bin/suexec&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;Mise en place du m&#233;canisme SuExec pour un vhost&lt;/strong&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Commen&#231;ons par cr&#233;er un groupe auxquels appartiendront tous les utilisateurs suexec et &#233;galement un utilisateur avec les droits restreints :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;br /&gt; groupadd webusers&lt;br /&gt; useradd -c &quot;Suexec user 1&quot; -g webusers -s /sbin/nologin webuser1&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Pour changer l'utilisateur utilis&#233; pour faire fonctionner les scripts cgi, il faut sp&#233;cifier dans la configuration du vhost la directive SuexecUserGroup [&lt;a href=&quot;http://geekz.fr/#nb1-1&quot; name=&quot;nh1-1&quot; id=&quot;nh1-1&quot; class=&quot;spip_note&quot; title='[1] http://httpd.apache.org/docs/2.2/mod/mod_suexec.html#suexecusergroup' &gt;1&lt;/a&gt;] suivie du nom d'utilisateur et du nom du groupe &#224; utiliser.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Vous obtiendrez une configuration pour votre vhost similaire &#224; ceci :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;br /&gt; &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt; ServerName domain.tld&lt;br /&gt; ServerAlias *.domain.tld&lt;br /&gt; DocumentRoot /var/www/geekz.fr/htdocs/&lt;br /&gt; ErrorLog /var/www/domain.tld/logs/error.log&lt;br /&gt; CustomLog /var/www/domain.tld/logs/access.log combined&lt;br /&gt; SuexecUserGroup webuser1 webusers&lt;br /&gt; &amp;lt;Directory &quot;/var/www/domain.tld/htdocs&quot;&amp;gt;&lt;br /&gt; AllowOverride All&lt;br /&gt; Order deny,allow&lt;br /&gt; Allow from all&lt;br /&gt; Options FollowSymLinks&lt;br /&gt; &amp;lt;/Directory&amp;gt;&lt;br /&gt; &amp;lt;IfModule alias_module&amp;gt;&lt;br /&gt; ScriptAlias /cgi-bin/ /var/www/domain.tld/cgi-bin/&lt;br /&gt; &amp;lt;/IfModule&amp;gt;&lt;br /&gt; &amp;lt;Directory &quot;/var/www/domain.tld/cgi-bin&quot;&amp;gt;&lt;br /&gt; AllowOverride None&lt;br /&gt; Order deny,allow&lt;br /&gt; Allow from all&lt;br /&gt; Options +ExecCGI&lt;br /&gt; &amp;lt;/Directory&amp;gt;&lt;br /&gt; &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Il est bien sur n&#233;cessaire de modifier les droits des propri&#233;taires des fichiers dans le r&#233;pertoire cgi-bin :&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;code class='spip_code' dir='ltr'&gt;chown -R webuser1:webusers /var/www/domain.tld/cgi-bin&lt;/code&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Relancez apache (apr&#232;s avoir valid&#233; la configuration ;)) et hop, vos scripts cgi fonctionnent avec des droits diff&#233;rents.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Voici un exemple de ce que l'on peut voir niveau processus lors de l'execution d'un script cgi :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;root 2082 0.0 4.5 185748 11564 ? Ss 20:49 0:00 /usr/sbin/apache2 -D DEFAULT_VHOST -D INFO -D LANGUAGE -D MANUAL -D SUEX&lt;br /&gt; apache 2945 0.0 2.5 185748 6436 ? S 21:01 0:00 \_ /usr/sbin/apache2 -D DEFAULT_VHOST -D INFO -D LANGUAGE -D MANUAL -D&lt;br /&gt; 1003 4048 4.0 0.5 17580 1416 ? S 21:39 0:00 | \_ bash dig-short.cgi google.com,TXT,80.92.65.30&lt;br /&gt; 1003 4061 0.0 0.2 17580 536 ? S 21:39 0:00 | \_ bash dig-short.cgi google.com,TXT,80.92.65.30&lt;br /&gt; 1003 4062 0.0 0.7 13108 1888 ? S 21:39 0:00 | \_ /usr/bin/dig +time=2 +short TXT google.com @80.92.65.30&lt;br /&gt; 1003 4063 0.0 0.2 3828 552 ? S 21:39 0:00 | \_ /bin/sed s/$/&amp;lt;br \/&amp;gt;/g&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Nous voyons bien que le script cgi fonctionne avec l'uid 1003.&lt;/p&gt; &lt;hr class=&quot;spip&quot; /&gt;
&lt;h3 class=&quot;spip&quot;&gt;Configuration d'apache pour faire interpr&#233;ter les scripts php en tant que script cgi&lt;/h3&gt;
&lt;p class=&quot;spip&quot;&gt;Faisant suite &#224; la premi&#232;re partie de cet article, il faire fonctionner l'interpr&#233;teur php en mode cgi nous permet d'appliquer une certaine restriction de droits &#224; un vhost.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;Mise en place&lt;/strong&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Pour ce faire, il vous suffit d'avoir un php compil&#233; avec l'option cgi (use flag cgi sous gentoo) et vous disposerez du binaire &lt;code class='spip_code' dir='ltr'&gt;php-cgi&lt;/code&gt; dans &lt;code class='spip_code' dir='ltr'&gt;/usr/bin&lt;/code&gt;. Il est n&#233;cessaire pour ce setup de copier &lt;code class='spip_code' dir='ltr'&gt;/usr/bin/php-cgi&lt;/code&gt; dans le r&#233;pertoire &lt;code class='spip_code' dir='ltr'&gt;cgi-bin&lt;/code&gt; [&lt;a href=&quot;http://geekz.fr/#nb1-2&quot; name=&quot;nh1-2&quot; id=&quot;nh1-2&quot; class=&quot;spip_note&quot; title='[2] En fait, &#224; chaque upgrade/recompilation de php, il faudra le (...)' &gt;2&lt;/a&gt;] :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;cp /usr/bin/php-cgi /var/www/domain.tld/cgi-bin/&lt;br /&gt; chown -R webuser1:webuser /var/www/domain.tld/cgi-bin/&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Puis il faut maintenant cr&#233;er un handler personnalis&#233; pour les fichiers ayant l'extension &lt;code class='spip_code' dir='ltr'&gt;php&lt;/code&gt; avec la directive &lt;code class='spip_code' dir='ltr'&gt;AddHandler&lt;/code&gt; [&lt;a href=&quot;http://geekz.fr/#nb1-3&quot; name=&quot;nh1-3&quot; id=&quot;nh1-3&quot; class=&quot;spip_note&quot; title='[3] http://httpd.apache.org/docs/2.2/mod/mod_mime.html#addhandler' &gt;3&lt;/a&gt;] :&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;code class='spip_code' dir='ltr'&gt;AddHandler suexec-script .php&lt;/code&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Il suffit maintenant de sp&#233;cifier quel doit &#234;tre le programme est relatif au handler cr&#233;&#233; pr&#233;c&#233;demment avec la directive &lt;code class='spip_code' dir='ltr'&gt;Action&lt;/code&gt; [&lt;a href=&quot;http://geekz.fr/#nb1-4&quot; name=&quot;nh1-4&quot; id=&quot;nh1-4&quot; class=&quot;spip_note&quot; title='[4] http://httpd.apache.org/docs/2.2/mod/mod_actions.html#action' &gt;4&lt;/a&gt;] :&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;code class='spip_code' dir='ltr'&gt;Action suexec-script /cgi-bin/php-cgi&lt;/code&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Il va sans dire qu'il faut modifier le propri&#233;taire des fichiers .php pour qu'il n'y ait pas d'erreurs.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;Consid&#233;rations&lt;/strong&gt;&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li class=&quot;spip&quot;&gt; Il est interressant de noter que l'utilisation de php en mode cgi est probablement plus lent que l'utilisation standard car chaque appel de page charge l'interpr&#233;teur php. Cette diff&#233;rence est certes minimes mais peut &#234;tre notable dans certains cas.&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; J'ai constat&#233; certains probl&#232;mes &#224; l'utilisation de cgi dans certains cas. En effet, sur mon projet dotnul.com, j'utilise une fonctionnalit&#233; de mod_rewrite qui permet de d&#233;finir des variables d'environnement avec une rule. Hors il n'y a pas de communication des variables car elles sont cr&#233;&#233;s avec les droits apache:apache et l'interpr&#233;teur php, fonctionnant avec des droits diff&#233;rents. Il est aussi possible que la d&#233;finition de CGI 1.1 [&lt;a href=&quot;http://geekz.fr/#nb1-5&quot; name=&quot;nh1-5&quot; id=&quot;nh1-5&quot; class=&quot;spip_note&quot; title='[5] http://hoohoo.ncsa.uiuc.edu/cgi/env.html' &gt;5&lt;/a&gt;] indique que ce genre de variables n'existent pas.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://geekz.fr/#nh1-1&quot; name=&quot;nb1-1&quot; class=&quot;spip_note&quot; title=&quot;Notes 1-1&quot;&gt;1&lt;/a&gt;] http://httpd.apache.org/docs/2.2/mod/mod_suexec.html#suexecusergroup&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://geekz.fr/#nh1-2&quot; name=&quot;nb1-2&quot; class=&quot;spip_note&quot; title=&quot;Notes 1-2&quot;&gt;2&lt;/a&gt;] En fait, &#224; chaque upgrade/recompilation de php, il faudra le refaire&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://geekz.fr/#nh1-3&quot; name=&quot;nb1-3&quot; class=&quot;spip_note&quot; title=&quot;Notes 1-3&quot;&gt;3&lt;/a&gt;] http://httpd.apache.org/docs/2.2/mod/mod_mime.html#addhandler&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://geekz.fr/#nh1-4&quot; name=&quot;nb1-4&quot; class=&quot;spip_note&quot; title=&quot;Notes 1-4&quot;&gt;4&lt;/a&gt;] http://httpd.apache.org/docs/2.2/mod/mod_actions.html#action&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://geekz.fr/#nh1-5&quot; name=&quot;nb1-5&quot; class=&quot;spip_note&quot; title=&quot;Notes 1-5&quot;&gt;5&lt;/a&gt;] http://hoohoo.ncsa.uiuc.edu/cgi/env.html&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_ps'&gt;Cette configuration vous permet de securiser quelque peu votre serveur web. C'est un bon complement de mon article sur les vhosts.&lt;/div&gt;
		</content:encoded>


		

	</item>



	<item>
		<title>Hello World en C en utilisant ncurses</title>
		<link>http://geekz.fr/Hello-World-en-C-en-utilisant</link>
		<guid isPermaLink="true">http://geekz.fr/Hello-World-en-C-en-utilisant</guid>
		<dc:date>2007-12-29T12:54:57Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>b3nj</dc:creator>

<category domain="http://geekz.fr/-Hello-World-">Hello World !</category>


		<description>

-
&lt;a href="http://geekz.fr/-Hello-World-" rel="directory"&gt;Hello World !&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p class=&quot;spip&quot;&gt;Test&#233; sous linux gentoo avec GCC version gcc 4.2.2 (Gentoo 4.2.2 p1.0) POSIX.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;Source&lt;/strong&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;A mettre dans test.c&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;br /&gt; #include &amp;lt;ncurses.h&amp;gt;&lt;br /&gt; #include &amp;lt;string.h&amp;gt;&lt;br /&gt; &lt;br /&gt; int main()&lt;br /&gt; {&lt;br /&gt; int row,col,i=0;&lt;br /&gt; char part1[]=&quot;# # ####### # # ####### # # ####### ###### # ###### #&quot;;&lt;br /&gt; char part2[]=&quot;# # # # # # # # # # # # # # # # # #&quot;;&lt;br /&gt; char part3[]=&quot;# # # # # # # # # # # # # # # # # #&quot;;&lt;br /&gt; char part4[]=&quot;####### ##### # # # # # # # # # ###### # # # #&quot;;&lt;br /&gt; char part5[]=&quot;# # # # # # # # # # # # # # # # # #&quot;;&lt;br /&gt; char part6[]=&quot;# # # # # # # # # # # # # # # # # &quot;;&lt;br /&gt; char part7[]=&quot;# # ####### ####### ####### ####### ## ## ####### # # ####### ###### #&quot;;&lt;br /&gt; initscr();&lt;br /&gt; getmaxyx(stdscr,row,col);&lt;br /&gt; if(col&amp;lt;strlen(part1))&lt;br /&gt; {&lt;br /&gt; mvprintw(1,1,&quot;Sorry, your screen is way to small to fit the requirements of this super program&quot;);&lt;br /&gt; refresh();&lt;br /&gt; getch();&lt;br /&gt; }else {&lt;br /&gt; int millieu=(col-strlen(part1))/2;&lt;br /&gt; while(i&amp;lt;row/2)&lt;br /&gt; {&lt;br /&gt; clear();&lt;br /&gt; mvprintw(i-7, millieu, &quot;%s&quot;, part1);&lt;br /&gt; mvprintw(i-6, millieu, &quot;%s&quot;, part2);&lt;br /&gt; mvprintw(i-5, millieu, &quot;%s&quot;, part3);&lt;br /&gt; mvprintw(i-4, millieu, &quot;%s&quot;, part4);&lt;br /&gt; mvprintw(i-3, millieu, &quot;%s&quot;, part5);&lt;br /&gt; mvprintw(i-2, millieu, &quot;%s&quot;, part6);&lt;br /&gt; mvprintw(i-1, millieu, &quot;%s&quot;, part7);&lt;br /&gt; sleep(1);&lt;br /&gt; refresh();&lt;br /&gt; i+=1;&lt;br /&gt; }&lt;br /&gt; refresh();&lt;br /&gt; getch();&lt;br /&gt; }&lt;br /&gt; endwin();&lt;br /&gt; return 0;&lt;br /&gt; }&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;Compilation&lt;/strong&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;code class='spip_code' dir='ltr'&gt;cc -lncurses -o test test.c&lt;/code&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;Utilisation&lt;/strong&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;code class='spip_code' dir='ltr'&gt;legeek@anubis /home/geek $ ./test&lt;/code&gt;&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>



	<item>
		<title>Hello World en C</title>
		<link>http://geekz.fr/Hello-World-en-C</link>
		<guid isPermaLink="true">http://geekz.fr/Hello-World-en-C</guid>
		<dc:date>2007-11-30T18:24:41Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>b3nj</dc:creator>

<category domain="http://geekz.fr/-Hello-World-">Hello World !</category>


		<description>

-
&lt;a href="http://geekz.fr/-Hello-World-" rel="directory"&gt;Hello World !&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p class=&quot;spip&quot;&gt;Test&#233; sous linux gentoo avec GCC version gcc 4.2.2 (Gentoo 4.2.2 p1.0) POSIX.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;Source&lt;/strong&gt;&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;br /&gt; ## source a mettre dans pleup.c&lt;br /&gt; #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt; &lt;br /&gt; int main(int argc, char* argv)&lt;br /&gt; {&lt;br /&gt; printf(&quot;Hello World !\n&quot;);&lt;br /&gt; return 0;&lt;br /&gt; }&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;Compilation&lt;/strong&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;code class='spip_code' dir='ltr'&gt;legeek@anubis /home/geek $ g++ -o pleup pleup.c&lt;/code&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;Utilisation&lt;/strong&gt;&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;br /&gt; legeek@anubis /home/geek $ ./pleup&lt;br /&gt; Hello World !&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>



	<item>
		<title>Gentoo portage Elog mysql wrapper</title>
		<link>http://geekz.fr/Gentoo-portage-Elog-mysql-wrapper</link>
		<guid isPermaLink="true">http://geekz.fr/Gentoo-portage-Elog-mysql-wrapper</guid>
		<dc:date>2007-11-25T00:52:43Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>b3nj</dc:creator>

<category domain="http://geekz.fr/-Systeme-">Syst&#232;me</category>

		<dc:subject>Script</dc:subject>
		<dc:subject>Tip</dc:subject>

		<description>

-
&lt;a href="http://geekz.fr/-Systeme-" rel="directory"&gt;Syst&#232;me&lt;/a&gt;

/ 
&lt;a href="http://geekz.fr/+-Script-+" rel="tag"&gt;Script&lt;/a&gt;, 
&lt;a href="http://geekz.fr/+-Tip-+" rel="tag"&gt;Tip&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;h3 class=&quot;spip&quot;&gt;L'id&#233;e&lt;/h3&gt;
&lt;p class=&quot;spip&quot;&gt;Portage permet de logger les paquets emerg&#233;s ainsi que les logs relatifs au merge.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Les diff&#233;rentes fa&#231;ons que portage propose pour g&#233;rer les logs sont les suivantes :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li class=&quot;spip&quot;&gt; echo : affiche les messages quand le merge du paquet est termin&#233;&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; save : sauvegarde le contenu du log relatif au merge dans une fichier situ&#233; dans $PORT_LOGDIR&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; syslog : envoie les informations dans le syslog&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; mail : envoie les informations par email pour chaque paquet&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; save_summary : m&#234;me chose que save, mais sauvegarde tous les logs dans un fichier unique, $PORT_LOGDIR/elog/summary.log&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; mail_summary : m&#234;me chose que mail, mais envoie un email avec le r&#233;sum&#233; des merges faits dans la session.&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; custom : lance un programme d&#233;fini par l'utilisateur et sauvegarde les logs du merge dans $PORT_LOGDIR&lt;/li&gt;&lt;/ul&gt;
&lt;p class=&quot;spip&quot;&gt;Le fait est que je souhaite monitorer mon serveur a partir d'une interface web et que si les donn&#233;es sont pr&#233;sentes dans une table d'une base de donn&#233;es, cela m'arrangerait plus.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;C'est donc pourquoi j'ai entrepris de cr&#233;er un petit wrapper qui me permet de logger les informations de portage dans la base de donn&#233;es.&lt;/p&gt; &lt;h3 class=&quot;spip&quot;&gt;Le truc&lt;/h3&gt;
&lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;Configuration de portage&lt;/strong&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;La configuration de portage pour ELOG est simple, il suffit d'ajouter les lignes suivantes dans votre fichier &lt;code class='spip_code' dir='ltr'&gt;/etc/make.conf&lt;/code&gt; :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;br /&gt; PORTAGE_ELOG_CLASSES=&quot;warn error log info&quot;&lt;br /&gt; PORTAGE_ELOG_SYSTEM=&quot;custom&quot;&lt;br /&gt; PORTAGE_ELOG_COMMAND=&quot;/usr/local/sbin/elogmysql '\${PACKAGE}' '\${LOGFILE}'&quot;&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;Cr&#233;ation d'une base de donn&#233;es&lt;/strong&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Maintenant cr&#233;ons une base de donn&#233;es et un utilisateur juste pour cette petite application :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;br /&gt; CREATE DATABASE portagelog;&lt;br /&gt; GRANT INSERT,UPDATE,SELECT,CREATE on portagelog.* TO 'portagelog'@'localhost' identified by 'plop plop';&lt;br /&gt; flush privileges;&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Vous pouvez bien entendu modifier le systeme a partir duquel le script peut se connecter pour centraliser plusieurs logs.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;Cr&#233;ation du script&lt;/strong&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Voici donc le petit script :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;br /&gt; #!/bin/bash&lt;br /&gt; #&lt;br /&gt; # MYSQL portage elog wrapper&lt;br /&gt; # KRAFT Benjamin &amp;lt;benjamin@wearegeeks.info&amp;gt;&lt;br /&gt; # http://www.wearegeeks.info&lt;br /&gt; #&lt;br /&gt; # Last updated : Sat Nov 24 19:22:33 CET 2007&lt;br /&gt; #&lt;br /&gt; ################################################&lt;br /&gt; MYSQL=/usr/bin/mysql&lt;br /&gt; ELOGDBNAME=portagelog&lt;br /&gt; ELOGUSERNAME=portagelog&lt;br /&gt; ELOGPASS=&quot;plop plop&quot;&lt;br /&gt; CURRENT=$(date +&quot;%Y%m&quot;)&lt;br /&gt; &lt;br /&gt; if [ -z $1 ];&lt;br /&gt; then&lt;br /&gt; echo &quot;usage : elogmysl package logfile&quot;&lt;br /&gt; exit 0;&lt;br /&gt; fi&lt;br /&gt; &lt;br /&gt; if [ -z $2 ];&lt;br /&gt; then&lt;br /&gt; echo &quot;usage : elogmysl package logfile&quot;&lt;br /&gt; exit 0;&lt;br /&gt; fi&lt;br /&gt; &lt;br /&gt; $MYSQL --database=$ELOGDBNAME --user=&quot;$ELOGUSERNAME&quot; --password=&quot;$ELOGPASS&quot; &amp;lt;&amp;lt; EOF&lt;br /&gt; CREATE TABLE IF NOT EXISTS \`$CURRENT\` (id int auto_increment, edate varchar(35), package varchar(100), logfile varchar(200), PRIMARY KEY (id));&lt;br /&gt; INSERT INTO \`$CURRENT\` VALUES(NULL, '$(date)', '$1', '$2');&lt;br /&gt; EOF&lt;br /&gt; &lt;br /&gt; # END&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Lorsque le script est lanc&#233;, il va cr&#233;er une table ayant pour nom YYYYMM [&lt;a href=&quot;http://geekz.fr/#nb4-1&quot; name=&quot;nh4-1&quot; id=&quot;nh4-1&quot; class=&quot;spip_note&quot; title='[1] o&#249; YYYY est l&amp;#39;ann&#233;e sur 4 chiffres et MM est le mois sur 2 (...)' &gt;1&lt;/a&gt;] si elle n'exite pas d&#233;j&#224;.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;N'oubliez pas de changer les droits du script pour le rendre executable comme par exemple &lt;code class='spip_code' dir='ltr'&gt;chmod 750 /usr/local/sbin/elogmysql&lt;/code&gt; et changer le propri&#233;taire du script pour que les membres du groupe portage puissent l'executer &#233;galement : &lt;code class='spip_code' dir='ltr'&gt;chown root:portage /usr/local/sbin/elogmysql&lt;/code&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Voici un exemple de ce que vous pourrez trouver dans la base de donn&#233;es :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;br /&gt; mysql&amp;gt; select * from `200711`;&lt;br /&gt; | id | edate | package | logfile |&lt;br /&gt; | 1 | Sat Nov 24 23:48:20 CET 2007 | sys-apps/iproute2-2.6.22.20070710 | /var/log/portage/elog/sys-apps:iproute2-2.6.22.20070710:20071124-224820.log |&lt;br /&gt; 1 row in set (0.00 sec)&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://geekz.fr/#nh4-1&quot; name=&quot;nb4-1&quot; class=&quot;spip_note&quot; title=&quot;Notes 4-1&quot;&gt;1&lt;/a&gt;] o&#249; YYYY est l'ann&#233;e sur 4 chiffres et MM est le mois sur 2 chiffres&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_ps'&gt;Je ferais &#233;ventuellement un article sur chaque mode disponible par ELOG, mais pas imm&#233;diatement.&lt;/div&gt;
		</content:encoded>


		

	</item>



	<item>
		<title>Installation et configuration de pure-ftpd</title>
		<link>http://geekz.fr/Installation-et-configuration-de</link>
		<guid isPermaLink="true">http://geekz.fr/Installation-et-configuration-de</guid>
		<dc:date>2007-10-15T17:11:49Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>b3nj</dc:creator>

<category domain="http://geekz.fr/-Systeme-">Syst&#232;me</category>

		<dc:subject>Pure-ftp</dc:subject>

		<description>Pure-ftpd est un serveur FTP souple et facilement configurable, parfait pour la production.

-
&lt;a href="http://geekz.fr/-Systeme-" rel="directory"&gt;Syst&#232;me&lt;/a&gt;

/ 
&lt;a href="http://geekz.fr/+-Pure-ftp-+" rel="tag"&gt;Pure-ftp&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;h3 class=&quot;spip&quot;&gt;Avant-propos&lt;/h3&gt;
&lt;p class=&quot;spip&quot;&gt;L'article s'appuie sur le package &lt;code class='spip_code' dir='ltr'&gt;net-ftp/pure-ftpd-1.0.21-r1&lt;/code&gt; sur gentoo, comme d'habitude.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Aucune connaissance sp&#233;cifique n'est requise.&lt;/p&gt; &lt;h3 class=&quot;spip&quot;&gt;1. D&#233;marrage et configuration rapide&lt;/h3&gt;
&lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;1.1 Installation&lt;/strong&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Les use flags &#224; utiliser pour une utilisation standard sont les suivants : &lt;code class='spip_code' dir='ltr'&gt;mysql pam postgres ssl&lt;/code&gt; pour activer le support :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li class=&quot;spip&quot;&gt; mysql : permettre la gestion des utilisateurs dans une base de donn&#233;es mysql&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; pam : permettre l'authentification standard linux&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; postgresql : permettre la gestion des utilisateurs dans une base de donn&#233;es postgresql&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; ssl : permettre les connections ssl au serveur&lt;/li&gt;&lt;/ul&gt;
&lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;1.2 Configuration standalone&lt;/strong&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Voici une m&#233;thode pour faire fonctionner le serveur ftp en mode &quot;standalone&quot;, c'est &#224; dire, sans utiliser autre chose que le fichier de configuration standard.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Le fichier de configuration est &lt;code class='spip_code' dir='ltr'&gt;/etc/conf.d/pure-ftpd&lt;/code&gt;, &#233;ditons le pour le configurer.&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li class=&quot;spip&quot;&gt; D&#233;commentez la ligne &lt;code class='spip_code' dir='ltr'&gt;#IS_CONFIGURED=&quot;yes&quot;&lt;/code&gt;&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; Sp&#233;cifiez si le serveur doit [&lt;a href=&quot;http://geekz.fr/#nb5-1&quot; name=&quot;nh5-1&quot; id=&quot;nh5-1&quot; class=&quot;spip_note&quot; title='[1] Syntaxe : -S adresseip,port' &gt;1&lt;/a&gt;] :&lt;ul class=&quot;spip&quot;&gt;&lt;li class=&quot;spip&quot;&gt; Ecouter sur toutes les interfaces r&#233;seau &lt;code class='spip_code' dir='ltr'&gt;SERVER=&quot;-S 21&quot;&lt;/code&gt;&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; Ecouter sur une adresse ip sp&#233;cifique &lt;code class='spip_code' dir='ltr'&gt;SERVER=&quot;-S 192.168.100.101,21&quot;&lt;/code&gt;&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; Ecouter sur un hostname sp&#233;cifique &lt;code class='spip_code' dir='ltr'&gt;SERVER=&quot;-S www2.wearegeeks.info,21&quot;&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; Sp&#233;cifiez le nombre maximal de connections simultan&#233;es &lt;code class='spip_code' dir='ltr'&gt;MAX_CONN=&quot;-c 30&quot;&lt;/code&gt;&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; Sp&#233;cifiez le nombre maximal de connections simultan&#233;es par adresse IP &lt;code class='spip_code' dir='ltr'&gt;MAX_CONN_IP=&quot;-C 10&quot;&lt;/code&gt;&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; Sp&#233;cifiez au serveur de d&#233;marrer en arri&#232;re plan &lt;code class='spip_code' dir='ltr'&gt;DAEMON=&quot;-B&quot;&lt;/code&gt;&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; Sp&#233;cifiez en chiffre le pourcentage maximal d'utilisation du disque dur ou se trouve le r&#233;pertoire de connection de l'utilisateur au dessus duquel le serveur FTP n'accepte plus l'upload. &lt;code class='spip_code' dir='ltr'&gt;DISK_FULL=&quot;-k 90%&quot;&lt;/code&gt;&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; Sp&#233;cifiez si votre machine est derri&#232;re un routeur ou est directement sur internet &lt;code class='spip_code' dir='ltr'&gt;USE_NAT=&quot;-N&quot;&lt;/code&gt;&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; Sp&#233;cifiez comment l'authentification des utilisateurs est r&#233;alis&#233;e. Dans cette partie du howto, c'est avec l'authentification unix standard &lt;code class='spip_code' dir='ltr'&gt;AUTH=&quot;-l unix&quot;&lt;/code&gt;&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; Sp&#233;cifiez le temps en minutes apr&#232;s lequel, si aucune activit&#233; n'est d&#233;tect&#233;e, les connections actives sont d&#233;connect&#233;es &lt;code class='spip_code' dir='ltr'&gt;TIMEOUT=&quot;-I 5&quot;&lt;/code&gt;&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; Pureftpd a par d&#233;faut quelques options qu'il convient de laisser &lt;code class='spip_code' dir='ltr'&gt;MISC_OTHER=&quot;-A -x -j -R -Z&quot;&lt;/code&gt;&lt;ul class=&quot;spip&quot;&gt;&lt;li class=&quot;spip&quot;&gt; &lt;code class='spip_code' dir='ltr'&gt;-A&lt;/code&gt; signifie que le processus li&#233; &#224; chaque connection fonctionne avec les droits de l'utilisateur se connectant. Par exemple &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;root 7704 0.0 0.0 5604 968 ? Ss 22:14 0:00 pure-ftpd (SERVER)&lt;br /&gt; legeek 7718 0.2 0.0 6076 1544 ? S 22:16 0:00 \_ pure-ftpd (DOWNLOAD)&lt;/code&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;ul class=&quot;spip&quot;&gt;&lt;li class=&quot;spip&quot;&gt; &lt;code class='spip_code' dir='ltr'&gt;-x&lt;/code&gt; signifie que les utilisateurs authentifi&#233;s peuvent &#233;crire/lire les fichiers commen&#231;ant par un &quot;.&quot;. Les utilisateurs non authentifi&#233;s peuvent les lire, mais pas les &#233;crire/cr&#233;&#233;r, m&#234;me s'ils ont les bons droits&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; &lt;code class='spip_code' dir='ltr'&gt;-j&lt;/code&gt; si le r&#233;pertoire de base de l'utilisateur n'existe pas, le cr&#233;er automatiquement&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; &lt;code class='spip_code' dir='ltr'&gt;-R&lt;/code&gt; ne pas autoriser l'utilisation de la commande chown (changement de propri&#233;taire)&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; &lt;code class='spip_code' dir='ltr'&gt;-Z&lt;/code&gt; idem que &lt;code class='spip_code' dir='ltr'&gt;-R&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;1.3 Et maintenant ?&lt;/strong&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Et bien si vous d&#233;marrez le serveur, tous les utilisateurs avec un compte utilisateur pourront se connecter.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Par exemple si vous cr&#233;ez un utilisateur de test &lt;code class='spip_code' dir='ltr'&gt;anubis ~ # useradd -c &quot;test user&quot; -d /home/testuser -m -s /bin/bash testuser&lt;/code&gt;, que vous d&#233;finissez un mot de passe &lt;code class='spip_code' dir='ltr'&gt;anubis ~ # passwd testuser&lt;/code&gt;.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Et donc, voici un test de connection :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;br /&gt; legeek@anubis /home/geek $ ftp localhost&lt;br /&gt; Trying 127.0.0.1...&lt;br /&gt; Connected to localhost (127.0.0.1).&lt;br /&gt; 220- Welcome to Pure-FTPd [privsep] [TLS] -&lt;br /&gt; 220-You are user number 1 of 30 allowed.&lt;br /&gt; 220-Local time is now 11:43. Server port: 21.&lt;br /&gt; 220-IPv6 connections are also welcome on this server.&lt;br /&gt; 220 You will be disconnected after 15 minutes of inactivity.&lt;br /&gt; Name (localhost:legeek): testuser&lt;br /&gt; 500 This security scheme is not implemented&lt;br /&gt; SSL not available&lt;br /&gt; 331 User testuser OK. Password required&lt;br /&gt; Password:&lt;br /&gt; 230-User testuser has group access to: testuser&lt;br /&gt; 230 OK. Current restricted directory is /&lt;br /&gt; Remote system type is UNIX.&lt;br /&gt; Using binary mode to transfer files.&lt;br /&gt; ftp&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Le d&#233;savantage de ce mode de fonctionnement, c'est que les utilisateurs ayant un acc&#232;s FTP ont donc forc&#233;ment un acc&#232;s SSH &#224; la machine. Cette solution n'est pas viable dans un environnement de production s&#233;rieux. C'est donc pour cela qu'il est pr&#233;f&#233;rable d'utiliser un autre mode d'authentification des utilisateurs en les pla&#231;ant dans une base de donn&#233;es mysql ou postgresql, ou dans un fichier diff&#233;rent sp&#233;cifique.&lt;/p&gt; &lt;hr class=&quot;spip&quot; /&gt;
&lt;h3 class=&quot;spip&quot;&gt;2. Utilisateurs Virtuels avec PureDB&lt;/h3&gt;
&lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;2.1. Op&#233;rations standard&lt;/strong&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;L'avantage des utilisateurs virtuels par rapport aux utilisateurs unix de la configuration pr&#233;c&#233;dente, c'est que l'on peut configurer par utilisateur les options suivantes :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li class=&quot;spip&quot;&gt; Limite de vitesse de download&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; Limite de vitesse d'upload&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; Nombre maximal de fichiers&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; Taille maximale&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; Ratio d'upload&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; Ratio de download&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; Autorisation/refus de connection &#224; partir de tel ou tel h&#244;te&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; Nombre maximal de connections simultan&#233;es&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; D&#233;finir une plage horaire&lt;/li&gt;&lt;/ul&gt;
&lt;p class=&quot;spip&quot;&gt;Pour que ce m&#233;canisme d'authentification fonctionne, le syst&#232;me &#224; besoin de deux fichiers, un fichier password plain/text que vous pourrez &#233;diter &#224; la main, et un fichier de database utilis&#233;e par le serveur.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Dans notre cas, nous allons utiliser un fichier &lt;code class='spip_code' dir='ltr'&gt;/etc/pureftpd.passwd&lt;/code&gt; qui sera le fichier plain/text et un fichier &lt;code class='spip_code' dir='ltr'&gt;/etc/pureftpd.pdb&lt;/code&gt; qui sera le fichier utilis&#233; par le serveur pour g&#233;rer les utilisateurs.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Pour commencer, cr&#233;ons un utilisateur et un groupe syst&#232;me. Tous les utilisateurs virtuels utiliseront les droits de ce compte vis &#224; vis du syst&#232;me.&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;groupadd ftpgroup&lt;br /&gt; useradd -g ftpgroup -d /dev/null -s /etc ftpuser&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Pour cr&#233;er/supprimer ou modifier un utilisateur avec ce m&#233;canisme d'authentification, pure-ftpd inclut un programme &lt;code class='spip_code' dir='ltr'&gt;pure-pw&lt;/code&gt; donc voici, &#224; titre d'information, la syntaxe :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;br /&gt; pure-pw useradd &amp;lt;login&amp;gt; [-f &amp;lt;passwd file&amp;gt;] -u &amp;lt;uid&amp;gt; [-g &amp;lt;gid&amp;gt;]&lt;br /&gt; -D/-d &amp;lt;home directory&amp;gt; [-c &amp;lt;gecos&amp;gt;]&lt;br /&gt; [-t &amp;lt;download bandwidth&amp;gt;] [-T &amp;lt;upload bandwidth&amp;gt;]&lt;br /&gt; [-n &amp;lt;max number of files&amp;gt;] [-N &amp;lt;max Mbytes&amp;gt;]&lt;br /&gt; [-q &amp;lt;upload ratio&amp;gt;] [-Q &amp;lt;download ratio&amp;gt;]&lt;br /&gt; [-r &amp;lt;allow client ip&amp;gt;/&amp;lt;mask&amp;gt;] [-R &amp;lt;deny client ip&amp;gt;/&amp;lt;mask&amp;gt;]&lt;br /&gt; [-i &amp;lt;allow local ip&amp;gt;/&amp;lt;mask&amp;gt;] [-I &amp;lt;deny local ip&amp;gt;/&amp;lt;mask&amp;gt;]&lt;br /&gt; [-y &amp;lt;max number of concurrent sessions&amp;gt;]&lt;br /&gt; [-z &amp;lt;hhmm&amp;gt;-&amp;lt;hhmm&amp;gt;] [-m]&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Cr&#233;ons maintenant un compte utilisateur virtuel pureftpd ayant pour nom &lt;code class='spip_code' dir='ltr'&gt;kiki&lt;/code&gt; et comme home directory &lt;code class='spip_code' dir='ltr'&gt;/var/ftpusers/kiki/&lt;/code&gt;, et fonctionnant sous les droits de l'utilisateur syst&#232;me cr&#233;&#233; plus t&#244;t.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;code class='spip_code' dir='ltr'&gt;pure-pw useradd kiki -u ftpuser -d /var/ftpusers/kiki&lt;/code&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Notes :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li class=&quot;spip&quot;&gt; Le mot de passe pour l'utilisateur vous sera demand&#233; deux fois de suite &#224; l'appel du programme useradd&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; Si le serveur pure-ftpd fonctionne avec l'option &lt;code class='spip_code' dir='ltr'&gt;-j&lt;/code&gt;, vous n'avez pas besoin de cr&#233;er le r&#233;pertoire utilisateur&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; Si vous souhaitez que l'utilisateur &lt;code class='spip_code' dir='ltr'&gt;kiki&lt;/code&gt; soit limit&#233; uniquement au home directory sp&#233;cifi&#233;, utilisez &lt;code class='spip_code' dir='ltr'&gt;-d&lt;/code&gt;, sinon, pour un acc&#232;s au syst&#232;me de fichiers entier, utilisez &lt;code class='spip_code' dir='ltr'&gt;-D&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;
&lt;p class=&quot;spip&quot;&gt;Si nous regardons le contenu du fichier &lt;code class='spip_code' dir='ltr'&gt;/etc/pureftpd.passwd&lt;/code&gt;, nous voyons que l'utilisateur est ajout&#233; dans le fichier :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;anubis ~ # cat /etc/pureftpd.passwd&lt;br /&gt; kiki:$1$tFm2t7G0$SbO/NPe7z8CbpqVU.T6.10:1002:2713::/var/ftpusers/kiki/./::::::::::::&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Pour faire une modification du compte utilisateur virtuel, utilisez la commande &lt;code class='spip_code' dir='ltr'&gt;pure-pw usermod&lt;/code&gt; dont voici la syntaxe :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;br /&gt; pure-pw usermod &amp;lt;login&amp;gt; -f &amp;lt;passwd file&amp;gt; -u &amp;lt;uid&amp;gt; [-g &amp;lt;gid&amp;gt;]&lt;br /&gt; -D/-d &amp;lt;home directory&amp;gt; -[c &amp;lt;gecos&amp;gt;]&lt;br /&gt; [-t &amp;lt;download bandwidth&amp;gt;] [-T &amp;lt;upload bandwidth&amp;gt;]&lt;br /&gt; [-n &amp;lt;max number of files&amp;gt;] [-N &amp;lt;max Mbytes&amp;gt;]&lt;br /&gt; [-q &amp;lt;upload ratio&amp;gt;] [-Q &amp;lt;download ratio&amp;gt;]&lt;br /&gt; [-r &amp;lt;allow client ip&amp;gt;/&amp;lt;mask&amp;gt;] [-R &amp;lt;deny client ip&amp;gt;/&amp;lt;mask&amp;gt;]&lt;br /&gt; [-i &amp;lt;allow local ip&amp;gt;/&amp;lt;mask&amp;gt;] [-I &amp;lt;deny local ip&amp;gt;/&amp;lt;mask&amp;gt;]&lt;br /&gt; [-y &amp;lt;max number of concurrent sessions&amp;gt;]&lt;br /&gt; [-z &amp;lt;hhmm&amp;gt;-&amp;lt;hhmm&amp;gt;] [-m]&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Informations utiles pour d&#233;sactiver :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li class=&quot;spip&quot;&gt; les quotas de nombre de fichiers, utilisez &lt;code class='spip_code' dir='ltr'&gt;pure-pw usermod &amp;lt;user&amp;gt; -n ''&lt;/code&gt;&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; les quotas de taille totale, utilisez &lt;code class='spip_code' dir='ltr'&gt;pure-pw usermod &amp;lt;user&amp;gt; -N ''&lt;/code&gt;&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; les ratios, utilisez &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;pure-pw usermod &amp;lt;user&amp;gt; -q &quot; -Q &quot;&lt;br /&gt; -* les limites de vitesse de t&#233;l&#233;chargement, utilisez &amp;lt;code&amp;gt;pure-pw usermod &amp;lt;user&amp;gt; -t ''&lt;/code&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li class=&quot;spip&quot;&gt; les limites de vitesse d'upload, utilisez &lt;code class='spip_code' dir='ltr'&gt;pure-pw usermod &amp;lt;user&amp;gt; -T ''&lt;/code&gt;&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; les filtrages d'IP, utilisez &lt;code class='spip_code' dir='ltr'&gt;pure-pw usermod &amp;lt;user&amp;gt; &amp;lt;-i, -l, -r ou -R&amp;gt;&lt;/code&gt;&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; les limites d'horaires, utilisez &lt;code class='spip_code' dir='ltr'&gt;pure-pw usermod &amp;lt;user&amp;gt; -z ''&lt;/code&gt;&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; le nombre de sessions concurrentes, utilisez &lt;code class='spip_code' dir='ltr'&gt;pure-pw usermod &amp;lt;user&amp;gt; -y&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p class=&quot;spip&quot;&gt;Pour supprimer un utilisateur :&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;code class='spip_code' dir='ltr'&gt;pure-pw userdel &amp;lt;login&amp;gt; [-f &amp;lt;passwd file&amp;gt;] [-m]&lt;/code&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Pour modifier le mot de passe d'un utilisateur :&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;code class='spip_code' dir='ltr'&gt;pure-pw passwd &amp;lt;login&amp;gt; [-f &amp;lt;passwd file&amp;gt;] [-m]&lt;/code&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;2.2. Application des changements&lt;/strong&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Vous pouvez ajouter, modifier et supprimer les utilisateurs avec les commandes pr&#233;c&#233;dentes ou en modifiant le fichier &lt;code class='spip_code' dir='ltr'&gt;/etc/pureftpd.passwd&lt;/code&gt; &#224; la main, le fait est que le serveur FTP ne prendra pas les modifications en compte tant que vous ne les appliquez pas.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Appliquer les modifications signifie qu'un nouveau fichier est cr&#233;&#233; &#224; partir du fichier &lt;code class='spip_code' dir='ltr'&gt;/etc/pureftpd.passwd&lt;/code&gt; [&lt;a href=&quot;http://geekz.fr/#nb5-2&quot; name=&quot;nh5-2&quot; id=&quot;nh5-2&quot; class=&quot;spip_note&quot; title='[2] ou n&amp;#39;importe quel autre fichier sp&#233;cifi&#233;' &gt;2&lt;/a&gt;]. Ce nouveau fichier est un fichier PureDB. Il contient exactement la m&#234;me information que l'autre fichier. Mais dans ce fichier, les comptes sont tri&#233;s et index&#233;s pour un acc&#232;s rapide, m&#234;me avec des milliers de comptes. Les fichiers PureDB sont binaires, n'essayez donc pas de les &#233;diter ou de les voir ou votre terminal ne cessera pas de beeper.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Cr&#233;ons maintenant un fichier PureDB &#224; partir du fichier &lt;code class='spip_code' dir='ltr'&gt;/etc/pureftpd.passwd&lt;/code&gt;. Le fichier index&#233; sera appel&#233; &lt;code class='spip_code' dir='ltr'&gt;/etc/pureftpd.pdb&lt;/code&gt; (comme toujours, choisissez le nom que vous souhaitez pour le fichier).&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;La commande pour cr&#233;er le fichier en question est &lt;code class='spip_code' dir='ltr'&gt;pure-pw mkdb&lt;/code&gt;, ceci lit le contenu de &lt;code class='spip_code' dir='ltr'&gt;/etc/pureftpd.passwd&lt;/code&gt; et cr&#233;e le fichier &lt;code class='spip_code' dir='ltr'&gt;/etc/pureftpd.passwd&lt;/code&gt; par d&#233;faut, mais pour lire un autre fichier, ajoutez le fichier pdb, optionnellement suivi par &lt;code class='spip_code' dir='ltr'&gt;-f &amp;lt;fichier mot de passe&amp;gt;&lt;/code&gt;.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Toutes les modifications que vous avez fait sur la base de donn&#233;es des utilisateurs virtuels seront commit&#233;es automatiquement, tous les nouveaux comptes seront activ&#233;es au m&#234;me moment et tous les utilisateurs supprim&#233;s ne seront plus capables de se connecter d&#232;s l'instant o&#249; vous avez appuy&#233; sur la touche entr&#233;e.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Il n'est pas n&#233;cessaire de red&#233;marrer le serveur pour que les modifications soient appliqu&#233;es.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Vous pouvez &#233;galement changer quelque chose dans le fichier texte de mots de passe (ajouter un utilisateur, changer un mot de passe, supprimer un utilisateur, etc) et ex&#233;cuter automatiquement la commande d'application des modifications automatiquement. Pour faire ainsi, utilisez l'option &lt;code class='spip_code' dir='ltr'&gt;-m&lt;/code&gt;. Ainsi la commande &lt;code class='spip_code' dir='ltr'&gt;pure-pw useradd kiki2 -u ftpuser -d /var/ftpusers/kiki2 -m&lt;/code&gt; ajoute l'utilisateur kiki2 et applique la modification directement dans le fichier PureDB.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;2.3 Activer ce mode d'authentification&lt;/strong&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Bien sur, pour utiliser ce mode d'authentification, vous devez activer ce mode d'authentification dans le serveur FTP lui m&#234;me. Au moment de la compilation, c'est faisable en sp&#233;cifiant l'option &lt;code class='spip_code' dir='ltr'&gt;--with-puredb&lt;/code&gt; &#224; &lt;code class='spip_code' dir='ltr'&gt;./configure&lt;/code&gt;.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Puis, modifiez le param&#232;tre &lt;code class='spip_code' dir='ltr'&gt;AUTH&lt;/code&gt; dans le fichier &lt;code class='spip_code' dir='ltr'&gt;/etc/conf.d/pure-ftpd&lt;/code&gt; de la fa&#231;on suivante :&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;code class='spip_code' dir='ltr'&gt;AUTH=&quot;-l puredb:/etc/pureftpd.pdb&quot;&lt;/code&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Red&#233;marrez le service FTP et la modification sera active.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Nous pouvons donc nous connecter avec l'utilisateur kiki cr&#233;&#233; d&#232;s le d&#233;part :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;br /&gt; legeek@anubis /home/geek $ ftp localhost&lt;br /&gt; Trying 127.0.0.1...&lt;br /&gt; Connected to localhost (127.0.0.1).&lt;br /&gt; 220- Welcome to Pure-FTPd [privsep] [TLS] -&lt;br /&gt; 220-You are user number 1 of 30 allowed.&lt;br /&gt; 220-Local time is now 22:04. Server port: 21.&lt;br /&gt; 220-IPv6 connections are also welcome on this server.&lt;br /&gt; 220 You will be disconnected after 15 minutes of inactivity.&lt;br /&gt; Name (localhost:legeek): kiki&lt;br /&gt; 500 This security scheme is not implemented&lt;br /&gt; SSL not available&lt;br /&gt; 331 User kiki OK. Password required&lt;br /&gt; Password:&lt;br /&gt; 230-User kiki has group access to: 2713&lt;br /&gt; 230 OK. Current directory is /&lt;br /&gt; Remote system type is UNIX.&lt;br /&gt; Using binary mode to transfer files.&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;2.4. Convertir les utilisateurs Unix en utilisateurs PureDB&lt;/strong&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Pour convertir les utilisateurs Unix existants en utilisateurs dans le fichier de mots de passe pureftpd, utilisez la commande &lt;code class='spip_code' dir='ltr'&gt;pure-pwconvert&lt;/code&gt; qui produira en sortie les utilisateurs ayant acc&#232;s &#224; la machine.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Voici ce que cela donne chez moi :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;br /&gt; anubis src # pure-pwconvert --help&lt;br /&gt; legeek:$1$e/uZRTKl$.AqDP2cW07kMMv4YTIvre1:1000:1000:Ze Geek:/home/geek//./&lt;br /&gt; testuser:$1$..YTDhdu$EvKgjVIT/QoKq/MEbXTCi1:1001:2712:test user:/home/testuser/./&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Il suffit d'&#233;diter le fichier &lt;code class='spip_code' dir='ltr'&gt;/etc/pureftpd.passwd&lt;/code&gt; et d'y ajouter la sortie de la commande pr&#233;c&#233;dente, puis de commiter ces changements afin qu'ils soient pris en compte pour que les utilisateurs Unix aient le m&#234;me compte d'acc&#232;s au serveur FTP que leur compte FTP.&lt;/p&gt; &lt;hr class=&quot;spip&quot; /&gt;
&lt;h3 class=&quot;spip&quot;&gt;3. Utilisateurs virtuels avec MySQL&lt;/h3&gt;
&lt;p class=&quot;spip&quot;&gt;La configuration et l'utilisation d'utilisateurs virtuels MySQL avec PureFTPD est rapide et facile, de plus, c'est vraiment plus facilement automatisable.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;3.1 Cr&#233;ation de la base de donn&#233;es et de la table mysql&lt;/strong&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Pour que PureFTPD puisse authentifier les utilisateurs avec MySQL, il est n&#233;cessaire de cr&#233;er une table dans laquelle il pourra lire les donn&#233;es. Pour mieux faire, cr&#233;ons une base de donn&#233;es &#224; part et un utilisateur uniquement d&#233;di&#233; &#224; l'authentification des utilisateurs.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Connectez vous au serveur de base de donn&#233;es et cr&#233;ez la base de donn&#233;es comme par exemple :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;mysql&amp;gt; CREATE DATABASE FTP;&lt;br /&gt; Query OK, 1 row affected (0.00 sec)&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Maintenant, cr&#233;ez un utilisateur ayant tous les droits sur la base de donn&#233;es &lt;code class='spip_code' dir='ltr'&gt;FTP&lt;/code&gt; &#224; partir de l'hote local uniquement :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;mysql&amp;gt; GRANT ALL ON FTP.* TO 'pureftpd'@'localhost' IDENTIFIED BY 'superDuperWOOTER PASSWORD &amp;lt;3';&lt;br /&gt; Query OK, 0 rows affected (0.00 sec)&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Puis cr&#233;ez la table suivante :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;CREATE TABLE users (&lt;br /&gt; User VARCHAR(16) BINARY NOT NULL,&lt;br /&gt; Password VARCHAR(64) BINARY NOT NULL,&lt;br /&gt; Uid INT(11) NOT NULL default '-1',&lt;br /&gt; Gid INT(11) NOT NULL default '-1',&lt;br /&gt; Dir VARCHAR(128) BINARY NOT NULL,&lt;br /&gt; QuotaFiles INT(11) NOT NULL default '0',&lt;br /&gt; QuotaSize INT(11) NOT NULL default '0',&lt;br /&gt; ULRatio INT(11) NOT NULL default '0',&lt;br /&gt; DLRatio INT(11) NOT NULL default '0',&lt;br /&gt; ULBandwidth INT(11) NOT NULL default '0',&lt;br /&gt; DLBandwidth INT(11) NOT NULL default '0',&lt;br /&gt; PRIMARY KEY (User)&lt;br /&gt; );&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Ou :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li class=&quot;spip&quot;&gt; &lt;code class='spip_code' dir='ltr'&gt;User&lt;/code&gt; contient le nom d'utilisateur&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; &lt;code class='spip_code' dir='ltr'&gt;Password&lt;/code&gt; contient le mot de passe&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; &lt;code class='spip_code' dir='ltr'&gt;Uid&lt;/code&gt; contient l'user id dont les fichiers cr&#233;&#233;s auront les droits&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; &lt;code class='spip_code' dir='ltr'&gt;Gid&lt;/code&gt; contient le group id dont les fichiers cr&#233;&#233;s auront les droits&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; &lt;code class='spip_code' dir='ltr'&gt;Dir&lt;/code&gt; contient le chemin du r&#233;pertoire de l'utilisateur&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; &lt;code class='spip_code' dir='ltr'&gt;QuotaFiles&lt;/code&gt; contient le nombre maximal de fichiers que l'utilisateur pourra stocker dans son r&#233;pertoire&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; &lt;code class='spip_code' dir='ltr'&gt;QuotaSize&lt;/code&gt; contient l'utilisation disque maximale en megabytes&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; &lt;code class='spip_code' dir='ltr'&gt;ULRatio&lt;/code&gt; contient le taux maximal d'upload&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; &lt;code class='spip_code' dir='ltr'&gt;DLRatio&lt;/code&gt; contient le taux maximal de download&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; &lt;code class='spip_code' dir='ltr'&gt;ULBandwidth&lt;/code&gt; contient la bande passante maximale d'upload&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; &lt;code class='spip_code' dir='ltr'&gt;DLBandwidth&lt;/code&gt; contient la bande passante maximale de download&lt;/li&gt;&lt;/ul&gt;
&lt;p class=&quot;spip&quot;&gt;Puis cr&#233;ez un utilisateur pour tester :
&lt;/code&gt;INSERT INTO users(User, Password, Uid, Gid, Dir) VALUES('benj', 'woot woot **', 1000, 1000, '/home/geek/') ;
Query OK, 1 row affected (0.00 sec)
&lt;/code&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Cr&#233;ez maintenant le fichier de configuration que le serveur PureFTPD utilisera pour savoir comment trouver les informations dans la base de donn&#233;es puis dans la table.&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;br /&gt; MYSQLServer localhost&lt;br /&gt; MYSQLPort 3306&lt;br /&gt; MYSQLUser pureftpd&lt;br /&gt; MYSQLPassword superDuperWOOTER PASSWORD &amp;lt;3&lt;br /&gt; MYSQLDatabase FTP&lt;br /&gt; MYSQLCrypt cleartext&lt;br /&gt; MYSQLGetPW SELECT Password FROM FTP.users WHERE User=&quot;\L&quot;&lt;br /&gt; MYSQLGetUID SELECT Uid FROM FTP.users WHERE User=&quot;\L&quot;&lt;br /&gt; MYSQLGetGID SELECT Gid FROM FTP.users WHERE User=&quot;\L&quot;&lt;br /&gt; MYSQLGetDir SELECT Dir FROM FTP.users WHERE User=&quot;\L&quot;&lt;br /&gt; MySQLGetQTAFS SELECT QuotaFiles FROM FTP.users WHERE User=&quot;\L&quot;&lt;br /&gt; MySQLGetQTASZ SELECT QuotaSize FROM FTP.users WHERE User=&quot;\L&quot;&lt;br /&gt; MySQLGetRatioUL SELECT ULRatio FROM FTP.users WHERE User=&quot;\L&quot;&lt;br /&gt; MySQLGetRatioDL SELECT DLRatio FROM FTP.users WHERE User=&quot;\L&quot;&lt;br /&gt; MySQLGetBandwidthUL SELECT ULBandwidth FROM FTP.users WHERE User=&quot;\L&quot;&lt;br /&gt; MySQLGetBandwidthDL SELECT DLBandwidth FROM FTP.users WHERE User=&quot;\L&quot;&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Et modifiez la ligne &lt;code class='spip_code' dir='ltr'&gt;AUTH&lt;/code&gt; le fichier de configuration de PureFTPD &lt;code class='spip_code' dir='ltr'&gt;/etc/conf.d/pure-ftpd&lt;/code&gt; de la fa&#231;on suivante :&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;code class='spip_code' dir='ltr'&gt;AUTH=&quot;-l mysql:/etc/pureftpd-mysql.conf&quot;&lt;/code&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Red&#233;marrez le serveur FTP, et c'est d&#233;j&#224; fini :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;legeek@anubis /home/geek $ ftp localhost&lt;br /&gt; Trying 127.0.0.1...&lt;br /&gt; Connected to localhost (127.0.0.1).&lt;br /&gt; 220- Welcome to Pure-FTPd [privsep] [TLS] -&lt;br /&gt; 220-You are user number 1 of 30 allowed.&lt;br /&gt; 220-Local time is now 17:21. Server port: 21.&lt;br /&gt; 220-IPv6 connections are also welcome on this server.&lt;br /&gt; 220 You will be disconnected after 15 minutes of inactivity.&lt;br /&gt; Name (localhost:legeek): benj&lt;br /&gt; 500 This security scheme is not implemented&lt;br /&gt; SSL not available&lt;br /&gt; 331 User benj OK. Password required&lt;br /&gt; Password:&lt;br /&gt; 230-User benj has group access to: svnusers vmware gdm messageb legeek&lt;br /&gt; 230- ldap utmp portage locate users usb apache cdrw&lt;br /&gt; 230- postgres mysql games video tape sshd dialout cdrom&lt;br /&gt; 230- audio console cron man uucp news mail floppy&lt;br /&gt; 230- wheel kmem mem lp disk tty adm sys&lt;br /&gt; 230- bin root&lt;br /&gt; 230 OK. Current restricted directory is /&lt;br /&gt; Remote system type is UNIX.&lt;br /&gt; Using binary mode to transfer files.&lt;br /&gt; ftp&amp;gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Voil&#224; voil&#224;...&lt;/p&gt; &lt;hr class=&quot;spip&quot; /&gt;
&lt;h3 class=&quot;spip&quot;&gt;4. Utilisateurs virtuels avec PostgreSQL&lt;/h3&gt;
&lt;p class=&quot;spip&quot;&gt;La configuration et l'utilisation d'utilisateurs virtuels PostgreSQL avec PureFTPD est rapide et facile, de plus, c'est vraiment plus facilement automatisable.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;3.1 Cr&#233;ation de la base de donn&#233;es et de la table postgresql&lt;/strong&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Pour que PureFTPD puisse authentifier les utilisateurs avec PostgreSQL, il est n&#233;cessaire de cr&#233;er une table dans laquelle il pourra lire les donn&#233;es. Pour mieux faire, cr&#233;ons une base de donn&#233;es &#224; part et un utilisateur uniquement d&#233;di&#233; &#224; l'authentification des utilisateurs.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Connectez vous au serveur de base de donn&#233;es et cr&#233;ez la base de donn&#233;es comme par exemple :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;postgres@anubis ~/data $ psql&lt;br /&gt; Bienvenue dans psql 8.2.4, l'interface interactive de PostgreSQL.&lt;br /&gt; &lt;br /&gt; Tapez: \copyright pour les termes de distribution&lt;br /&gt; \h pour l'aide-m&#233;moire des commandes SQL&lt;br /&gt; \? pour l'aide-m&#233;moire des commandes psql&lt;br /&gt; \g ou point-virgule en fin d'instruction pour ex&#233;cuter la requ&#234;te&lt;br /&gt; \q pour quitter&lt;br /&gt; postgres=# CREATE DATABASE pureftp;&lt;br /&gt; CREATE DATABASE&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Cr&#233;ez maintenant un utilisateur sp&#233;cialement pour l'authentification PureFTP et donnez lui les droits :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;postgres=# CREATE USER pureftp WITH PASSWORD 'YAY password &amp;lt;3';&lt;br /&gt; CREATE ROLE&lt;br /&gt; postgres=# GRANT ALL ON DATABASE pureftp TO pureftp;&lt;br /&gt; GRANT&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Maintenant, cr&#233;ez la table suivante :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;br /&gt; pureftp=&amp;gt; CREATE TABLE public.users (&lt;br /&gt; pureftp(&amp;gt; &quot;User&quot; VARCHAR(16) NOT NULL,&lt;br /&gt; pureftp(&amp;gt; &quot;Password&quot; VARCHAR(64) NOT NULL,&lt;br /&gt; pureftp(&amp;gt; &quot;Uid&quot; INTEGER NOT NULL default '-1',&lt;br /&gt; pureftp(&amp;gt; &quot;Gid&quot; INTEGER NOT NULL default '-1',&lt;br /&gt; pureftp(&amp;gt; &quot;Dir&quot; VARCHAR(128) NOT NULL,&lt;br /&gt; pureftp(&amp;gt; &quot;QuotaFiles&quot; INTEGER NOT NULL default '0',&lt;br /&gt; pureftp(&amp;gt; &quot;QuotaSize&quot; INTEGER NOT NULL default '0',&lt;br /&gt; pureftp(&amp;gt; &quot;ULRatio&quot; INTEGER NOT NULL default '0',&lt;br /&gt; pureftp(&amp;gt; &quot;DLRatio&quot; INTEGER NOT NULL default '0',&lt;br /&gt; pureftp(&amp;gt; &quot;ULBandwidth&quot; INTEGER NOT NULL default '0',&lt;br /&gt; pureftp(&amp;gt; &quot;DLBandwidth&quot; INTEGER NOT NULL default '0',&lt;br /&gt; pureftp(&amp;gt; PRIMARY KEY (&quot;User&quot;)&lt;br /&gt; pureftp(&amp;gt; );&lt;br /&gt; NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index &quot;users_pkey&quot; for table &quot;users&quot;&lt;br /&gt; CREATE TABLE&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Ins&#233;rez maintenant un utilisateur FTP :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;br /&gt; pureftp=&amp;gt; INSERT INTO users VALUES('BenjBenj', 'Incredible Pass', 1000, 1000, '/home/legeek');&lt;br /&gt; INSERT 0 1&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Cr&#233;ez maintenant le fichier &lt;code class='spip_code' dir='ltr'&gt;/etc/pureftpd-postgresql.conf&lt;/code&gt; [&lt;a href=&quot;http://geekz.fr/#nb5-3&quot; name=&quot;nh5-3&quot; id=&quot;nh5-3&quot; class=&quot;spip_note&quot; title='[3] Contient la m&#234;me chose que le fichier pour MySQL' &gt;3&lt;/a&gt;] :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;PGSQLServer localhost&lt;br /&gt; PGSQLPort 5432&lt;br /&gt; PGSQLUser pureftp&lt;br /&gt; PGSQLPassword YAY password &amp;lt;3&lt;br /&gt; PGSQLDatabase pureftp&lt;br /&gt; PGSQLCrypt cleartext&lt;br /&gt; PGSQLGetPW SELECT &quot;Password&quot; FROM &quot;users&quot; WHERE &quot;User&quot;='\L'&lt;br /&gt; PGSQLGetUID SELECT &quot;Uid&quot; FROM &quot;users&quot; WHERE &quot;User&quot;='\L'&lt;br /&gt; PGSQLGetGID SELECT &quot;Gid&quot; FROM &quot;users&quot; WHERE &quot;User&quot;='\L'&lt;br /&gt; PGSQLGetDir SELECT &quot;Dir&quot; FROM &quot;users&quot; WHERE &quot;User&quot;='\L'&lt;br /&gt; PGSQLGetQTAFS SELECT &quot;QuotaFiles&quot; FROM &quot;users&quot; WHERE &quot;User&quot;='\L'&lt;br /&gt; PGSQLGetQTASZ SELECT &quot;QuotaSize&quot; FROM &quot;users&quot; WHERE &quot;User&quot;='\L'&lt;br /&gt; PGSQLGetRatioUL SELECT &quot;ULRatio&quot; FROM &quot;users&quot; WHERE &quot;User&quot;='\L'&lt;br /&gt; PGSQLGetRatioDL SELECT &quot;DLRatio&quot; FROM &quot;users&quot; WHERE &quot;User&quot;='\L'&lt;br /&gt; PGSQLGetBandwidthUL SELECT &quot;ULBandwidth&quot; FROM &quot;users&quot; WHERE &quot;User&quot;='\L'&lt;br /&gt; PGSQLGetBandwidthDL SELECT &quot;DLBandwidth&quot; FROM &quot;users&quot; WHERE &quot;User&quot;='\L'&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Modifiez maintenant le fichier &lt;code class='spip_code' dir='ltr'&gt;/etc/conf.d/pureftpd&lt;/code&gt; et changez le param&#232;tre &lt;code class='spip_code' dir='ltr'&gt;AUTH&lt;/code&gt; de la fa&#231;on suivante :
&lt;code class='spip_code' dir='ltr'&gt;AUTH=&quot;-l pgsql:/etc/pureftpd-postgresql.conf&quot;&lt;/code&gt;.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Red&#233;marrez le serveur PureFTP et le tour est jou&#233;. Testons avec l'utilisateur cr&#233;&#233; :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;legeek@anubis /home/geek $ ftp localhost&lt;br /&gt; Trying 127.0.0.1...&lt;br /&gt; Connected to localhost (127.0.0.1).&lt;br /&gt; 220- Welcome to Pure-FTPd [privsep] [TLS] -&lt;br /&gt; 220-You are user number 1 of 30 allowed.&lt;br /&gt; 220-Local time is now 17:17. Server port: 21.&lt;br /&gt; 220-IPv6 connections are also welcome on this server.&lt;br /&gt; 220 You will be disconnected after 15 minutes of inactivity.&lt;br /&gt; Name (localhost:legeek): BenjBenj&lt;br /&gt; 500 This security scheme is not implemented&lt;br /&gt; SSL not available&lt;br /&gt; 331 User BenjBenj OK. Password required&lt;br /&gt; Password:&lt;br /&gt; 230-User BenjBenj has group access to: svnusers vmware gdm messageb&lt;br /&gt; 230- legeek ldap utmp portage locate users usb apache&lt;br /&gt; 230- cdrw postgres mysql games video tape sshd dialout&lt;br /&gt; 230- cdrom audio console cron man uucp news mail&lt;br /&gt; 230- floppy wheel kmem mem lp disk tty adm&lt;br /&gt; 230- sys bin root&lt;br /&gt; 230 OK. Current restricted directory is /&lt;br /&gt; Remote system type is UNIX.&lt;br /&gt; Using binary mode to transfer files.&lt;br /&gt; ftp&amp;gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Well done&lt;/p&gt; &lt;hr class=&quot;spip&quot; /&gt;
&lt;h3 class=&quot;spip&quot;&gt;5. Activer l'authentification SSL/TLS pour le serveur FTP&lt;/h3&gt;
&lt;p class=&quot;spip&quot;&gt;L'int&#233;r&#234;t d'activer une telle authentification est que les noms d'utilisateurs et mot de passe ne sont pas envoy&#233;s en clair au serveur.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Voici par exemple ce que l'on peut sniffer sur le r&#233;seau lors d'une authentification FTP :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;br /&gt; No. Time Source Destination Protocol Info&lt;br /&gt; 1 0.000000 192.168.100.105 192.168.100.106 TCP 1576 &amp;gt; ftp [SYN] Seq=0 Len=0 MSS=1460&lt;br /&gt; 2 0.000125 192.168.100.106 192.168.100.105 TCP ftp &amp;gt; 1576 [SYN, ACK] Seq=0 Ack=1 Win=5840 Len=0 MSS=1460&lt;br /&gt; 3 0.000152 192.168.100.105 192.168.100.106 TCP 1576 &amp;gt; ftp [ACK] Seq=1 Ack=1 Win=65535 [TCP CHECKSUM INCORRECT] Len=0&lt;br /&gt; 4 0.041118 192.168.100.106 192.168.100.105 FTP Response: 220- Welcome to Pure-FTPd [privsep] [TLS] -&lt;br /&gt; 5 0.054374 192.168.100.105 192.168.100.106 FTP Request: USER testuser&lt;br /&gt; 6 0.054460 192.168.100.106 192.168.100.105 TCP ftp &amp;gt; 1576 [ACK] Seq=270 Ack=16 Win=5840 Len=0&lt;br /&gt; 7 0.054530 192.168.100.106 192.168.100.105 FTP Response: 331 User testuser OK. Password required&lt;br /&gt; 8 0.058269 192.168.100.105 192.168.100.106 FTP Request: PASS 123456&lt;br /&gt; 9 0.068799 192.168.100.106 192.168.100.105 FTP Response: 230-User testuser has group access to: testuser&lt;br /&gt; 10 0.074619 192.168.100.105 192.168.100.106 FTP Request: SYST&lt;br /&gt; 11 0.074723 192.168.100.106 192.168.100.105 FTP Response: 215 UNIX Type: L8&lt;br /&gt; 12 0.128437 192.168.100.105 192.168.100.106 FTP Request: FEAT&lt;br /&gt; 13 0.128603 192.168.100.106 192.168.100.105 FTP Response: 211-Extensions supported:&lt;br /&gt; 14 0.148750 192.168.100.105 192.168.100.106 FTP Request: PWD&lt;br /&gt; 15 0.148867 192.168.100.106 192.168.100.105 FTP Response: 257 &quot;/&quot; is your current location&lt;br /&gt; 16 0.173256 192.168.100.105 192.168.100.106 FTP Request: TYPE I&lt;br /&gt; 17 0.173396 192.168.100.106 192.168.100.105 FTP Response: 200 TYPE is now 8-bit binary&lt;br /&gt; 18 0.173760 192.168.100.105 192.168.100.106 FTP Request: PASV&lt;br /&gt; 19 0.173835 192.168.100.106 192.168.100.105 FTP Response: 500 Unknown command&lt;br /&gt; 20 0.185815 192.168.100.105 192.168.100.106 FTP Request: PORT 192,168,100,105,6,41&lt;br /&gt; 21 0.186023 192.168.100.106 192.168.100.105 FTP Response: 200 PORT command successful&lt;br /&gt; 22 0.186583 192.168.100.105 192.168.100.106 FTP Request: LIST&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;On voit donc tr&#232;s bien que le mot de passe d&#233;fini pour l'utilisateur &lt;code class='spip_code' dir='ltr'&gt;testuser&lt;/code&gt; est &lt;code class='spip_code' dir='ltr'&gt;123456&lt;/code&gt;. Ceci peut donc poser un petit probl&#232;me de s&#233;curit&#233;.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Pour s&#233;curiser les &#233;changes de mot de passe, il est n&#233;cessaire pour le serveur de disposer d'un certificat, que nous pouvons g&#233;n&#233;rer nous m&#234;me.&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;anubis ~ # openssl req -x509 -nodes -newkey rsa:1024 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem&lt;br /&gt; &lt;br /&gt; Generating a 1024 bit RSA private key&lt;br /&gt; ........................++++++&lt;br /&gt; .............................++++++&lt;br /&gt; writing new private key to '/etc/ssl/private/pure-ftpd.pem'&lt;br /&gt; -&lt;br /&gt; You are about to be asked to enter information that will be incorporated&lt;br /&gt; into your certificate request.&lt;br /&gt; What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt; There are quite a few fields but you can leave some blank&lt;br /&gt; For some fields there will be a default value,&lt;br /&gt; If you enter '.', the field will be left blank.&lt;br /&gt; -&lt;br /&gt; Country Name (2 letter code) [AU]:FR&lt;br /&gt; State or Province Name (full name) [Some-State]:FRANCE&lt;br /&gt; Locality Name (eg, city) []:Thionville&lt;br /&gt; Organization Name (eg, company) [Internet Widgits Pty Ltd]:wearegeeks&lt;br /&gt; Organizational Unit Name (eg, section) []:geek&lt;br /&gt; Common Name (eg, YOUR name) []:www2.wearegeeks.info&lt;br /&gt; Email Address []:spam@wearegeeks.info&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Lors de la saisie du param&#232;tre &lt;code class='spip_code' dir='ltr'&gt;Common Name&lt;/code&gt;, sp&#233;cifiez le FQDN [&lt;a href=&quot;http://geekz.fr/#nb5-4&quot; name=&quot;nh5-4&quot; id=&quot;nh5-4&quot; class=&quot;spip_note&quot; title='[4] Fully qualified domain name' &gt;4&lt;/a&gt;] de votre serveur.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Modifiez la valeur de la variable &lt;code class='spip_code' dir='ltr'&gt;MISC_OTHER&lt;/code&gt; dans le fichier de configuration &lt;code class='spip_code' dir='ltr'&gt;/etc/conf.d/pure-ftpd&lt;/code&gt;, ajoutez y l'option &lt;code class='spip_code' dir='ltr'&gt;-Y&lt;/code&gt; suivie de la valeur :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li class=&quot;spip&quot;&gt; &lt;code class='spip_code' dir='ltr'&gt;0&lt;/code&gt; : Si vous voulez d&#233;sactiver l'authentification SSL/TLS [&lt;a href=&quot;http://geekz.fr/#nb5-5&quot; name=&quot;nh5-5&quot; id=&quot;nh5-5&quot; class=&quot;spip_note&quot; title='[5] C&amp;#39;est la valeur par d&#233;faut' &gt;5&lt;/a&gt;]&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; &lt;code class='spip_code' dir='ltr'&gt;1&lt;/code&gt; : Si vous souhaitez que l'authentification SSL/TLS soit facultative&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; &lt;code class='spip_code' dir='ltr'&gt;2&lt;/code&gt; : Si vous souhaitez que l'authentification SSL/TLS soit obligatoire&lt;/li&gt;&lt;/ul&gt;
&lt;p class=&quot;spip&quot;&gt;Voici maintenant ce que l'on peut sniffer quand on se connecte sur le serveur avec l'authentification SSL/TLS d'activ&#233;e :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;br /&gt; No. Time Source Destination Protocol Info&lt;br /&gt; 1 0.000000 192.168.100.105 192.168.100.106 TCP 1632 &amp;gt; ftp [SYN] Seq=0 Len=0 MSS=1460&lt;br /&gt; 2 0.000116 192.168.100.106 192.168.100.105 TCP ftp &amp;gt; 1632 [SYN, ACK] Seq=0 Ack=1 Win=5840 Len=0 MSS=1460&lt;br /&gt; 3 0.000144 192.168.100.105 192.168.100.106 TCP 1632 &amp;gt; ftp [ACK] Seq=1 Ack=1 Win=65535 [TCP CHECKSUM INCORRECT] Len=0&lt;br /&gt; 4 0.038364 192.168.100.106 192.168.100.105 FTP Response: 220- Welcome to Pure-FTPd [privsep] [TLS] -&lt;br /&gt; 5 0.051921 192.168.100.105 192.168.100.106 FTP Request: AUTH TLS&lt;br /&gt; 6 0.052026 192.168.100.106 192.168.100.105 TCP ftp &amp;gt; 1632 [ACK] Seq=270 Ack=11 Win=5840 Len=0&lt;br /&gt; 7 0.052053 192.168.100.106 192.168.100.105 FTP Response: 234 AUTH TLS OK.&lt;br /&gt; 8 0.066446 192.168.100.105 192.168.100.106 FTP Request: \026\003\001\000=\001\000\0009\003\001F\376.\263\213\315\037QNr\220\347\333\277\004\026U\000\237!\267,\310;\f\327B\333\177`\310\343\000\000\022\000/\000&lt;br /&gt; 9 0.066869 192.168.100.106 192.168.100.105 FTP Response: \026\003\001\000*\002\000\000&amp;\003\001F\376.!3\214(8\337g\266\253\021\207\314\265N\230\376\334\266\016}\020\251\245aB\223\342\005[\000\000/\000\026\003\001\003\312\v\000\003\306\000\003\303\000\003\3000\202\003\2740\202\003%\240\003\002\001\002\002\t\000\350^\332\221\264Q\350#0&lt;br /&gt; 10 0.078692 192.168.100.105 192.168.100.106 FTP Request: \026\003\001\000\206\020\000\000\202\000\2007\224\216g\023\352_@\366x\243\313\225\226\245\035}\265\017\367P\2712m\027U\216T5\222\325*\250t\024\332s`\233[\357\360E9\210\241RR&amp;\032\357g\201&lt;br /&gt; 11 0.115119 192.168.100.106 192.168.100.105 TCP ftp &amp;gt; 1632 [ACK] Seq=1319 Ack=216 Win=6432 Len=0&lt;br /&gt; 12 0.115154 192.168.100.105 192.168.100.106 FTP Request: \024\003\001\000\001\001\026\003\001\000\360\3117\267\200k\315s\243\027n\320[4r\025\244\_\241i\016B\337xE\222\335U\303\272\374\321\t\023\022N\365&amp;lt;\260\2078\306\032k\275\236'iFz6H\023\332 \331=]\032\203f\230\2027\2462\221\267S\366\3420\016 @nqw,4\204\215\360\262Z\307S\326\315]\321\242=\321i\203\211\364\tJ\303\265\225X\346\256\277(OJ9\246\203b}c\222\212\275\347\313\325\351\207 #\250N\255\202h\312\025\257}\354\235\257\221\330\270\353\236&amp;gt;\240\000\256\257\200\266I\344\324Y&quot;9i\301\316#\374@\235\376\\000\000Luxk+\375\250\203:\366\336\004\324\271\263\\347\264.d\020&lt;br /&gt; 13 0.115280 192.168.100.106 192.168.100.105 TCP ftp &amp;gt; 1632 [ACK] Seq=1319 Ack=467 Win=7504 Len=0&lt;br /&gt; 14 0.115407 192.168.100.106 192.168.100.105 FTP Response: \024\003\001\000\001\001\026\003\001\0000\233\231I#w\232\341\212\027\330s\002\003\221\037\342\235\000\016\311\037\215\302D\333\342\337\216\3609\226\v\233\304\354\225#\232%Ta\262\222,\337\351/n&lt;br /&gt; 15 0.278873 192.168.100.105 192.168.100.106 TCP 1632 &amp;gt; ftp [ACK] Seq=467 Ack=1378 Win=64158 [TCP CHECKSUM INCORRECT] Len=0&lt;br /&gt; 16 6.380383 192.168.100.105 192.168.100.106 FTP Request: \027\003\001\000\360\364\b^H\271\355+\311\026\263\335I\264\222\353\260\031\331\207\t\376 M\343\336\246\2043\002q\230u\371\341\235\016\203I\270I2\334\353~\217W\303\036\272\vzB\035\226?%&amp;lt;nRs\342&lt;br /&gt; 17 6.380638 192.168.100.106 192.168.100.105 FTP Response: \027\003\001\000@\366\306:\346\223(\337y\376\332\3030\026v\271\2729RT\2126\354\257\320\3246!\035'\331\264\230\361\005x\016Oy\261)\033,\022\214\301\363\t\231\276\371\021\376\016\247\252I\234Y\322\245ag\356\002&lt;br /&gt; 18 6.383513 192.168.100.105 192.168.100.106 FTP Request: \027\003\001\000@\000 \367\323.\0208i\336E\346\004\262\026\211,6\212\a\373IY\022a\032\356\250\003\002\003\316\201\224\312\2277\2118+\310]\352.\314\257j`\213\207\240\211\330\374345\373\354\262r\303bh\330&lt;br /&gt; 19 6.387754 192.168.100.106 192.168.100.105 FTP Response: \027\003\001\000P\251\264\026\000\233f\315#\332q\034OL\252\033\353Q\202|\253\316\332\255w\372\341S1\350\263\306\3371\362\037\270G\273\034\255\353gjH\250\370\375[\266\025\347w= \b\355\255\212\335\321'/\373#\362}\304\277^\206Y\240\331+Z\335 y'\006\027\003\001\000@\356\204\023B\vla&lt;br /&gt; 20 6.394624 192.168.100.105 192.168.100.106 FTP Request: \027\003\001\000\260\bW\367\264\323\307O'\345\242\0240\334\373Nd\251NFQK\022\337Q\3437\215S;\255n\031v\266\206z&amp;gt;\252\204?&amp;gt;\177r\3774\204\023G\357&amp;gt;2\021\343M\355\217\250_\a\367&amp;lt;\336\337\351W\266\233a\001O=\373\004j\234~\\3255+\017\004\216\231\270r4\037I\357\3251\241\356\324)\034lj\332V\026\b\375\357\252\001z\f\227\326`pW\350\220\344\334A0\373\027N\332\353\263Nh{\276\021 \233F\250\346\275\026W\214\301\317\261\312xl\032\034\320\211\212\017aA&lt;br /&gt; 21 6.394782 192.168.100.106 192.168.100.105 FTP Response: \027\003\001\0000j\0268\243&amp;lt;Y\245\236\005B\347\200\237`]&lt;br /&gt; 22 6.398510 192.168.100.105 192.168.100.106 FTP Request: \027\003\001\000P.\367\267\2730\224\201K:XK\036s\332\260m\223\002*\223\272\335\367,=\223\262[\f\230Z\361\221\372]H\306\237;o\363\264\261S&lt;br /&gt; 23 6.398697 192.168.100.106 192.168.100.105 FTP Response: \027\003\001\000\300\223'\323g\b\005\376\212\204/G@\246\236\357:\267\251/\2351o\322Z9\263\016'\263\374u\311\321\310\216\266\353Pt\236`\363\362\252\302\003\004\314J\217\205\3211\2778\325\335\354q\002}\260\217&amp;gt;@\324\246\024\211(\330\200\017\235Q\t9\241\276\364u!\204\352\344\231\350\220Vq\003\243pw\366\200\325\017\000F\003\230w\006e\016\352\022R\037\021\373\340\210\346\023i\312\235H\303\261\370I\022B2\202`\016rd\262\370\340\302\360ARx\037\017D\346D\350\3566\232o+\250\273\342\030\361\321Q\270\263HZ\a\353a\264B\226\213\204\025 \267&amp;gt;D/_&lt;br /&gt; 24 6.414756 192.168.100.105 192.168.100.106 FTP Request: \027\003\001\00007~EH\324\262\333\352\321g\322\a\205\361Z\274\250`UF\207\342\210&lt;br /&gt; 25 6.414883 192.168.100.106 192.168.100.105 FTP Response: \027\003\001\0000V\370\344\267`\216\367\361\364v^SY\234\332\350\254Lq\025vL\000\364\212q\236l\223s\240\216D\314\035\272\034\303JD\027\364\264\217,\333\271?&lt;br /&gt; 26 6.418509 192.168.100.105 192.168.100.106 FTP Request: \027\003\001\000 #\335\326R\022\351\212\031\225\371\334S{\224\355\002\345&amp;\037\004`\020Zm\v\235\000\353S\314\266&lt;br /&gt; 27 6.418623 192.168.100.106 192.168.100.105 FTP Response: \027\003\001\0000EJ5eCO2\005\333\353S\036\327j7\366\375p\311\017\025\177\275\275\324\251\221\322S\370-m\233\341\307\321\3165\021k\260{\274\312\252\002\242q&lt;br /&gt; 28 6.425150 192.168.100.105 192.168.100.106 FTP Request: \027\003\001\000P\320z\261\266YY\332{\210\005\021\312\315\232a\305\275a^\211\v\024&lt;br /&gt; 29 6.425276 192.168.100.106 192.168.100.105 FTP Response: \027\003\001\000@\027\234Q\214\255\332\203d\357\235S\3426\365\343E\376\006\306\206/&amp;gt;8\023g\374\304k\346\323D\327\370n\245\2520GH\271\265\220\221qj\251\005\036\212\fA=\272\325\205\234@\362\205\360/\301H\213&lt;br /&gt; 30 6.429298 192.168.100.105 192.168.100.106 FTP Request: \027\003\001\0000qy%C\266b PA\002\260\360E\312\352\274\224\331\037\371\245\005\016\203\264\231cF5F\000&amp;\372,=]\355&lt;br /&gt; 31 6.429422 192.168.100.106 192.168.100.105 FTP Response: \027\003\001\000@\203c&amp;!8!)\343\030V\321\252Q(\321`S\214\244h\342G\334\227S\222:\365\257!\356\005\313\366&amp;lt;\033\234\203\222k\260j\3641\216\334.c\323m\303 F\200\213\250\246\304\364\001\320\235\374\211&lt;br /&gt; 32 6.433298 192.168.100.105 192.168.100.106 FTP Request: \027\003\001\000\220\262\346\315k\256\336\002\347\000\201\330\004\375\255&amp;gt;\t\334$*\217\250C\004q\257e\353\027\337H|\221\200+\244\272\006R\270x\000\304(n\000\305\035C\2303\230\316\227\311+y|\227\177\226-;Or!\004t\301\241d\215\220N_ \270a4_\325jq\245\334\225@{b\231r\242\t\242?k\022\037KTUlD\273\030&quot;L&amp;gt;/\261\224J\370\265\223\022\225\340\262eG\bx\211W\212\215\357kb4&lt;br /&gt; 33 6.433435 192.168.100.106 192.168.100.105 FTP Response: \027\003\001\0000+\236\363s.\364\210\2663\027\374C\300w\372\315\322\aD\300}\021&lt;br /&gt; 34 6.443471 192.168.100.105 192.168.100.106 FTP Request: \027\003\001\000\320M\270\301\366\337\300?5'\363\360\000t8[\205\300\362$\001]\220\333\316B\274\206\332\240\365\300\2038\243jwUZ\266\022\352\230\352S\235\\237J}\241P3\241T\242\313\026\237\220\354\301\252\254\253\223\363\021\363\364(;6\0200\3140\361\320@\312X9?\361\352\374\357\327V\224\330\310\240\370\321\005=\f\355\343\005@\244\200B\206\314sx*\031\344\311\221\177\314\226\214\020H0\212\375\261\200\210\037\372I\211\335\310#s\237\0272\364\322\272\177\367\330e0\005\223l\327^hdh\355(\324PH\276\227\307%\227Q\215\262\217\313o\025\215\372\214\335=l|b\354j\260hj\357\2376\033\201\345\f\213\371\260\t\330\246G\217\241\205\032\336&quot;5\267\021$C&lt;br /&gt; 35 6.443701 192.168.100.106 192.168.100.105 FTP Response: \027\003\001\000@\t\240\262N?\036\260\200\270\020e\350\236c\203\31597X\367;S\334*\325;\273\274\220\210\245\202,\030\376G\270\021\207'\016&lt;br /&gt; 36 6.444804 192.168.100.105 192.168.100.106 FTP Request: \027\003\001\000\260\214\305\241,\3259\347r\323s@Z\364\000-W\177\333\031g\352\231\350&lt;br /&gt; 37 6.444952 192.168.100.106 192.168.100.105 TCP ftp-data &amp;gt; 1633 [SYN] Seq=0 Len=0 MSS=1460 TSV=1864762 TSER=0 WS=7&lt;br /&gt; 38 6.445010 192.168.100.105 192.168.100.106 TCP 1633 &amp;gt; ftp-data [SYN, ACK] Seq=0 Ack=1 Win=65535 Len=0 MSS=1460 WS=0 TSV=0 TSER=0&lt;br /&gt; 39 6.445079 192.168.100.106 192.168.100.105 TCP ftp-data &amp;gt; 1633 [ACK] Seq=1 Ack=1 Win=5888 Len=0 TSV=1864762 TSER=0&lt;br /&gt; 40 6.445120 192.168.100.106 192.168.100.105 FTP Response: \027\003\001\000@h\003\337\020s#\351\202h\373\300\a\375\006\373)\305\a\236\031\313\206\264\360S\021\333T\003\021\267\322NKG2\341\367\311\357;6\202\3151\271u\261\276C\275\377\236\340\345\022\232_\270\342\234^Wr&lt;br /&gt; 41 6.445268 192.168.100.106 192.168.100.105 FTP-DATA FTP Data: 71 bytes&lt;br /&gt; FTP Data&lt;br /&gt; 42 6.445279 192.168.100.106 192.168.100.105 TCP ftp-data &amp;gt; 1633 [FIN, ACK] Seq=72 Ack=1 Win=5888 Len=0 TSV=1864762 TSER=0&lt;br /&gt; 43 6.445301 192.168.100.105 192.168.100.106 TCP 1633 &amp;gt; ftp-data [ACK] Seq=1 Ack=73 Win=65464 [TCP CHECKSUM INCORRECT] Len=0 TSV=63662 TSER=1864762&lt;br /&gt; 44 6.445313 192.168.100.106 192.168.100.105 FTP Response: \027\003\001\000 Q\2140\357^\301ev}\333\266\234\bxa\342?-\306\302\032\270\223l\345\0352\235=\371\216\260\027\003\001\0000\243\336E\325\272\3460\344a\263=\246v\216\034N5\035\207\342=\346\2511Z\264\364Ls\262\222\366\035\341n\237\215\264\310^G\316 \355\277\3668c\027\003\001\0000t)\207\376v\201\316+|8\332\363pk6'=~\264\314@\177\344n\273\002v\027YD\365 \243\337\216\000\352\217Y\204EN\006EU\024P\260&lt;br /&gt; 45 6.445335 192.168.100.105 192.168.100.106 TCP 1632 &amp;gt; ftp [ACK] Seq=1818 Ack=2466 Win=64670 [TCP CHECKSUM INCORRECT] Len=0&lt;br /&gt; 46 6.449689 192.168.100.105 192.168.100.106 TCP 1633 &amp;gt; ftp-data [FIN, ACK] Seq=1 Ack=73 Win=65464 [TCP CHECKSUM INCORRECT] Len=0 TSV=63662 TSER=1864762&lt;br /&gt; 47 6.449768 192.168.100.106 192.168.100.105 TCP ftp-data &amp;gt; 1633 [ACK] Seq=73 Ack=2 Win=5888 Len=0 TSV=1864763 TSER=63662&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Les &#233;changes de mot de passe et de nom d'utilisateur sont crypt&#233;s et la confidentialit&#233; des connection est am&#233;lior&#233;e.&lt;/p&gt; &lt;hr class=&quot;spip&quot; /&gt;
&lt;h3 class=&quot;spip&quot;&gt;6. Modification du logging des actions&lt;/h3&gt;
&lt;p class=&quot;spip&quot;&gt;Par d&#233;faut, le log de toutes les actions FTP sont stock&#233;es dans &lt;code class='spip_code' dir='ltr'&gt;/var/log/messages&lt;/code&gt;, au m&#234;me endroit que tous les autres logs syst&#234;me. Comme je ne vais pas m'amuser a expliquer le fonctionnement de syslog-ng, suffit donc de modifier le fichier &lt;code class='spip_code' dir='ltr'&gt;/etc/syslog-ng/syslog-ng.conf&lt;/code&gt; de la fa&#231;on suivante :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;# $Header:&lt;br /&gt; /var/cvsroot/gentoo-x86/app-admin/syslog-ng/files/syslog-ng.conf.gentoo,v&lt;br /&gt; 1.5 2005/05/12 05:46:10 mr_bones_ Exp $&lt;br /&gt; #&lt;br /&gt; # Syslog-ng default configuration file for Gentoo Linux&lt;br /&gt; # contributed by Michael Sterrett&lt;br /&gt; &lt;br /&gt; options {&lt;br /&gt; chain_hostnames(off);&lt;br /&gt; sync(0);&lt;br /&gt; &lt;br /&gt; # The default action of syslog-ng 1.6.0 is to log a STATS line&lt;br /&gt; # to the file every 10 minutes. That's pretty ugly after a while.&lt;br /&gt; # Change it to every 12 hours so you get a nice daily update of&lt;br /&gt; # how many messages syslog-ng missed (0).&lt;br /&gt; stats(43200);&lt;br /&gt; };&lt;br /&gt; &lt;br /&gt; source src { unix-stream(&quot;/dev/log&quot;); internal(); pipe(&quot;/proc/kmsg&quot;); };&lt;br /&gt; &lt;br /&gt; destination ftp { file(&quot;/var/log/pure-ftpd&quot;); };&lt;br /&gt; filter f_ftp { facility(ftp); };&lt;br /&gt; &lt;br /&gt; destination messages { file(&quot;/var/log/messages&quot;); };&lt;br /&gt; filter f_messages { level(info..warn) and not facility(ftp); };&lt;br /&gt; &lt;br /&gt; filter f_emergency { level(emerg); };&lt;br /&gt; filter f_info { level(info); };&lt;br /&gt; filter f_notice { level(notice); };&lt;br /&gt; filter f_warn { level(warn); };&lt;br /&gt; filter f_crit { level(crit); };&lt;br /&gt; filter f_err { level(err); };&lt;br /&gt; filter f_failed { match(&quot;failed&quot;); };&lt;br /&gt; filter f_denied { match(&quot;denied&quot;); };&lt;br /&gt; &lt;br /&gt; # By default messages are logged to tty12...&lt;br /&gt; destination console_all { file(&quot;/dev/tty12&quot;); };&lt;br /&gt; # ...if you intend to use /dev/console for programs like xconsole&lt;br /&gt; # you can comment out the destination line above that references /dev/tty12&lt;br /&gt; # and uncomment the line below.&lt;br /&gt; #destination console_all { file(&quot;/dev/console&quot;); };&lt;br /&gt; &lt;br /&gt; log { source(src); filter(f_ftp); destination(ftp); };&lt;br /&gt; log { source(src); filter(f_messages); destination(messages); };&lt;br /&gt; log { source(src); destination(console_all); };&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://geekz.fr/#nh5-1&quot; name=&quot;nb5-1&quot; class=&quot;spip_note&quot; title=&quot;Notes 5-1&quot;&gt;1&lt;/a&gt;] Syntaxe : -S adresseip,port&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://geekz.fr/#nh5-2&quot; name=&quot;nb5-2&quot; class=&quot;spip_note&quot; title=&quot;Notes 5-2&quot;&gt;2&lt;/a&gt;] ou n'importe quel autre fichier sp&#233;cifi&#233;&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://geekz.fr/#nh5-3&quot; name=&quot;nb5-3&quot; class=&quot;spip_note&quot; title=&quot;Notes 5-3&quot;&gt;3&lt;/a&gt;] Contient la m&#234;me chose que le fichier pour MySQL&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://geekz.fr/#nh5-4&quot; name=&quot;nb5-4&quot; class=&quot;spip_note&quot; title=&quot;Notes 5-4&quot;&gt;4&lt;/a&gt;] Fully qualified domain name&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://geekz.fr/#nh5-5&quot; name=&quot;nb5-5&quot; class=&quot;spip_note&quot; title=&quot;Notes 5-5&quot;&gt;5&lt;/a&gt;] C'est la valeur par d&#233;faut&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>



	<item>
		<title>Mise en oeuvre d'IPv6 sous Windows 2003 Server</title>
		<link>http://geekz.fr/Mise-en-oeuvre-d-IPv6-sous-Windows</link>
		<guid isPermaLink="true">http://geekz.fr/Mise-en-oeuvre-d-IPv6-sous-Windows</guid>
		<dc:date>2007-09-21T20:10:14Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Dumble</dc:creator>

<category domain="http://geekz.fr/-IPv6-">IPv6</category>


		<description>Le dernier syst&#232;me d'exploitation de Microsoft supporte le protocole IPv6 de mani&#232;re native depuis ses versions XP-SP1 et 2003 Server. La version Vista int&#232;gre un support plus pouss&#233; de la configuration, cependant, celle-ci ne sera pas abord&#233;e ici pour des raisons mat&#233;rielles ;) &lt;br /&gt;Installation du protocole Pour activer la prise en charge de ce protocole avec Windows 2003, il faut aller dans le panneau de configuration, choisir connexions r&#233;seau puis cliquer sur la connexion r&#233;seau sur (...)


-
&lt;a href="http://geekz.fr/-IPv6-" rel="directory"&gt;IPv6&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;Le dernier syst&#232;me d'exploitation de Microsoft supporte le protocole IPv6 de mani&#232;re native depuis ses versions XP-SP1 et 2003 Server. La version Vista int&#232;gre un support plus pouss&#233; de la configuration, cependant, celle-ci ne sera pas abord&#233;e ici pour des raisons mat&#233;rielles ;)&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h3 class=&quot;spip&quot;&gt;Installation du protocole&lt;/h3&gt;
&lt;p class=&quot;spip&quot;&gt;Pour activer la prise en charge de ce protocole avec Windows 2003, il faut aller dans le panneau de configuration, choisir connexions r&#233;seau puis cliquer sur la connexion r&#233;seau sur laquelle on d&#233;sire installer la prise en charge du protocole IPv6 :&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Une fois la connexion s&#233;lectionn&#233;e, dans la fen&#234;tre qui appara&#238;t, cliquer sur propri&#233;t&#233;s :
&lt;span class='spip_document_3965 spip_documents spip_documents_center' &gt;
&lt;img src='http://geekz.fr/local/cache-vignettes/L379xH377/config-2003-2-63b34.png' width='379' height='377' alt=&quot;&quot; style='height:377px;width:379px;' class=' format_png' /&gt;&lt;/span&gt;
&lt;span class='spip_document_3966 spip_documents spip_documents_center' &gt;
&lt;img src='http://geekz.fr/local/cache-vignettes/L429xH452/config-2003-3-064f2.png' width='429' height='452' alt=&quot;&quot; style='height:452px;width:429px;' class=' format_png' /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Puis dans Installer, choisir Protocole, Ajouter et enfin &#171; Microsoft TCP/IP version 6 &#187;
&lt;span class='spip_document_3967 spip_documents spip_documents_center' &gt;
&lt;img src='http://geekz.fr/local/cache-vignettes/L347xH288/config-2003-4-d69bb.png' width='347' height='288' alt=&quot;&quot; style='height:288px;width:347px;' class=' format_png' /&gt;&lt;/span&gt;
&lt;span class='spip_document_3968 spip_documents spip_documents_center' &gt;
&lt;img src='http://geekz.fr/local/cache-vignettes/L441xH332/config-2003-5-86f25.png' width='441' height='332' alt=&quot;&quot; style='height:332px;width:441px;' class=' format_png' /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Et enfin, la commande &#171; ipconfig &#187; nous permet de v&#233;rifier que l'installation s'est effectu&#233;e correctement : &lt;span class='spip_document_3969 spip_documents spip_documents_center' &gt;
&lt;img src='http://geekz.fr/local/cache-vignettes/L520xH258/config-2003-6-6c11e.png' width='520' height='258' alt=&quot;V&#233;rification de la configuration de Windows&quot; title=&quot;V&#233;rification de la configuration de Windows&quot; style='height:258px;width:520px;' class=' format_png' /&gt;&lt;/span&gt;&lt;/p&gt; &lt;h3 class=&quot;spip&quot;&gt;Configuration&lt;/h3&gt;
&lt;p class=&quot;spip&quot;&gt;Actuellement, la configuration d'IPv6 sous Windows ne peut se faire qu'en ligne de commande &#224; l'aide de l'utilitaire netsh. Il s'agit d'une sorte d'interface permettant d'acc&#233;der &#224; tout la configuration r&#233;seau de Windows qui ne devrait pas trop d&#233;payser les personnes ayant d&#233;j&#224; manipul&#233; du mat&#233;riel Cisco.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;Configuration des adresses IP&lt;/strong&gt;&lt;br /&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;L'ajout / suppression d'une adresse IP se fait &#224; l'aide de la commande :&lt;/p&gt; &lt;pre&gt;
netsh
interfaces
ipv6
add address &amp;lt;nom de la connexion&amp;gt; &amp;lt;adresse IP&amp;gt;
del address &amp;lt;nom de la connexion&amp;gt; &amp;lt;adresse IP&amp;gt;
&lt;/pre&gt;
&lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;Configuration des DNS&lt;/strong&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;L'ajout / suppression d'un serveur DNS se fait avec les commandes :&lt;/p&gt; &lt;pre&gt;
netsh
interfaces
ipv6
add dns &amp;lt;nom de la connexion&amp;gt; &amp;lt;adresse IP du serveur DNS&amp;gt;
add del &amp;lt;nom de la connexion&amp;gt; &amp;lt;adresse IP du serveur DNS&amp;gt;
&lt;/pre&gt; &lt;strong class=&quot;spip&quot;&gt;Configuration du routage&lt;/strong&gt;
&lt;p class=&quot;spip&quot;&gt;L'ajout et la suppression des routes se font &#224; l'aide des commandes suivantes :&lt;/p&gt; &lt;pre&gt;
netsh
interfaces
ipv6
add route &amp;lt;pr&#233;fixe du r&#233;seau distant&amp;gt; &amp;lt;nom de la connexion&amp;gt; &amp;lt;adresse de la passerelle&amp;gt;
del route &amp;lt;pr&#233;fixe du r&#233;seau distant&amp;gt; &amp;lt;nom de la connexion&amp;gt; &amp;lt;adresse de la passerelle&amp;gt;
&lt;/pre&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>



	<item>
		<title>Apache 2 et les vhosts</title>
		<link>http://geekz.fr/Apache-2-et-les-vhosts</link>
		<guid isPermaLink="true">http://geekz.fr/Apache-2-et-les-vhosts</guid>
		<dc:date>2007-09-12T17:32:20Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>b3nj</dc:creator>

<category domain="http://geekz.fr/-Systeme-">Syst&#232;me</category>

		<dc:subject>Apache</dc:subject>
		<dc:subject>Securite</dc:subject>

		<description>

-
&lt;a href="http://geekz.fr/-Systeme-" rel="directory"&gt;Syst&#232;me&lt;/a&gt;

/ 
&lt;a href="http://geekz.fr/+-Apache-+" rel="tag"&gt;Apache&lt;/a&gt;, 
&lt;a href="http://geekz.fr/+-Securite-+" rel="tag"&gt;Securite&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;h3 class=&quot;spip&quot;&gt;Pr&#233;requis et avant-propos&lt;/h3&gt;
&lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;1. Syst&#232;me d'exploitation et version&lt;/strong&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Pour commencer, comme la plupart des articles que j'ai pu &#233;crire, je me base sur le syst&#232;me d'exploitation Linux/Gentoo, toutefois, avec quelques am&#233;nagements, il doit &#234;tre facilement portable.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Le serveur web utilis&#233; dans ce document est Apache 2 (apache-2.0.58) et doit &#234;tre valable &#224; quelques am&#233;nagements pr&#232;s avec les futures versions, voir m&#234;me apache 2.2.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;2. D&#233;finitions et &#233;claircissements utiles&lt;/strong&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Le terme Virtual Host ou vhost [&lt;a href=&quot;http://geekz.fr/#nb7-1&quot; name=&quot;nh7-1&quot; id=&quot;nh7-1&quot; class=&quot;spip_note&quot; title='[1] H&#244;te virtuel' &gt;1&lt;/a&gt;] nous r&#233;f&#232;re au fait de faire fonctionner plus d'un site web (www.societe1.fr, www.societe2.be, etc) sur une seule machine.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Les Virtual Host peuvent &#234;tre &quot;Ip-based&quot; (bas&#233; sur une addresse ip), signifiant que vous avez besoin d'une adresse Ip pour chaque h&#244;te virtuel fonctionnant sur le site web. Ils peuvent &#233;galement &#234;tre &quot;name-based&quot; (bas&#233; sur le nom), c'est &#224; dire que pour chaque adresse Ip sur le serveur, plusieurs sites nomm&#233;s fonctionnent simultan&#233;ment. Le fait que plusieurs h&#244;tes virtuels fonctionnent simultan&#233;ment sur le m&#234;me serveur est totalement transparent pour l'utilisateur final.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Apache &#233;tait un des premiers serveurs &#224; supporter les ip-based vhosts d&#232;s le d&#233;part. Les version ult&#233;rieures &#224; 1.1 supportent les vhosts ip-based et name-based.&lt;/p&gt; &lt;hr class=&quot;spip&quot; /&gt;
&lt;h3 class=&quot;spip&quot;&gt;Installation et configuration d'apache 2&lt;/h3&gt;
&lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;1 Options/Modules &#224; choisir&lt;/strong&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Voici les use flags que je conseillerai d'utiliser pour avoir une installation polyvalente d'apache qui permette une utilisation tant soit pour h&#233;berger un seul site web que pour un h&#233;bergement mutualis&#233;.&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li class=&quot;spip&quot;&gt; apache 2 : Permet de sp&#233;cifier que l'on souhaite une version 2.x &#224; la place de la version 1.3 qui est encore propos&#233;e car encore utilis&#233;e en production sur beaucoup de serveurs et &#224; fait ses preuves en terme de s&#233;curit&#233;/stabilit&#233;.&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; threads : Permet de faire fonctionner apache en mode thread&#233; ce qui lui permet de traiter un grand nombre de requ&#234;tes en utilisant moins de ressources syst&#232;me qu'un serveur apache n'utilisant uniquement le mode multiprocessus.&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; mpm-worker [&lt;a href=&quot;http://geekz.fr/#nb7-2&quot; name=&quot;nh7-2&quot; id=&quot;nh7-2&quot; class=&quot;spip_note&quot; title='[2] http://httpd.apache.org/docs/2.0/mod/worker.html' &gt;2&lt;/a&gt;] : Ce use flag n'est pas n&#233;cessaire pour un serveur qui ne va pas h&#233;berger beaucoup de sites web. mpm-worker introduit un fonctionnement hybride car il fait fonctionner un serveur apache avec plusieurs processus qui eux m&#234;me sont multithread&#233;s.&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; ssl : Permet l'impl&#233;mentation d'une interface &#224; la librairie OpenSSL, qui fournit une encryption forte en utilisant les protocoles SSL [&lt;a href=&quot;http://geekz.fr/#nb7-3&quot; name=&quot;nh7-3&quot; id=&quot;nh7-3&quot; class=&quot;spip_note&quot; title='[3] Secure Sockets Layer, pour couche de sockets s&#233;curis&#233;s' &gt;3&lt;/a&gt;] ou TLS [&lt;a href=&quot;http://geekz.fr/#nb7-4&quot; name=&quot;nh7-4&quot; id=&quot;nh7-4&quot; class=&quot;spip_note&quot; title='[4] Transport Layer Security, pour s&#233;curit&#233; sur la couche transport' &gt;4&lt;/a&gt;].&lt;/li&gt;&lt;/ul&gt;
&lt;p class=&quot;spip&quot;&gt;Avec ce genre d'options, vous &#234;tes tranquilles pour un h&#233;bergement mutualis&#233;.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;2 Modification du fichier de configuration par d&#233;faut&lt;/strong&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;La configuration par d&#233;faut d'apache doit &#234;tre l&#233;g&#232;rement modifi&#233;e pour &#234;tre utilis&#233;e dans un environnement de production, pour qu'elle ne divulgue pas d'informations susceptibles d'&#234;tre utilis&#233;es &#224; des fins n&#233;fastes ainsi que pour configurer le mod worker afin que le serveur fonctionne au mieux en n&#233;cessitant le moins de ressources possible.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Le fichier de configuration &#224; modifier est /etc/apache2/httpd.conf.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Concernant mpm-worker, voici un exemple de configuration :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;br /&gt; # worker MPM [DEFAULT IF USE=threads]&lt;br /&gt; # StartServers: nombre initial de processus serveur &#224; d&#233;marrer&lt;br /&gt; # MaxClients: nombre maximal de connexions client simultan&#233;es maximum&lt;br /&gt; # MinSpareThreads: nombre minimal de threads worker qui sont gard&#233;s en stock&lt;br /&gt; # MaxSpareThreads: nombre maximal de threads worker qui sont gard&#233;s en stock&lt;br /&gt; # ThreadsPerChild: nombre constant de threads worker par processus server&lt;br /&gt; # MaxRequestsPerChild: nombre maximal de requ&#234;tes qu'un processus server traite&lt;br /&gt; &amp;lt;IfModule worker.c&amp;gt;&lt;br /&gt; StartServers 5&lt;br /&gt; MaxClients 320&lt;br /&gt; MinSpareThreads 200&lt;br /&gt; MaxSpareThreads 320&lt;br /&gt; ThreadsPerChild 64&lt;br /&gt; MaxRequestsPerChild 0 #illimit&#233;&lt;br /&gt; &amp;lt;/IfModule&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Les param&#232;tres vraiment int&#233;ressants &#224; configurer pour le fonctionnement de worker sont ThreadsPerChild et MaxClients.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Il est toutefois interressant de suivre une certaine logique :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li class=&quot;spip&quot;&gt; MaxClients doit &#234;tre un multiple de ThreadsPerChild pour que chaque processus serveur ait le m&#234;me nombre de threads&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; MaxClients n'a aucun int&#233;r&#234;t &#224; &#234;tre configur&#233; &#224; une valeur sup&#233;rieure a StartServers multipli&#233; par ThreadsPerChild car il ne peut logiquement pas y avoit plus de clients que le nombre de threads total.&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; MaxSpareThreads doit &#234;tre &#233;gal &#224; MaxClients pour que les threads soit toujours pr&#234;ts.&lt;/li&gt;&lt;/ul&gt;
&lt;p class=&quot;spip&quot;&gt;Voici des param&#232;tres qu'il est int&#233;ressant de configurer :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li class=&quot;spip&quot;&gt;&lt;code class='spip_code' dir='ltr'&gt;Listen 0.0.0.0:80&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p class=&quot;spip&quot;&gt;Permet au serveur apache d'&#233;couter sur toutes les adresses ip du serveur.&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li class=&quot;spip&quot;&gt;&lt;code class='spip_code' dir='ltr'&gt;ServerAdmin benjamin@wearegeeks.info&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p class=&quot;spip&quot;&gt;Sp&#233;cifie l'adresse email de l'administrateur du serveur.&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li class=&quot;spip&quot;&gt;&lt;code class='spip_code' dir='ltr'&gt;ServerName horus&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p class=&quot;spip&quot;&gt;Si ce param&#232;tre n'est pas sp&#233;cifi&#233;, il est d&#233;termin&#233; automatiquement, mais il peut y avoir des probl&#232;mes dans le cas ou le processus apache n'arrive pas &#224; d&#233;terminer le nom de la machine.&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li class=&quot;spip&quot;&gt;&lt;code class='spip_code' dir='ltr'&gt;ServerTokens Prod&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p class=&quot;spip&quot;&gt;Par d&#233;faut, les headers de r&#233;ponse HTTP sont Full, qui donne beaucoup trop d'informations concernant le syst&#232;me d'exploiration et les modules compil&#233;s d'apache. Prod est un mode de r&#233;ponse beaucoup moins verbeux et convient, comme son nom l'indique, mieux &#224; des environnements de production.&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li class=&quot;spip&quot;&gt;&lt;code class='spip_code' dir='ltr'&gt;ServerSignature Off&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p class=&quot;spip&quot;&gt;Permet de ne pas afficher de signature en bas des pages g&#233;n&#233;r&#233;s par apache automatiquement (pages d'erreur interne, listings ftp, etc)&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Avec &#231;a, on est pr&#234;t pour faire fonctionner un serveur web suffisant.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;3 V&#233;rification de la configuration&lt;/strong&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Avant de lancer le serveur apache, assurez vous de n'avoir pas d'erreur de syntaxe dans les fichiers de configuration en lan&#231;ant la commande :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;horus ~ # /etc/init.d/apache2 configtest&lt;br /&gt; * Checking Apache Configuration ... [ ok ]&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Maintenant lan&#231;ons le serveur :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;horus ~ # /etc/init.d/apache2 start&lt;br /&gt; * Starting apache2 ... [ ok ]&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Regardons maintenant dans les processus si l'on retrouve bien les 5 processus server que nous avons configur&#233; :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;horus ~ # ps faux&lt;br /&gt; USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND&lt;br /&gt; apache 28148 0.0 0.0 16212 216 ? S 11:07 0:00 \_ /usr/sbin/apache2 -D DEFAULT_VHOST -D PHP5 -d /usr/lib/apache2 -f /etc/apache2/httpd.con&lt;br /&gt; apache 28152 0.0 0.1 558752 268 ? Sl 11:07 0:00 \_ /usr/sbin/apache2 -D DEFAULT_VHOST -D PHP5 -d /usr/lib/apache2 -f /etc/apache2/httpd.con&lt;br /&gt; apache 28154 0.0 0.1 558752 272 ? Sl 11:07 0:00 \_ /usr/sbin/apache2 -D DEFAULT_VHOST -D PHP5 -d /usr/lib/apache2 -f /etc/apache2/httpd.con&lt;br /&gt; apache 28156 0.0 0.1 558752 272 ? Sl 11:07 0:00 \_ /usr/sbin/apache2 -D DEFAULT_VHOST -D PHP5 -d /usr/lib/apache2 -f /etc/apache2/httpd.con&lt;br /&gt; apache 28163 0.0 0.1 558752 272 ? Sl 11:07 0:00 \_ /usr/sbin/apache2 -D DEFAULT_VHOST -D PHP5 -d /usr/lib/apache2 -f /etc/apache2/httpd.con&lt;br /&gt; apache 28165 0.0 0.1 558752 272 ? Sl 11:07 0:00 \_ /usr/sbin/apache2 -D DEFAULT_VHOST -D PHP5 -d /usr/lib/apache2 -f /etc/apache2/httpd.con&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Nous voyons donc bien que notre configuration est prise en compte :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li class=&quot;spip&quot;&gt; Le processus lanc&#233; par l'utilisateur root est celui qui forke les processus, il est le parent de tous les autres processus. S'il venait &#224; mourrir, tous les processus qui en d&#233;pendent mourriraient aussi [&lt;a href=&quot;http://geekz.fr/#nb7-5&quot; name=&quot;nh7-5&quot; id=&quot;nh7-5&quot; class=&quot;spip_note&quot; title='[5] Rs veut dire fonctionnant et est un leader de session' &gt;5&lt;/a&gt;].&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; Le processus qui &#224; le statut S est le serveur principal apache, en dehors des directives worker [&lt;a href=&quot;http://geekz.fr/#nb7-6&quot; name=&quot;nh7-6&quot; id=&quot;nh7-6&quot; class=&quot;spip_note&quot; title='[6] S veut dire que le processus est en &#233;tat d&amp;#39;attente interruptible, (...)' &gt;6&lt;/a&gt;].&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; Les 5 autres processus sont les processus li&#233;s &#224; mod_worker, ce sont les processus serveur qui sont multithread&#233;s [&lt;a href=&quot;http://geekz.fr/#nb7-7&quot; name=&quot;nh7-7&quot; id=&quot;nh7-7&quot; class=&quot;spip_note&quot; title='[7] S veut dire que le processus est en &#233;tat d&amp;#39;attente interruptible, (...)' &gt;7&lt;/a&gt;].&lt;/li&gt;&lt;/ul&gt;
&lt;p class=&quot;spip&quot;&gt;Vous pouvez voir que les threads sont bien pr&#233;sents en consultant le retour d'une des commandes suivantes :&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;code class='spip_code' dir='ltr'&gt;horus ~ # ps -eLf&lt;/code&gt; ou &lt;code class='spip_code' dir='ltr'&gt;horus ~ # ps axms&lt;/code&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Nous voil&#224; donc avec un apache fonctionnel.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;4 V&#233;rification du fonctionnement&lt;/strong&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;La seule fa&#231;on de v&#233;rifier le bon fonctionnement du serveur web est de s'y connecter soit par son adresse ip, soit par son hostname [&lt;a href=&quot;http://geekz.fr/#nb7-8&quot; name=&quot;nh7-8&quot; id=&quot;nh7-8&quot; class=&quot;spip_note&quot; title='[8] Si vous fonctionnez dans un environnement de test, vous pouvez simuler (...)' &gt;8&lt;/a&gt;].&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Le site par d&#233;faut &#224; son DocumentRoot dans &lt;code class='spip_code' dir='ltr'&gt;/var/www/localhost/htdocs&lt;/code&gt;, j'ai donc plac&#233; un fichier index.html ayant un contenu reconnaissable pour la suite de l'article.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Apache ne r&#233;pondra donc avec la configuration actuelle qu'a un seul site web. Pour faire de l'h&#233;bergement de masse, il n'est donc pas pratique d'avoir un serveur par site web, d'o&#249; l'int&#233;r&#234;t d'utiliser les vhosts.&lt;/p&gt; &lt;hr class=&quot;spip&quot; /&gt;
&lt;h3 class=&quot;spip&quot;&gt;M&#233;thode de reconnaissance des virtual host par apache&lt;/h3&gt;
&lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;1 Fonctionnement de l'analyse des fichiers de configuration&lt;/strong&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Il existe un serveur principal qui consiste en toutes les d&#233;clarations dans les fichiers de configuration apparaissant en dehors des sections &lt;VirtualHost&gt; et il existe les serveurs virtuels, appel&#233;s vhosts, qui sont d&#233;finis dans les sections &lt;VirtualHost&gt;.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Les directives Listen [&lt;a href=&quot;http://geekz.fr/#nb7-9&quot; name=&quot;nh7-9&quot; id=&quot;nh7-9&quot; class=&quot;spip_note&quot; title='[9] http://httpd.apache.org/docs/2.0/mod/mpm_common.html#listen' &gt;9&lt;/a&gt;], ServerName [&lt;a href=&quot;http://geekz.fr/#nb7-10&quot; name=&quot;nh7-10&quot; id=&quot;nh7-10&quot; class=&quot;spip_note&quot; title='[10] http://httpd.apache.org/docs/2.0/mod/core.html#servername' &gt;10&lt;/a&gt;], ServerPath [&lt;a href=&quot;http://geekz.fr/#nb7-11&quot; name=&quot;nh7-11&quot; id=&quot;nh7-11&quot; class=&quot;spip_note&quot; title='[11] http://httpd.apache.org/docs/2.0/mod/core.html#serverpath' &gt;11&lt;/a&gt;] and ServerAlias [&lt;a href=&quot;http://geekz.fr/#nb7-12&quot; name=&quot;nh7-12&quot; id=&quot;nh7-12&quot; class=&quot;spip_note&quot; title='[12] http://httpd.apache.org/docs/2.0/mod/core.html#serverpath' &gt;12&lt;/a&gt;] peuvent apparaitre n'importe ou dans la d&#233;finition d'un serveur. Il est important de noter que chaque occurence de la d&#233;claration outrepasse la pr&#233;c&#233;dente occurence &#224; l'int&#233;rieur du serveur.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;La directive Listen du serveur principal a deux fonctions. La premi&#232;re est de d&#233;terminer le port r&#233;seau sur lequel Apache va &#233;couter. La seconde est de sp&#233;cifier le num&#233;ro de port qui sera &#234;tre utilis&#233; en des URI absolus durant les redirections.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;A contrario du serveur principal, les ports des vhosts n'affectent pas les ports sur lesquels Apache &#233;coute pour des connections.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Chaque adresse apparaissant dans la directive VirtualHost peut avoir un port optionnel. Si le port n'est pas sp&#233;cifi&#233;, il est affect&#233; &#224; la valeur la plus r&#233;cente de la directive Listen du serveur principal. Le port sp&#233;cial * indique un caract&#232;re sp&#233;cial qui correspond &#224; tous les ports du serveur. collectivement, le jeu entier des adresses (incluant plusieurs enregistrements A r&#233;sultant de la r&#233;solution DNS) est ajout&#233; au jeu d'adresses du vhost.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Tant qu'il n'y a pas de directive NameVirtualHost d'utilis&#233;e pour une adresse IP sp&#233;cifique, le premier vhost avec cette adresse est trait&#233; en tant que vhost bas&#233; sur l'ip. L'ip peut &#233;galement &#234;tre le caract&#232;re sp&#233;cial *.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Si des vhosts bas&#233;s sur le nom doivent &#234;tre utilis&#233;s, alors une directive &lt;code class='spip_code' dir='ltr'&gt;NameVirtualHost&lt;/code&gt; doit apparaitre avec l'adresse IP sp&#233;cifi&#233;e pour les dites vhosts. En d'autre mots, vous devez sp&#233;cifier l'adresse ip qui contient les alias [&lt;a href=&quot;http://geekz.fr/#nb7-13&quot; name=&quot;nh7-13&quot; id=&quot;nh7-13&quot; class=&quot;spip_note&quot; title='[13] CNAME' &gt;13&lt;/a&gt;] du nom d'h&#244;te pour vos vhosts bas&#233;s sur le nom &#224; la directive &lt;code class='spip_code' dir='ltr'&gt;NameVirtualHost&lt;/code&gt; dans votre fichier de configuration.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Plusieurs directives NameVirtualHost peuvent &#234;tre utilis&#233;es avec un certain nombre de directives VirtualHost, mais une seule directive NameVirtualHost peut &#234;tre utilis&#233;e pour chaque paire sp&#233;cifique adresse ip:port.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;L'ordre d'apparition des directives NameVirtualHost et VirtualHost n'est pas important, ce qui fait que les deux exemples suivants sont identiques (seul l'ordre des directives VirtualHost pour une adresse est important) :&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;exemple 1 :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;br /&gt; NameVirtualHost 111.22.33.44&lt;br /&gt; &amp;lt;VirtualHost 111.22.33.44&amp;gt;&lt;br /&gt; # server A&lt;br /&gt; ...&lt;br /&gt; &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt; &amp;lt;VirtualHost 111.22.33.44&amp;gt;&lt;br /&gt; # server B&lt;br /&gt; ...&lt;br /&gt; &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt; &lt;br /&gt; NameVirtualHost 111.22.33.55&lt;br /&gt; &amp;lt;VirtualHost 111.22.33.55&amp;gt;&lt;br /&gt; # server C&lt;br /&gt; ...&lt;br /&gt; &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt; &amp;lt;VirtualHost 111.22.33.55&amp;gt;&lt;br /&gt; # server D&lt;br /&gt; ...&lt;br /&gt; &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;exemple 2 :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;br /&gt; &amp;lt;VirtualHost 111.22.33.44&amp;gt;&lt;br /&gt; # server A&lt;br /&gt; &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt; &amp;lt;VirtualHost 111.22.33.55&amp;gt;&lt;br /&gt; # server C&lt;br /&gt; ...&lt;br /&gt; &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt; &amp;lt;VirtualHost 111.22.33.44&amp;gt;&lt;br /&gt; # server B&lt;br /&gt; ...&lt;br /&gt; &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt; &amp;lt;VirtualHost 111.22.33.55&amp;gt;&lt;br /&gt; # server D&lt;br /&gt; ...&lt;br /&gt; &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt; &lt;br /&gt; NameVirtualHost 111.22.33.44&lt;br /&gt; NameVirtualHost 111.22.33.55&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Pour am&#233;liorer la lisibilit&#233; de vos fichiers de configuration, il est toutefois pr&#233;f&#233;rable d'utiliser une syntaxe similaire &#224; celle de l'exemple 1.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Apr&#232;s avoir pars&#233; la directive VirtualHost, le serveur vhost re&#231;oit un port par d&#233;faut &#233;gale a celui assign&#233; au premier nom dans sa directive VirtualHost.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;La liste compl&#232;te des noms dans la directive VirtualHost est trait&#233;e de la m&#234;me fa&#231;on qu'une directive ServerAlias [&lt;a href=&quot;http://geekz.fr/#nb7-14&quot; name=&quot;nh7-14&quot; id=&quot;nh7-14&quot; class=&quot;spip_note&quot; title='[14] Mais ces noms ne sont pas &#233;cras&#233;s par des d&#233;clarations (...)' &gt;14&lt;/a&gt;] si tous les noms sont r&#233;solus sur le m&#234;me set d'adresses. Il est interressant de noter que s'il existe des param&#232;tres Listen d&#233;finis dans ce vhost, ils n'affecteront pas les ports assign&#233;s dans le set d'adresses.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Lors de l'initialisation et pour chaque adresse ip, une liste est g&#233;n&#233;r&#233;e et ins&#233;r&#233;e dans un tableau d'association. Si l'adresse IP est utilis&#233;e dans une directive NameVirtualHost, la liste contient tous les vhosts bas&#233;s sur le nom pour l'adresse ip correspondante. S'il n'y a pas de vhosts d&#233;finie pour l'adresse en question, la directive NameVirtualHost est ignor&#233;e et l'erreur logg&#233;e. Pour un vhost bas&#233; sur l'ip, la liste d'association est vide.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Gr&#226;ce &#224; la grande vitesse de la fonction de recherche d'association, lors d'une requ&#234;te le temps n&#233;cessaire pour trouver les vhosts correspondants est minimal et quasiment inexistant. De plus, il est interressant de noter que la table est optimis&#233;e pour les adresses ip variant sur le dernier octet.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Pour chaque vhost, plusieurs valeurs par d&#233;faut sont d&#233;finies. En particulier :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li class=&quot;spip&quot;&gt; Si un vhost n'a pas de directive ServerAdmin [&lt;a href=&quot;http://geekz.fr/#nb7-15&quot; name=&quot;nh7-15&quot; id=&quot;nh7-15&quot; class=&quot;spip_note&quot; title='[15] http://httpd.apache.org/docs/2.0/mod/core.html#serveradmin' &gt;15&lt;/a&gt;], ResourceConfig [&lt;a href=&quot;http://geekz.fr/#nb7-16&quot; name=&quot;nh7-16&quot; id=&quot;nh7-16&quot; class=&quot;spip_note&quot; title='[16] http://httpd.apache.org/docs/2.0/fr/mod/core.html#resourceconfig' &gt;16&lt;/a&gt;], AccessConfig [&lt;a href=&quot;http://geekz.fr/#nb7-17&quot; name=&quot;nh7-17&quot; id=&quot;nh7-17&quot; class=&quot;spip_note&quot; title='[17] http://httpd.apache.org/docs/2.0/fr/mod/core.html#accessconfig' &gt;17&lt;/a&gt;], Timeout [&lt;a href=&quot;http://geekz.fr/#nb7-18&quot; name=&quot;nh7-18&quot; id=&quot;nh7-18&quot; class=&quot;spip_note&quot; title='[18] http://httpd.apache.org/docs/2.0/fr/mod/core.html#timeout' &gt;18&lt;/a&gt;], KeepAliveTimeout [&lt;a href=&quot;http://geekz.fr/#nb7-19&quot; name=&quot;nh7-19&quot; id=&quot;nh7-19&quot; class=&quot;spip_note&quot; title='[19] http://httpd.apache.org/docs/2.0/fr/mod/core.html#keepalivetimeout' &gt;19&lt;/a&gt;], KeepAlive [&lt;a href=&quot;http://geekz.fr/#nb7-20&quot; name=&quot;nh7-20&quot; id=&quot;nh7-20&quot; class=&quot;spip_note&quot; title='[20] http://httpd.apache.org/docs/2.0/fr/mod/core.html#keepalive' &gt;20&lt;/a&gt;], MaxKeepAliveRequests [&lt;a href=&quot;http://geekz.fr/#nb7-21&quot; name=&quot;nh7-21&quot; id=&quot;nh7-21&quot; class=&quot;spip_note&quot; title='[21] http://httpd.apache.org/docs/2.0/fr/mod/core.html#maxkeepaliverequests' &gt;21&lt;/a&gt;], ReceiveBufferSize [&lt;a href=&quot;http://geekz.fr/#nb7-22&quot; name=&quot;nh7-22&quot; id=&quot;nh7-22&quot; class=&quot;spip_note&quot; title='[22] http://httpd.apache.org/docs/2.0/fr/mod/core.html#receivebuffersize' &gt;22&lt;/a&gt;] ou encore senBufferSize [&lt;a href=&quot;http://geekz.fr/#nb7-23&quot; name=&quot;nh7-23&quot; id=&quot;nh7-23&quot; class=&quot;spip_note&quot; title='[23] http://httpd.apache.org/docs/2.0/fr/mod/core.html#sendbuffersize' &gt;23&lt;/a&gt;] alors les valeurs du serveur principal sont respectivement h&#233;rit&#233;es et ce, peu importe la valeur h&#233;rit&#233;e.&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; Les valeurs par d&#233;faut qui d&#233;finissent les permissions pour un vhost sont mix&#233;es avec celles du serveur principal. Ceci inclut chaque information de configuration par r&#233;pertoire pour chaque module.&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; Les configurations par serveur pour chaque module du serveur principal sont mix&#233;es dans le vhost.&lt;/li&gt;&lt;/ul&gt;
&lt;p class=&quot;spip&quot;&gt;De fa&#231;on g&#233;n&#233;rale, le serveur principa est trait&#233; comme &quot;d&#233;faut&quot; ou une &quot;base&quot; sur laquelle construire un vhost. Mais la position des d&#233;finitions de ce serveur principal n'est pas significative, car la configuration enti&#232;re du server principal &#224; &#233;t&#233; analys&#233;e au moment ou le fusionnement final &#224; lieu. Donc, peu importe si une d&#233;finition relative au serveur principal appara&#238;t apr&#232;s une d&#233;finition d'un vhost, cela pourrait appliquer la d&#233;finition du vhost.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Si le serveur principal n'a pas de &lt;code class='spip_code' dir='ltr'&gt;ServerName&lt;/code&gt; &#224; ce moment, alors le nom de la machine sur lequel httpd est en fonctionnement sera utilis&#233;e &#224; la place. Nous appelerons le jeu d'adresses IP du serveur principal les adresses retourn&#233;es par une r&#233;solution DNS sur le &lt;code class='spip_code' dir='ltr'&gt;ServerName&lt;/code&gt; du serveur principal.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Chaque fois qu'une directive &lt;code class='spip_code' dir='ltr'&gt;ServerName&lt;/code&gt; n'est pas d&#233;finie, un vhost bas&#233; sur le nom re&#231;oit l'adresse donn&#233;e dans la directive &lt;VirtualHost&gt; d&#233;finissant le vhost.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Chaque vhost incluant le mot magique &lt;code class='spip_code' dir='ltr'&gt;_default_&lt;/code&gt; re&#231;oit la m&#234;me valeur de &lt;ServerName&gt; que le server principal.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;2 M&#233;thode de d&#233;termination du virtual host&lt;/strong&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Le serveur d&#233;termine quel vhost utiliser de la fa&#231;on suivante :&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;i class=&quot;spip&quot;&gt;2.1 Consultation du tableau d'association&lt;/i&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Lorsque la connection est &#233;tablie par un client, l'adresse ip sur laquelle c'est connect&#233;e le client est recherch&#233;e dans le tableau d'association.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Si la recherche &#233;choue (l'adresse Ip n'a pas &#233;t&#233; trouv&#233;e), la requ&#234;te est trait&#233;e par le vhost _default_ s'il n'y a pas un tel vhost pour le port sur lequel le client &#224; envoy&#233; la requ&#234;te. S'il n'y a pas de vhost _default_, la requ&#234;te est trait&#233;e par le serveur principal.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Si l'adresse IP n'est pas trouv&#233;e dans le tableau d'association, alors la correspondance par rapport au num&#233;ro de port peut &#233;galement r&#233;sulter en un r&#233;sultat correspondant &#224; &lt;code class='spip_code' dir='ltr'&gt;NameVirtualHost *&lt;/code&gt;, qui est g&#233;r&#233;e comme un autre vhost bas&#233; sur le nom.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Si la recherche c'est d&#233;roul&#233;e avec succ&#232;s, (une liste correspondante pour l'adresse ip &#224; &#233;t&#233; trouv&#233;e), la prochaine &#233;tape est de d&#233;cider si l'on &#224; a faire avec un vhost bas&#233; sur le nom ou &#224; un vhost bas&#233; sur l'ip.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;i class=&quot;spip&quot;&gt;2.2 Vhost bas&#233; sur l'ip&lt;/i&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Si l'entr&#233;e que l'on a trouv&#233; a une liste de noms vide, alors nous avons trouv&#233; un vhost bas&#233; sur le nom, et aucune action suppl&#233;mentaire n'est n&#233;cessaire et la requ&#234;te est trait&#233;e par le vhost.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;i class=&quot;spip&quot;&gt;2.3 Vhost bas&#233; sur le nom&lt;/i&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Si l'entr&#233;e correspond a un vhost bas&#233; sur le nom, la liste de noms contient une ou plusieures structures de vhost. Cette ligne contient les vhosts dans le m&#234;me ordre que l'order selon lequel les directives VirtualHost apparaissent dans le fichier de configuration.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Le premier vhost sur la list (le premier vhost dans le fichier avec l'adresse IP sp&#233;cifi&#233;e) &#224; la plus haute priorit&#233; et re&#231;oit toutes les requ&#234;tes destin&#233;es &#224; un serveur inconnu du syst&#232;me ou aux requ&#234;tes sans header &lt;code class='spip_code' dir='ltr'&gt;Host:&lt;/code&gt;.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Si le client a fourni un header &lt;code class='spip_code' dir='ltr'&gt;Host:&lt;/code&gt;, la liste est parcourue pour un vhost correspondant et le premier hit sur un &lt;code class='spip_code' dir='ltr'&gt;ServerName&lt;/code&gt; ou &lt;code class='spip_code' dir='ltr'&gt;ServerAlias&lt;/code&gt; est pris et la requ&#234;te sera trait&#233;e &#224; partir du dit vhost. Un header &lt;code class='spip_code' dir='ltr'&gt;Host:&lt;/code&gt; peut contenir un num&#233;ro de port, mais Apache &#233;tablit toujours une correspondance avec le port r&#233;el auquel le client &#224; envoy&#233; la requ&#234;te.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Si le client &#224; envoy&#233; une requete &lt;code class='spip_code' dir='ltr'&gt;HTTP/1.0&lt;/code&gt; sans header &lt;code class='spip_code' dir='ltr'&gt;Host:&amp;lt;code&amp;gt;, nous ne savons pas &#224; quel serveur le client &#224; essay&#233; de se connecter et chaque &amp;lt;code&amp;gt;ServerPath&lt;/code&gt; est analys&#233; pour voir s'il correspond &#224; l'URI de la requ&#234;te. Le premier chemin correspondant dans la liste est utilis&#233; et la requ&#234;te sera trait&#233;e par le vhost correspondant.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Si aucun vhost correspondant n'a &#233;t&#233; trouv&#233;, la requ&#234;te est trait&#233;e par le premier vhost avec un num&#233;ro de port correspondant qui est dans la liste sur l'IP &#224; laquelle le client c'est connect&#233; (comme mentionn&#233; plus t&#244;t).&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;i class=&quot;spip&quot;&gt;2.4 Connections persistantes&lt;/i&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;La recherche IP d&#233;crite plus haut est uniquement faite une fois pour une session TCP/IP particuli&#232;re alors que la recherche de noms est faite &#224; chaque requ&#234;te pendant une connection &lt;code class='spip_code' dir='ltr'&gt;KeepAlive/persistante&lt;/code&gt;. En d'autres termes un client peut demander des pages de diff&#233;rents vhosts bas&#233;s sur le nom pendant une connection persistante unique.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;i class=&quot;spip&quot;&gt;2.5 URI Absolue&lt;/i&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Si l'URI de la requ&#234;te est une URI absolue, et son nom d'h&#244;te et port correspondent au serveur principal ou un des vhosts configur&#233; correspond &#224; l'adresse et au port &#224; laquelle le client &#224; envoy&#233; la requ&#234;te, alors le schema/nom d'h&#244;te/prefixe est supprim&#233; et l'URI relative restante est trait&#233;e par le serveur principal ou le vhost correspondant. Si cela ne fonctionne pas, alors l'URI reste inchang&#233;e et la requ&#234;te est prise comme une requ&#234;te de proxy.&lt;/p&gt; &lt;hr class=&quot;spip&quot; /&gt;
&lt;h3 class=&quot;spip&quot;&gt;Mise en place de vhosts&lt;/h3&gt;
&lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;1. Vhosts bas&#233;s sur le nom&lt;/strong&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;i class=&quot;spip&quot;&gt;1.1 Syntaxe&lt;/i&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Apr&#232;s avoir install&#233; et configur&#233; votre apache comme indiqu&#233; plus haut, il est maintenant temps de cr&#233;er vos vhosts. Pour ce faire, apache loade sous gentoo tous les fichiers de configuration finissant en &lt;code class='spip_code' dir='ltr'&gt;.conf&lt;/code&gt; dans le r&#233;pertoire &lt;code class='spip_code' dir='ltr'&gt;/etc/apache2/vhosts.d/&lt;/code&gt; [&lt;a href=&quot;http://geekz.fr/#nb7-24&quot; name=&quot;nh7-24&quot; id=&quot;nh7-24&quot; class=&quot;spip_note&quot; title='[24] Si ce n&amp;#39;est pas le cas, ajoutez Include /etc/apache2/vhosts.d/*.conf' &gt;24&lt;/a&gt;].&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Les directives et param&#232;tres syntaxiques principaux d'un vhost sont les suivants :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li class=&quot;spip&quot;&gt; &lt;a href=&quot;http://httpd.apache.org/docs/2.0/mod/core.html#documentroot&quot; class=&quot;spip_out&quot;&gt;DocumentRoot&lt;/a&gt; : correspond au chemin ou sont stock&#233;s les fichiers de votre site web&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; &lt;a href=&quot;http://httpd.apache.org/docs/2.0/mod/core.html#namevirtualhost&quot; class=&quot;spip_out&quot;&gt;NameVirtualHost&lt;/a&gt; &lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; &lt;a href=&quot;http://httpd.apache.org/docs/2.0/mod/core.html#serveralias&quot; class=&quot;spip_out&quot;&gt;ServerAlias&lt;/a&gt; : correspond aux noms secondaires auxquels le serveur virtuel r&#233;ponds aux requ&#234;tes lui &#233;tant adress&#233;es&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; &lt;a href=&quot;http://httpd.apache.org/docs/2.0/mod/core.html#servername&quot; class=&quot;spip_out&quot;&gt;ServerName&lt;/a&gt; : nom principal auquel le serveur virtuel r&#233;pond aux requ&#234;tes lui &#233;tant adress&#233;es&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; &lt;a href=&quot;http://httpd.apache.org/docs/2.0/mod/core.html#serverpath&quot; class=&quot;spip_out&quot;&gt;ServerPath&lt;/a&gt; : facultatif, utilis&#233; pour les anciens browsers [&lt;a href=&quot;http://geekz.fr/#nb7-25&quot; name=&quot;nh7-25&quot; id=&quot;nh7-25&quot; class=&quot;spip_note&quot; title='[25] ceux qui n&amp;#39;envoient pas de header Host: dans leur (...)' &gt;25&lt;/a&gt;]&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; &lt;a href=&quot;http://httpd.apache.org/docs/2.0/mod/core.html#virtualhost&quot; class=&quot;spip_out&quot;&gt;&lt;VirtualHost&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p class=&quot;spip&quot;&gt;La configuration d'un vhost est relativement ais&#233;e, en utilisant un minimum de param&#232;tres, on arrive a un syst&#232;me fonctionnel&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;br /&gt; &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt; ServerName www2.wearegeeks.info&lt;br /&gt; ServerAlias www3.wearegeeks.info www4.wearegeeks.info&lt;br /&gt; DocumentRoot /var/www/www2.wearegeeks.info/htdocs&lt;br /&gt; ErrorLog /var/www/www2.wearegeeks.info/logs/error.log&lt;br /&gt; CustomLog /var/www/www2.wearegeeks.info/logs/access.log combined&lt;br /&gt; &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;&lt;code class='spip_code' dir='ltr'&gt;ErrorLog&lt;/code&gt; est un fichier contenant les erreurs &#233;ventuelles que pourrait rencontrer le vhost.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;code class='spip_code' dir='ltr'&gt;CustomLog&lt;/code&gt; est un fichier qui contient les logs d'acc&#232;s au site web, utilisables par awstats.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Pour configurer un autre vhost, ajoutez simplement &#224; la suite du premier vhost un autre une nouvelle configuration utilisant la m&#234;me syntaxe que le premier.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;i class=&quot;spip&quot;&gt;1.2 D&#233;marrage et outils utiles&lt;/i&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Dans un environnement de production, il est vraiment important d'&#233;viter les downtime et donc &#224; chaque modification du fichier de configuration, il est important de v&#233;rifier que la syntaxe du fichier de configuration est correcte car sinon apache risque de ne pas vouloir d&#233;marrer.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Et c'est pour cette raison que les gentils devs d'apache ont inclu un outil pour manipuler le serveur qui se nomme &lt;code class='spip_code' dir='ltr'&gt;apache2ctl&lt;/code&gt; [&lt;a href=&quot;http://geekz.fr/#nb7-26&quot; name=&quot;nh7-26&quot; id=&quot;nh7-26&quot; class=&quot;spip_note&quot; title='[26] http://httpd.apache.org/docs/2.0/programs/apachectl.html' &gt;26&lt;/a&gt;] [&lt;a href=&quot;http://geekz.fr/#nb7-27&quot; name=&quot;nh7-27&quot; id=&quot;nh7-27&quot; class=&quot;spip_note&quot; title='[27] Pour les versions 1.3 du fichier de configuration, c&amp;#39;est (...)' &gt;27&lt;/a&gt;].&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Pour tester la validit&#233; du fichier de configuration que nous venons de cr&#233;er plus haut, tapons simplement &lt;code class='spip_code' dir='ltr'&gt;apache2ctl configtest&lt;/code&gt; et nous nous apercevons que nous avons b&#234;tement omis de cr&#233;er le r&#233;pertoire ou doivent &#234;tre stock&#233;s les fichiers du site web [&lt;a href=&quot;http://geekz.fr/#nb7-28&quot; name=&quot;nh7-28&quot; id=&quot;nh7-28&quot; class=&quot;spip_note&quot; title='[28] Il est toutefois interressant de noter que ce n&amp;#39;est qu&amp;#39;un (...)' &gt;28&lt;/a&gt;] !&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;anubis ~ # apache2ctl configtest&lt;br /&gt; Warning: DocumentRoot [/var/www/www2.wearegeeks.info/htdocs] does not exist&lt;br /&gt; Syntax OK&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Il ne nous reste plus qu'&#224; cr&#233;er les dossiers htdocs et logs avec les propri&#233;taires ad&#233;quats [&lt;a href=&quot;http://geekz.fr/#nb7-29&quot; name=&quot;nh7-29&quot; id=&quot;nh7-29&quot; class=&quot;spip_note&quot; title='[29] Sous gentoo l&amp;#39;utilisateur utilis&#233; par apache s&amp;#39;appelle (...)' &gt;29&lt;/a&gt;] :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;anubis ~ # mkdir -p /var/www/www2.wearegeeks.info/htdocs /var/www/www2.wearegeeks.info/logs &lt;br /&gt; anubis ~ # chown -R apache:apache /var/www/www2.wearegeeks.info&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Nous voyons maintenant que le test de configuration d'&lt;code class='spip_code' dir='ltr'&gt;apache2ctl&lt;/code&gt; ne nous retourne plus d'erreur :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;anubis ~ # apache2ctl configtest&lt;br /&gt; Syntax OK&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Maintenant que nous nous sommes assur&#233;s que la configuration est correcte, il est possible pour des modifications mineures, comme l'ajout d'un vhost, de simplement recharger la configuration en tapant la configuration &lt;code class='spip_code' dir='ltr'&gt;apache2ctl graceful&lt;/code&gt;. Votre modification est maintenant active.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Apr&#232;s avoir plac&#233; les fichiers de notre site web sur le serveur, nous voyons dans les logs que nous acc&#233;dons bien au vhost en question :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;192.168.100.100 - - [11/Sep/2007:23:11:17 +0200] &quot;GET / HTTP/1.1&quot; 200 - &quot;-&quot; &quot;Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6&quot;&lt;br /&gt; 192.168.100.100 - - [11/Sep/2007:23:11:21 +0200] &quot;GET / HTTP/1.1&quot; 200 - &quot;-&quot; &quot;Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6&quot;&lt;br /&gt; 192.168.100.100 - - [11/Sep/2007:23:11:23 +0200] &quot;GET / HTTP/1.1&quot; 200 - &quot;-&quot; &quot;Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6&quot;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Avec &lt;code class='spip_code' dir='ltr'&gt;apache2ctl&lt;/code&gt;, les fonctions principales sont &lt;code class='spip_code' dir='ltr'&gt;start&lt;/code&gt; et &lt;code class='spip_code' dir='ltr'&gt;stop&lt;/code&gt; permettant comme leur nom l'indique de stopper et d&#233;marrer le serveur.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;i class=&quot;spip&quot;&gt;1.3 Options annexes&lt;/i&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Voici une vue rapide et non exhaustive des options annexes qu'il est possible de configurer dans la d&#233;finition de votre vhost :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li class=&quot;spip&quot;&gt; &lt;a href=&quot;http://httpd.apache.org/docs/2.0/mod/core.html#serveradmin&quot; class=&quot;spip_out&quot;&gt;ServerAdmin&lt;/a&gt; permettant de sp&#233;cifier l'adresse email de l'administrateur du vhost. Ceci n'est g&#233;n&#233;ralement pas utilis&#233; car cette adresse n'est pas affich&#233;e avec notre configuration de &lt;code class='spip_code' dir='ltr'&gt;ServerTokens&lt;/code&gt; globale.&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; &lt;a href=&quot;http://httpd.apache.org/docs/2.0/mod/core.html#servertokens&quot; class=&quot;spip_out&quot;&gt;ServerTokens&lt;/a&gt; permettant de red&#233;finir localement la verbosit&#233; du vhost concernant les informations sur la version d'apache et la configuration du syst&#232;me. &lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; &lt;a href=&quot;http://httpd.apache.org/docs/2.0/mod/core.html#rlimitcpu&quot; class=&quot;spip_out&quot;&gt;RLimitCPU&lt;/a&gt; : permet de limiter la consommation en terme d'utilisation processeur du vhost&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; &lt;a href=&quot;http://httpd.apache.org/docs/2.0/mod/core.html#rlimitmem&quot; class=&quot;spip_out&quot;&gt;RLimitMEM&lt;/a&gt; : permet de limiter la consommation en terme de m&#233;moire utilis&#233;e du vhost&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; &lt;a href=&quot;http://httpd.apache.org/docs/2.0/mod/core.html#rlimitnproc&quot; class=&quot;spip_out&quot;&gt;RLimitPROC&lt;/a&gt; : permet de limiter le nombre de process enfants cr&#233;&#233;s pour le vhost&lt;/li&gt;&lt;/ul&gt;
&lt;p class=&quot;spip&quot;&gt;Il est &#233;galement interressant de noter l'existance de la possibilit&#233; de red&#233;finir pour un vhost des valeurs de la configuration de php via la directive &lt;a href=&quot;http://www.php.net/configuration.changes&quot; class=&quot;spip_out&quot;&gt;&lt;code class='spip_code' dir='ltr'&gt;php_admin_value&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Cette fonctionnalit&#233; est interressante pour limiter les valeurs d'&lt;code class='spip_code' dir='ltr'&gt;open_basedir&lt;/code&gt; ou de &lt;code class='spip_code' dir='ltr'&gt;session.save_path&lt;/code&gt; afin de bien s&#233;parer les vhosts. Toutefois libre &#224; vous de configurer chacune des &lt;a href=&quot;http://www.php.net/manual/en/ini.php&quot; class=&quot;spip_out&quot;&gt;directives du fichier php.ini&lt;/a&gt;.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Attention toutefois &#224; ne pas compromettre la s&#233;curit&#233; de votre hosting en configurant &lt;code class='spip_code' dir='ltr'&gt;safe_mode&lt;/code&gt; &#224; &lt;code class='spip_code' dir='ltr'&gt;on&lt;/code&gt; et &lt;code class='spip_code' dir='ltr'&gt;register_globals&lt;/code&gt; &#224; &lt;code class='spip_code' dir='ltr'&gt;on&lt;/code&gt;.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;2. Vhosts bas&#233;s sur l'IP&lt;/strong&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Pour mettre en place un serveur virtuel bas&#233; sur l'ip, rien de plus simple, il suffit d'avoir un demon par adresse IP.
Pour chaque installation, il faut sp&#233;cifier la directive &lt;code class='spip_code' dir='ltr'&gt;Listen&lt;/code&gt; comme par exemple &lt;code class='spip_code' dir='ltr'&gt; Listen www2.wearegeeks.info:80&lt;/code&gt;.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Pour &#233;viter les probl&#232;mes de dns, il vaut mieux configurer les vhosts bas&#233;s sur le nom de la m&#234;me fa&#231;on que pour les vhosts nomm&#233;s :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt; &amp;lt;VirtualHost 127.0.0.1&amp;gt;&lt;br /&gt; ServerName www2.wearegeeks.info&lt;br /&gt; ServerAdmin benjamin@wearegeeks.info&lt;br /&gt; DocumentRoot /var/www/www2.wearegeeks.info/htdocs&lt;br /&gt; &amp;lt;/VirtualHost&amp;gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Ce qui pr&#233;sente l'avantage de contrer les probl&#232;mes lors du d&#233;marrage d'apache car si l'on sp&#233;cifie un nom de domaine a la place de l'adresse IP dans la directive &lt;code class='spip_code' dir='ltr'&gt;&amp;lt;VirtualHost &amp;gt;&lt;/code&gt;, il y a des risques que si le nom de domaine correspond a une adresse ip ne correspondant pas &#224; l'IP du vhost bas&#233; sur l'IP, le service ne d&#233;marre pas.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Sp&#233;cifier la directive &lt;code class='spip_code' dir='ltr'&gt;ServerName&lt;/code&gt; est interressant car si elle est omise, apache effectuera une recherche DNS inverse sur l'adresse IP et affectera le nom d'hote correspondant a l'enregistrement PTR au vhost, ce qui n'est pas toujours souhaitable car il n'est pas toujours possible de sp&#233;cifier un PTR (c'est g&#233;n&#233;ralement le fournisseur d'acc&#232;s &#224; l'internet qui a acc&#232;s &#224; la zone correspondante).&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://geekz.fr/#nh7-1&quot; name=&quot;nb7-1&quot; class=&quot;spip_note&quot; title=&quot;Notes 7-1&quot;&gt;1&lt;/a&gt;] H&#244;te virtuel&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://geekz.fr/#nh7-2&quot; name=&quot;nb7-2&quot; class=&quot;spip_note&quot; title=&quot;Notes 7-2&quot;&gt;2&lt;/a&gt;] http://httpd.apache.org/docs/2.0/mod/worker.html&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://geekz.fr/#nh7-3&quot; name=&quot;nb7-3&quot; class=&quot;spip_note&quot; title=&quot;Notes 7-3&quot;&gt;3&lt;/a&gt;] Secure Sockets Layer, pour couche de sockets s&#233;curis&#233;s&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://geekz.fr/#nh7-4&quot; name=&quot;nb7-4&quot; class=&quot;spip_note&quot; title=&quot;Notes 7-4&quot;&gt;4&lt;/a&gt;] Transport Layer Security, pour s&#233;curit&#233; sur la couche transport&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://geekz.fr/#nh7-5&quot; name=&quot;nb7-5&quot; class=&quot;spip_note&quot; title=&quot;Notes 7-5&quot;&gt;5&lt;/a&gt;] Rs veut dire fonctionnant et est un leader de session&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://geekz.fr/#nh7-6&quot; name=&quot;nb7-6&quot; class=&quot;spip_note&quot; title=&quot;Notes 7-6&quot;&gt;6&lt;/a&gt;] S veut dire que le processus est en &#233;tat d'attente interruptible, comprennez par la qu'il attend des connections ou un signal&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://geekz.fr/#nh7-7&quot; name=&quot;nb7-7&quot; class=&quot;spip_note&quot; title=&quot;Notes 7-7&quot;&gt;7&lt;/a&gt;] S veut dire que le processus est en &#233;tat d'attente interruptible, comprennez par la qu'il attend des connections ou un signal, l signifique le processus est multi thread&#233;&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://geekz.fr/#nh7-8&quot; name=&quot;nb7-8&quot; class=&quot;spip_note&quot; title=&quot;Notes 7-8&quot;&gt;8&lt;/a&gt;] Si vous fonctionnez dans un environnement de test, vous pouvez simuler un hostname pour ce serveur en ajoutant une entr&#233;e dans le fichier host (/etc/hosts sous linux ou %systemroot%\system32\drivers\etc\hosts) de la machine se connectant au serveur&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://geekz.fr/#nh7-9&quot; name=&quot;nb7-9&quot; class=&quot;spip_note&quot; title=&quot;Notes 7-9&quot;&gt;9&lt;/a&gt;] http://httpd.apache.org/docs/2.0/mod/mpm_common.html#listen&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://geekz.fr/#nh7-10&quot; name=&quot;nb7-10&quot; class=&quot;spip_note&quot; title=&quot;Notes 7-10&quot;&gt;10&lt;/a&gt;] http://httpd.apache.org/docs/2.0/mod/core.html#servername&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://geekz.fr/#nh7-11&quot; name=&quot;nb7-11&quot; class=&quot;spip_note&quot; title=&quot;Notes 7-11&quot;&gt;11&lt;/a&gt;] http://httpd.apache.org/docs/2.0/mod/core.html#serverpath&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://geekz.fr/#nh7-12&quot; name=&quot;nb7-12&quot; class=&quot;spip_note&quot; title=&quot;Notes 7-12&quot;&gt;12&lt;/a&gt;] http://httpd.apache.org/docs/2.0/mod/core.html#serverpath&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://geekz.fr/#nh7-13&quot; name=&quot;nb7-13&quot; class=&quot;spip_note&quot; title=&quot;Notes 7-13&quot;&gt;13&lt;/a&gt;] CNAME&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://geekz.fr/#nh7-14&quot; name=&quot;nb7-14&quot; class=&quot;spip_note&quot; title=&quot;Notes 7-14&quot;&gt;14&lt;/a&gt;] Mais ces noms ne sont pas &#233;cras&#233;s par des d&#233;clarations ServerAlias&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://geekz.fr/#nh7-15&quot; name=&quot;nb7-15&quot; class=&quot;spip_note&quot; title=&quot;Notes 7-15&quot;&gt;15&lt;/a&gt;] http://httpd.apache.org/docs/2.0/mod/core.html#serveradmin&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://geekz.fr/#nh7-16&quot; name=&quot;nb7-16&quot; class=&quot;spip_note&quot; title=&quot;Notes 7-16&quot;&gt;16&lt;/a&gt;] http://httpd.apache.org/docs/2.0/fr/mod/core.html#resourceconfig&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://geekz.fr/#nh7-17&quot; name=&quot;nb7-17&quot; class=&quot;spip_note&quot; title=&quot;Notes 7-17&quot;&gt;17&lt;/a&gt;] http://httpd.apache.org/docs/2.0/fr/mod/core.html#accessconfig&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://geekz.fr/#nh7-18&quot; name=&quot;nb7-18&quot; class=&quot;spip_note&quot; title=&quot;Notes 7-18&quot;&gt;18&lt;/a&gt;] http://httpd.apache.org/docs/2.0/fr/mod/core.html#timeout&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://geekz.fr/#nh7-19&quot; name=&quot;nb7-19&quot; class=&quot;spip_note&quot; title=&quot;Notes 7-19&quot;&gt;19&lt;/a&gt;] http://httpd.apache.org/docs/2.0/fr/mod/core.html#keepalivetimeout&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://geekz.fr/#nh7-20&quot; name=&quot;nb7-20&quot; class=&quot;spip_note&quot; title=&quot;Notes 7-20&quot;&gt;20&lt;/a&gt;] http://httpd.apache.org/docs/2.0/fr/mod/core.html#keepalive&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://geekz.fr/#nh7-21&quot; name=&quot;nb7-21&quot; class=&quot;spip_note&quot; title=&quot;Notes 7-21&quot;&gt;21&lt;/a&gt;] http://httpd.apache.org/docs/2.0/fr/mod/core.html#maxkeepaliverequests&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://geekz.fr/#nh7-22&quot; name=&quot;nb7-22&quot; class=&quot;spip_note&quot; title=&quot;Notes 7-22&quot;&gt;22&lt;/a&gt;] http://httpd.apache.org/docs/2.0/fr/mod/core.html#receivebuffersize&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://geekz.fr/#nh7-23&quot; name=&quot;nb7-23&quot; class=&quot;spip_note&quot; title=&quot;Notes 7-23&quot;&gt;23&lt;/a&gt;] http://httpd.apache.org/docs/2.0/fr/mod/core.html#sendbuffersize&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://geekz.fr/#nh7-24&quot; name=&quot;nb7-24&quot; class=&quot;spip_note&quot; title=&quot;Notes 7-24&quot;&gt;24&lt;/a&gt;] Si ce n'est pas le cas, ajoutez &lt;code class='spip_code' dir='ltr'&gt;Include /etc/apache2/vhosts.d/*.conf&lt;/code&gt; en bas de votre fichier de configuration &lt;code class='spip_code' dir='ltr'&gt;/etc/apache2/httpd.conf&lt;/code&gt;&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://geekz.fr/#nh7-25&quot; name=&quot;nb7-25&quot; class=&quot;spip_note&quot; title=&quot;Notes 7-25&quot;&gt;25&lt;/a&gt;] ceux qui n'envoient pas de header &lt;code class='spip_code' dir='ltr'&gt;Host:&lt;/code&gt; dans leur requ&#234;tes&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://geekz.fr/#nh7-26&quot; name=&quot;nb7-26&quot; class=&quot;spip_note&quot; title=&quot;Notes 7-26&quot;&gt;26&lt;/a&gt;] http://httpd.apache.org/docs/2.0/programs/apachectl.html&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://geekz.fr/#nh7-27&quot; name=&quot;nb7-27&quot; class=&quot;spip_note&quot; title=&quot;Notes 7-27&quot;&gt;27&lt;/a&gt;] Pour les versions &lt;1.3 du fichier de configuration, c'est apachectl&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://geekz.fr/#nh7-28&quot; name=&quot;nb7-28&quot; class=&quot;spip_note&quot; title=&quot;Notes 7-28&quot;&gt;28&lt;/a&gt;] Il est toutefois interressant de noter que ce n'est qu'un warning&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://geekz.fr/#nh7-29&quot; name=&quot;nb7-29&quot; class=&quot;spip_note&quot; title=&quot;Notes 7-29&quot;&gt;29&lt;/a&gt;] Sous gentoo l'utilisateur utilis&#233; par apache s'appelle apache ...&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_ps'&gt;Il y a tellement a dire encore ... mais ceci est un base utile permettant de cr&#233;er vos vhosts&lt;/div&gt;
		</content:encoded>


		

	</item>



	<item>
		<title>Mise en oeuvre d'IPv6 sous Linux</title>
		<link>http://geekz.fr/Mise-en-oeuvre-d-IPv6-sous-Linux</link>
		<guid isPermaLink="true">http://geekz.fr/Mise-en-oeuvre-d-IPv6-sous-Linux</guid>
		<dc:date>2007-09-07T20:21:41Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Dumble</dc:creator>

<category domain="http://geekz.fr/-IPv6-">IPv6</category>


		<description>Cet article d&#233;crit la mise en &#339;uvre de base du protocole IPv6 sous Linux

-
&lt;a href="http://geekz.fr/-IPv6-" rel="directory"&gt;IPv6&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;Le support d'IPv6 dans le noyau Linux a &#233;t&#233; impl&#233;ment&#233; pour la premi&#232;re fois dans un noyau de la s&#233;rie 2.2. Sans que je puisse le garantir, les manipulations pr&#233;sent&#233;es ci-apr&#232;s devraient fonctionner sans probl&#232;me sur un noyau 2.4 avec peut-&#234;tre quelques adaptations.&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h3 class=&quot;spip&quot;&gt;Mise en oeuvre sur un syst&#232;me Linux 2.6&lt;/h3&gt;
&lt;p class=&quot;spip&quot;&gt;Le support d'IPv6 dans le noyau Linux a &#233;t&#233; impl&#233;ment&#233; pour la premi&#232;re fois dans un noyau de la s&#233;rie 2.2. Sans que je puisse le garantir, les manipulations pr&#233;sent&#233;es ci-apr&#232;s devraient fonctionner sans probl&#232;me sur un noyau 2.4 avec peut-&#234;tre quelques adaptations.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;Ajout du support du protocole IPv6 dans le noyau&lt;/strong&gt;&lt;br /&gt;
Le noyau fourni par la plupart des distributions modernes offre le support de l'IPv6. Pour vous en assurer, il suffit, en tant que super-utilisateur (root) de saisir les commandes suivantes :&lt;/p&gt; &lt;pre&gt; modprobe ipv6 ifconfig | grep inet6
&lt;/pre&gt;
&lt;p class=&quot;spip&quot;&gt;Si la deuxi&#232;me commande affiche quelque chose, c'est que le support est activ&#233;, sinon, il faudra recompiler le noyau.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;i class=&quot;spip&quot;&gt;Options du noyau&lt;/i&gt;&lt;br /&gt;
Sur un noyau 2.6, les options relatives &#224; IPv6 se trouvent dans :&lt;/p&gt; &lt;pre&gt;
Device Drivers ---&gt; Networking Support ---&gt; Networking Options ---&gt;
&lt;/pre&gt;
&lt;p class=&quot;spip&quot;&gt;Les options &#224; activer sont :&lt;/p&gt;
&lt;ul&gt; &lt;li&gt;The IPv6 Protocol : Activation de la pile IPv6&lt;/li&gt; &lt;li&gt; IPv6 : Privacy Extensions (RFC 3041) support : Activation du syst&#232;me d'autoconfiguration&lt;/li&gt; &lt;li&gt; IPv6 : Router Preference (RFC 4191) support : Support pour les informations avanc&#233;es des routeurs&lt;/li&gt; &lt;li&gt; IPv6 : Route Information (RFC 4191) support&lt;/li&gt; &lt;li&gt; IPv6 : AH transformation : Support pour l'authentification IPSec&lt;/li&gt; &lt;li&gt; IPv6 : ESP transformation : Support pour le cryptage IPSec&lt;/li&gt; &lt;li&gt; IPv6 : IPComp transformation : Support pour la compression des donn&#233;es pour IPSec&lt;/li&gt; &lt;li&gt; IPv6 : tunnel transformation : Support pour la cr&#233;ation de tunnels IPv6 dans IPv6&lt;/li&gt; &lt;li&gt; IPv6 : IPv6-in-IPv4 tunnel : Support pour la cr&#233;ation de tunnels IPv6 dans IPv4&lt;/li&gt; &lt;li&gt; IPv6 : IPv6-in-IPv6 tunnel : Support pour la cr&#233;ation de tunnels IPv6 dans IPv6&lt;/li&gt; &lt;li&gt; IPv6 : Mobility : Support de la mobilit&#233;&lt;/li&gt; &lt;li&gt; IPv6 : IPsec transport mode : Support pour le mode transport d'IPSec&lt;/li&gt; &lt;li&gt; IPv6 : IPsec tunnel mode : Support pour le mode tunnel d'IPSec&lt;/li&gt; &lt;li&gt; IPv6 : IPsec BEET mode : Support du mode BEET d'IPSec&lt;/li&gt; &lt;li&gt; IPv6 : MIPv6 route optimization mode : Syst&#232;me d'optimisation des routes&lt;/li&gt; &lt;li&gt; IPv6 : Multiple Routing Tables&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;spip&quot;&gt;Pour l'activation de la version IPv6 de NetFilter (le firewall de Linux), il faut activer les options qui se trouvent dans :&lt;/p&gt; &lt;pre&gt; Device Drivers ---&gt; Networking Support ---&gt; Networking Options ---&gt; Network packet filtering ---&gt; IPv6 : Netfilter Configuration ---&gt;
&lt;/pre&gt;
&lt;p class=&quot;spip&quot;&gt;Une fois ces options activ&#233;es (en module ou en dur), il suffit de recompiler le noyau &#224; l'aide des commandes classiques.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Enfin, apr&#232;s red&#233;marrage et chargement (&#233;ventuel) du module, la commande &quot;ifconfig&quot; permet de v&#233;rifier que le support d'IPv6 est bien charg&#233; : Il suffit d'avoir au minimum l'adresse de port&#233;e &quot;lien local&quot; (celle commen&#231;ant par FE80).&lt;/p&gt; &lt;pre&gt;
eth0 Lien encap:Ethernet HWaddr 00:0A:E4:FC:E7:83 inet adr:192.168.0.4 Bcast:192.168.0.255 Masque:255.255.255.0 adr inet6 : fe80 ::20a:e4ff:fefc:e783/64 Scope:Lien adr inet6 : fec0 ::4/64 Scope:Site
&lt;/pre&gt;
&lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;Configuration des param&#232;tres IPv6&lt;/strong&gt;&lt;br /&gt;
&lt;i class=&quot;spip&quot;&gt;Configuration des adresses&lt;/i&gt;&lt;br /&gt;
La plupart des distributions proposent d&#233;j&#224; la possibilit&#233; de configurer les adresses IPv6 dans les fichiers de configuration, pour savoir comment faire, il faudra se reporter &#224; leurs documentations respectives.
Cependant, la proc&#233;dure manuelle et universelle est pr&#233;sent&#233;e ci-dessous.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;La configuration d'une adresse IPv6 se fait &#224; l'aide de la commande &quot;ifconfig&quot; (en supposant que eth0 est l'interface &#224; configurer) :&lt;/p&gt; &lt;pre&gt; ifconfig eth0 add fec0:1 ::ab5:1/64
&lt;/pre&gt;
&lt;p class=&quot;spip&quot;&gt;De m&#234;me, la suppression d'une adresse IPv6 se fait avec :&lt;/p&gt; &lt;pre&gt; ifconfig eth0 del fec0:1 ::ab5:1/64
&lt;/pre&gt;
&lt;p class=&quot;spip&quot;&gt;&lt;i class=&quot;spip&quot;&gt;Renseignement du serveur DNS&lt;/i&gt;&lt;br /&gt; La configuration du serveur DNS auquel le poste s'adressera se fait de la m&#234;me mani&#232;re qu'en IPv4. La syntaxe du fichier /etc/resolv.conf est la m&#234;me, on indique seulement une adresse IPv6 au lieu de l'adress IPv4&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Par exemple :&lt;/p&gt;
&lt;pre&gt; nameserver [fec0 ::4]
&lt;/pre&gt;
&lt;p class=&quot;spip&quot;&gt;&lt;i class=&quot;spip&quot;&gt;Configuration du routage&lt;/i&gt;&lt;br /&gt; La manipulation des tables de routage se fait &#224; l'aide de la commande &quot;route&quot; &#224; laquelle il faut passer le param&#232;tre &quot;&#8212;inet6&quot; en plus des autres param&#232;tres :&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;L'affichage des routes disponibles se fait &#224; l'aide de la commande suivante :&lt;/p&gt; &lt;pre&gt; route -A inet6 &lt;/pre&gt;
&lt;p class=&quot;spip&quot;&gt;L'ajout et la suppression d'une route vers un r&#233;seau distant se fait avec les commandes suivantes :&lt;/p&gt; &lt;pre&gt; route &#8212;inet6 add &amp;lt;r&#233;seau&amp;gt;/&amp;lt;longueurpr&#233;fixe&amp;gt; gw &amp;lt;adresseipv6&amp;gt; route &#8212;inet6 del &amp;lt;r&#233;seau&amp;gt;/&amp;lt;longueurpr&#233;fixe&amp;gt; gw &amp;lt;adresseipv6&amp;gt;
&lt;/pre&gt;
&lt;p class=&quot;spip&quot;&gt;On peut &#233;galement remplacer &quot;&amp;lt;r&#233;seau&amp;gt;/&amp;lt;longueurpr&#233;fixe&amp;gt;&quot; par &quot;default&quot; si on veut ajouter une route par d&#233;faut. Par exemple : (en supposant que FEC0:2 ::/64 est le r&#233;seau &#224; atteindre et FEC0:1 ::1 est l'adresse du routeur)&lt;/p&gt; &lt;pre&gt; route &#8212;inet6 add fec0:2 ::/64 gw fec0:1 ::1 route &#8212;inet6 del fec0:2 ::/64 gw fec0:1 ::1
&lt;/pre&gt;
&lt;p class=&quot;spip&quot;&gt;L'activation du routage pour IPv6 peut &#234;tre fait de mani&#232;re contr&#244;l&#233; interface r&#233;seau par interface r&#233;seau ou bien toutes les interfaces en m&#234;me temps. Cela se fait avec les commandes :&lt;/p&gt; &lt;pre&gt; sysctl net.ipv6.conf.eth0.forwarding=1
&lt;/pre&gt;
&lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;Configuration avanc&#233;e d'IPv6&lt;/strong&gt;&lt;br /&gt;
&lt;i class=&quot;spip&quot;&gt;Mise en place de l'autoconfiguration&lt;/i&gt;&lt;br /&gt;
Le syst&#232;me d'autoconfiguration d'IPv6 n&#233;cessite la pr&#233;sence d'un routeur. Nous allons donc configurer notre syst&#232;me Linux pour qu'il se comporte comme un routeur sans toutefois entrer dans une configuration avanc&#233;e du routage, inutile ici.
&lt;br /&gt;
Configuration du routeur :&lt;br /&gt;
L'autoconfiguration des postes distants est r&#233;alis&#233;e par le programme Radvd qu'il faudra donc installer. Il est fourni avec la plupart des distributions, sinon, sa compilation ne devrait pas poser de probl&#232;me pour le Linuxien avanc&#233; que vous &#234;tes.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Il faut d'abord commencer par activer le routage IPv6 au niveau du noyau comme expliqu&#233; dans la section sur le routage. Ensuite, la configuration de radvd s'effectue en &#233;ditant le fichier /etc/radvd.conf :&lt;/p&gt; &lt;pre&gt;
interface eth0 &lt;--- Interface &#224; configurer &lt;i class=&quot;spip&quot;&gt; AdvSendAdvert on ; prefix fec0:1 ::/64 &lt;&#8212; pr&#233;fixe de &#224; annoncer r&#233;seau et masque &lt;i class=&quot;spip&quot;&gt; AdvOnLink on ; AdvAutonomous on ; &lt;/i&gt; ; &lt;/i&gt; ;
&lt;/pre&gt;
&lt;p class=&quot;spip&quot;&gt;Un certain nombre d'autres options sont possible, la page de manuel de radvd contient toutes les informations n&#233;cessaires pour effectuer une configuration avanc&#233;e.&lt;br /&gt;
Le d&#233;mon pourra &#234;tre lanc&#233; avec la commande :&lt;/p&gt; &lt;pre&gt;
/etc/init.d/radvd start
&lt;/pre&gt;
&lt;p class=&quot;spip&quot;&gt;Configuration sur les postes clients :&lt;br /&gt;
Aucune configuration n'est n&#233;cessaire sur les postes clients. Il suffit seulement que le support IPv6 soit activ&#233; et le syst&#232;me effectuera tout seul la recherche du routeur distant.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>



	<item>
		<title>Utilisation de LVM</title>
		<link>http://geekz.fr/Utilisation-de-LVM</link>
		<guid isPermaLink="true">http://geekz.fr/Utilisation-de-LVM</guid>
		<dc:date>2007-02-11T08:15:06Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>b3nj</dc:creator>

<category domain="http://geekz.fr/-Systeme-">Syst&#232;me</category>

		<dc:subject>LVM</dc:subject>

		<description>

-
&lt;a href="http://geekz.fr/-Systeme-" rel="directory"&gt;Syst&#232;me&lt;/a&gt;

/ 
&lt;a href="http://geekz.fr/+-LVM-+" rel="tag"&gt;LVM&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;h3 class=&quot;spip&quot;&gt;Notions basiques&lt;/h3&gt;
&lt;p class=&quot;spip&quot;&gt;Comme dit dans le chapeau, LVM2 vous permet de pouvoir cr&#233;er des partitions s'&#233;tendant sur plusieurs disques en les regroupant en volumes virtuels. Il permet &#233;galement de pouvoir agrandir la taille des partitions existantes facilement [&lt;a href=&quot;http://geekz.fr/#nb9-1&quot; name=&quot;nh9-1&quot; id=&quot;nh9-1&quot; class=&quot;spip_note&quot; title='[1] Attention, seulement si le syst&#232;me de fichiers le permet' &gt;1&lt;/a&gt;]. Cela permet d'avoir une gestion de disque bien plus scalable car l'ajout ou la suppression d'espace est tr&#232;s facile et permet d'agrandir les ressources disponibles sur un syst&#232;me sans avoir &#224; repartitionner toute la machine (et la plupart du temps r&#233;installer la machine).&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;Physical volumes and volume groups&lt;/strong&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;La m&#233;thode utilis&#233;e par LVM2 pour permettre de g&#233;rer plusieurs disques en tant qu'une seule m&#234;me unit&#233; est de regrouper toutes les partitions que l'on souhaite utiliser avec LVM2 dans un ou plusieurs &quot;volume groups&quot;.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Pour cela, il est n&#233;cessaire de cr&#233;er un &quot;physical volume&quot;, op&#233;ration qui premet de pr&#233;parer une partition, un disque entier dans un format que LVM2 utilisera plus tard pour stocker les donn&#233;es.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Cela se fait au moyen de la commande &lt;code class='spip_code' dir='ltr'&gt;pvcreate&lt;/code&gt;.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Par exemple si j'ai un disque de 6.4Go situ&#233; en &lt;code class='spip_code' dir='ltr'&gt;/dev/hdb&lt;/code&gt; et un disque de 40Go en &lt;code class='spip_code' dir='ltr'&gt;/dev/hde&lt;/code&gt;, je les initialiserais de la fa&#231;on suivante :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;br /&gt; osiris ~ # pvcreate /dev/hdb&lt;br /&gt; Physical volume &quot;/dev/hdb&quot; successfully created&lt;br /&gt; osiris ~ # pvcreate /dev/hde&lt;br /&gt; Physical volume &quot;/dev/hdb&quot; successfully created&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Nous pouvons v&#233;rifier que les deux physical volumes sont bien pr&#233;par&#233;s en utilisant la commande &lt;code class='spip_code' dir='ltr'&gt;pvdisplay&lt;/code&gt; ce qui retournerait :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;br /&gt; livecd ~ # pvdisplay&lt;br /&gt; --- NEW Physical volume ---&lt;br /&gt; PV Name /dev/hde&lt;br /&gt; VG Name&lt;br /&gt; PV Size 37.27 GB&lt;br /&gt; Allocatable NO&lt;br /&gt; PE Size (KByte) 0&lt;br /&gt; Total PE 0&lt;br /&gt; Free PE 0&lt;br /&gt; Allocated PE 0&lt;br /&gt; PV UUID f0iIbU-ayPe-kpoy-d3bP-hfDP-JqPO-5MVLT7&lt;br /&gt; &lt;br /&gt; --- NEW Physical volume ---&lt;br /&gt; PV Name /dev/hdb&lt;br /&gt; VG Name&lt;br /&gt; PV Size 6.01 GB&lt;br /&gt; Allocatable NO&lt;br /&gt; PE Size (KByte) 0&lt;br /&gt; Total PE 0&lt;br /&gt; Free PE 0&lt;br /&gt; Allocated PE 0&lt;br /&gt; PV UUID yV0Qht-jGSe-jdDo-jErn-cgYi-tbR6-ITqrz1&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Nous avons donc deux disques pr&#233;par&#233;s pour l'utilisation dans un volume group. Il est maintenant n&#233;cessaire de cr&#233;er un volume group de la fa&#231;on suivante (nous lui donnerons le nom lvmspace)&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;br /&gt; osiris ~ # vgcreate lvmspace /dev/hdb&lt;br /&gt; Volume group &quot;lvmspace&quot; successfully created&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Le volume group est maintenant cr&#233;&#233; et totalise une taille de 6.01Go, ce que nous pouvons v&#233;rifier avec la commande &lt;code class='spip_code' dir='ltr'&gt;vgdisplay&lt;/code&gt; :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;br /&gt; osiris ~ # vgdisplay&lt;br /&gt; --- Volume group ---&lt;br /&gt; VG Name lvmspace&lt;br /&gt; System ID&lt;br /&gt; Format lvm2&lt;br /&gt; Metadata Areas 1&lt;br /&gt; Metadata Sequence No 1&lt;br /&gt; VG Access read/write&lt;br /&gt; VG Status resizable&lt;br /&gt; MAX LV 0&lt;br /&gt; Cur LV 0&lt;br /&gt; Open LV 0&lt;br /&gt; Max PV 0&lt;br /&gt; Cur PV 1&lt;br /&gt; Act PV 1&lt;br /&gt; VG Size 6.00 GB&lt;br /&gt; PE Size 4.00 MB&lt;br /&gt; Total PE 1537&lt;br /&gt; Alloc PE / Size 0 / 0&lt;br /&gt; Free PE / Size 1537 / 6.00 GB&lt;br /&gt; VG UUID W7zp0w-pYZk-xkg1-9u37-9kiI-30uM-yA6Yji&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;&lt;span class='spip_document_3949 spip_documents spip_documents_center' &gt;
&lt;img src='http://geekz.fr/local/cache-vignettes/L203xH218/Volume_group_creation-0937a.png' width='203' height='218' alt=&quot;Cr&#233;ation du volume group&quot; title=&quot;Cr&#233;ation du volume group&quot; style='height:218px;width:203px;' class=' format_png' /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;La prochaine op&#233;ration permettra d'&#233;tendre la taille du volume group avec la taille du disque &lt;code class='spip_code' dir='ltr'&gt;/dev/hde&lt;/code&gt;.&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;br /&gt; osiris ~ # vgextend lvmspace /dev/hde&lt;br /&gt; /dev/cdrom: open failed: Read-only file system&lt;br /&gt; /dev/cdrom: open failed: Read-only file system&lt;br /&gt; Attempt to close device '/dev/cdrom' which is not open.&lt;br /&gt; Volume group &quot;lvmspace&quot; successfully extended&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;blockquote class=&quot;spip&quot;&gt;
&lt;p class=&quot;spip&quot;&gt;Ne pr&#234;tez pas attention aux messages concernant le lecteur cd.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p class=&quot;spip&quot;&gt;Voici une repr&#233;sentation de l'op&#233;ration que l'on vient de r&#233;aliser, &#224; savoir cumuler les deux espaces disques physiques dans un disque virtuel.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;span class='spip_document_3948 spip_documents spip_documents_center' &gt;
&lt;img src='http://geekz.fr/local/cache-vignettes/L384xH224/Volume_group-15bb9.png' width='384' height='224' alt=&quot;Extension du volume group&quot; title=&quot;Extension du volume group&quot; style='height:224px;width:384px;' class=' format_png' /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Nous pouvons donc v&#233;rifier que la taille du volume group &#224; bien &#233;t&#233; augment&#233;e :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;br /&gt; osiris ~ # vgdisplay&lt;br /&gt; --- Volume group ---&lt;br /&gt; VG Name lvmspace&lt;br /&gt; System ID&lt;br /&gt; Format lvm2&lt;br /&gt; Metadata Areas 2&lt;br /&gt; Metadata Sequence No 2&lt;br /&gt; VG Access read/write&lt;br /&gt; VG Status resizable&lt;br /&gt; MAX LV 0&lt;br /&gt; Cur LV 0&lt;br /&gt; Open LV 0&lt;br /&gt; Max PV 0&lt;br /&gt; Cur PV 2&lt;br /&gt; Act PV 2&lt;br /&gt; VG Size 43.27 GB&lt;br /&gt; PE Size 4.00 MB&lt;br /&gt; Total PE 11078&lt;br /&gt; Alloc PE / Size 0 / 0&lt;br /&gt; Free PE / Size 11078 / 43.27 GB&lt;br /&gt; VG UUID W7zp0w-pYZk-xkg1-9u37-9kiI-30uM-yA6Yji&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;On peut voir maintenant avec &lt;code class='spip_code' dir='ltr'&gt;pvdisplay&lt;/code&gt; que les disques ont &#233;t&#233; totalement affect&#233;s au volume group.&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;br /&gt; osiris ~ # pvdisplay&lt;br /&gt; --- Physical volume ---&lt;br /&gt; PV Name /dev/hdb&lt;br /&gt; VG Name lvmspace&lt;br /&gt; PV Size 6.00 GB / not usable 0&lt;br /&gt; Allocatable yes&lt;br /&gt; PE Size (KByte) 4096&lt;br /&gt; Total PE 1537&lt;br /&gt; Free PE 1537&lt;br /&gt; Allocated PE 0&lt;br /&gt; PV UUID yV0Qht-jGSe-jdDo-jErn-cgYi-tbR6-ITqrz1&lt;br /&gt; &lt;br /&gt; --- Physical volume ---&lt;br /&gt; PV Name /dev/hde&lt;br /&gt; VG Name lvmspace&lt;br /&gt; PV Size 37.27 GB / not usable 0&lt;br /&gt; Allocatable yes&lt;br /&gt; PE Size (KByte) 4096&lt;br /&gt; Total PE 9541&lt;br /&gt; Free PE 9541&lt;br /&gt; Allocated PE 0&lt;br /&gt; PV UUID f0iIbU-ayPe-kpoy-d3bP-hfDP-JqPO-5MVLT7&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Maintenant que nous avons un espace disque virtuel utilisable, nous allons pouvoir cr&#233;er des partitions sur cet espace afin de pouvoir les utiliser. Commen&#231;ons par cr&#233;er une partition, que l'on appelle logical volume lorsque l'on utilise LVM, nomm&#233;e home d'une taille de 7Go avec la commande &lt;code class='spip_code' dir='ltr'&gt;lvcreate&lt;/code&gt;.&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;br /&gt; osiris ~ # lvcreate -L 7G -n home lvmspace&lt;br /&gt; Logical volume &quot;home&quot; created&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;&lt;span class='spip_document_3950 spip_documents spip_documents_center' &gt;
&lt;img src='http://geekz.fr/local/cache-vignettes/L384xH217/first_lv-a2af6.png' width='384' height='217' alt=&quot;Ajout d'un logical volume&quot; title=&quot;Ajout d'un logical volume&quot; style='height:217px;width:384px;' class=' format_png' /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Nous pouvons voir les d&#233;tails du r&#233;sultat de l'op&#233;ration pr&#233;c&#233;dente avec la commande &lt;code class='spip_code' dir='ltr'&gt;lvdisplay&lt;/code&gt;.&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;br /&gt; osiris ~ # lvdisplay&lt;br /&gt; --- Logical volume ---&lt;br /&gt; LV Name /dev/lvmspace/home&lt;br /&gt; VG Name lvmspace&lt;br /&gt; LV UUID icrus5-H10v-GqTG-NW0L-cwUR-FW2P-T5eqy1&lt;br /&gt; LV Write Access read/write&lt;br /&gt; LV Status available&lt;br /&gt; # open 0&lt;br /&gt; LV Size 7.00 GB&lt;br /&gt; Current LE 1792&lt;br /&gt; Segments 2&lt;br /&gt; Allocation inherit&lt;br /&gt; Read ahead sectors 0&lt;br /&gt; Block device 253:0&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Nous pouvons &#233;galement constater que le logical volume cr&#233;&#233; plus tot occupe tout l'espace de &lt;code class='spip_code' dir='ltr'&gt;/dev/hdb&lt;/code&gt; et une petite partie de &lt;code class='spip_code' dir='ltr'&gt;/dev/hde&lt;/code&gt;.&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;br /&gt; osiris ~ # pvdisplay&lt;br /&gt; --- Physical volume ---&lt;br /&gt; PV Name /dev/hdb&lt;br /&gt; VG Name lvmspace&lt;br /&gt; PV Size 6.00 GB / not usable 0&lt;br /&gt; Allocatable yes (but full)&lt;br /&gt; PE Size (KByte) 4096&lt;br /&gt; Total PE 1537&lt;br /&gt; Free PE 0&lt;br /&gt; Allocated PE 1537&lt;br /&gt; PV UUID yV0Qht-jGSe-jdDo-jErn-cgYi-tbR6-ITqrz1&lt;br /&gt; &lt;br /&gt; --- Physical volume ---&lt;br /&gt; PV Name /dev/hde&lt;br /&gt; VG Name lvmspace&lt;br /&gt; PV Size 37.27 GB / not usable 0&lt;br /&gt; Allocatable yes&lt;br /&gt; PE Size (KByte) 4096&lt;br /&gt; Total PE 9541&lt;br /&gt; Free PE 9286&lt;br /&gt; Allocated PE 255&lt;br /&gt; PV UUID f0iIbU-ayPe-kpoy-d3bP-hfDP-JqPO-5MVLT7&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Cr&#233;ons maintenant un logical volume de 20Go nomm&#233;e var.&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;br /&gt; osiris ~ # lvcreate -L 20G -n var lvmspace&lt;br /&gt; Logical volume &quot;var&quot; created&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Voyons le r&#233;sultat de la commande pr&#233;c&#233;dente :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;br /&gt; osiris ~ # lvdisplay&lt;br /&gt; --- Logical volume ---&lt;br /&gt; LV Name /dev/lvmspace/home&lt;br /&gt; VG Name lvmspace&lt;br /&gt; LV UUID icrus5-H10v-GqTG-NW0L-cwUR-FW2P-T5eqy1&lt;br /&gt; LV Write Access read/write&lt;br /&gt; LV Status available&lt;br /&gt; # open 0&lt;br /&gt; LV Size 7.00 GB&lt;br /&gt; Current LE 1792&lt;br /&gt; Segments 2&lt;br /&gt; Allocation inherit&lt;br /&gt; Read ahead sectors 0&lt;br /&gt; Block device 253:0&lt;br /&gt; &lt;br /&gt; --- Logical volume ---&lt;br /&gt; LV Name /dev/lvmspace/var&lt;br /&gt; VG Name lvmspace&lt;br /&gt; LV UUID GNPaI1-7jlr-oUYZ-6qot-1cS8-gN8G-Ig6cJ2&lt;br /&gt; LV Write Access read/write&lt;br /&gt; LV Status available&lt;br /&gt; # open 0&lt;br /&gt; LV Size 20.00 GB&lt;br /&gt; Current LE 5120&lt;br /&gt; Segments 1&lt;br /&gt; Allocation inherit&lt;br /&gt; Read ahead sectors 0&lt;br /&gt; Block device 253:1&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Nous voyons donc bien que 27Go sont occup&#233;s dans le volume group lvmspace.&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;br /&gt; osiris ~ # vgdisplay&lt;br /&gt; --- Volume group ---&lt;br /&gt; VG Name lvmspace&lt;br /&gt; System ID&lt;br /&gt; Format lvm2&lt;br /&gt; Metadata Areas 2&lt;br /&gt; Metadata Sequence No 4&lt;br /&gt; VG Access read/write&lt;br /&gt; VG Status resizable&lt;br /&gt; MAX LV 0&lt;br /&gt; Cur LV 2&lt;br /&gt; Open LV 0&lt;br /&gt; Max PV 0&lt;br /&gt; Cur PV 2&lt;br /&gt; Act PV 2&lt;br /&gt; VG Size 43.27 GB&lt;br /&gt; PE Size 4.00 MB&lt;br /&gt; Total PE 11078&lt;br /&gt; Alloc PE / Size 6912 / 27.00 GB&lt;br /&gt; Free PE / Size 4166 / 16.27 GB&lt;br /&gt; VG UUID W7zp0w-pYZk-xkg1-9u37-9kiI-30uM-yA6Yji&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Cr&#233;ons maintenant un logical volume de 3Go nomm&#233; tmp et un dernier logical volume de 13.27Go pour remplir tout l'espace disque disponible.&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;br /&gt; osiris ~ # lvcreate -L 3G -n tmp lvmspace&lt;br /&gt; Logical volume &quot;tmp&quot; created&lt;br /&gt; osiris ~ # lvcreate -L 13.27G -n portage lvmspace&lt;br /&gt; Rounding up size to full physical extent 13.27 GB&lt;br /&gt; Logical volume &quot;portage&quot; created&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Nous voyons donc maintenant qu'il n'y a plus d'espace disque disponible dans le volume group.&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;br /&gt; osiris ~ # vgdisplay&lt;br /&gt; --- Volume group ---&lt;br /&gt; VG Name lvmspace&lt;br /&gt; System ID&lt;br /&gt; Format lvm2&lt;br /&gt; Metadata Areas 2&lt;br /&gt; Metadata Sequence No 6&lt;br /&gt; VG Access read/write&lt;br /&gt; VG Status resizable&lt;br /&gt; MAX LV 0&lt;br /&gt; Cur LV 4&lt;br /&gt; Open LV 0&lt;br /&gt; Max PV 0&lt;br /&gt; Cur PV 2&lt;br /&gt; Act PV 2&lt;br /&gt; VG Size 43.27 GB&lt;br /&gt; PE Size 4.00 MB&lt;br /&gt; Total PE 11078&lt;br /&gt; Alloc PE / Size 11078 / 43.27 GB&lt;br /&gt; Free PE / Size 0 / 0&lt;br /&gt; VG UUID W7zp0w-pYZk-xkg1-9u37-9kiI-30uM-yA6Yji&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Le sch&#233;ma actuel est le suivant :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;br /&gt; osiris ~ # ls /dev/lvmspace/&lt;br /&gt; home portage tmp var&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;&lt;span class='spip_document_3954 spip_documents spip_documents_center' &gt;
&lt;img src='http://geekz.fr/local/cache-vignettes/L383xH217/vg_full-35512.png' width='383' height='217' alt=&quot;Volume group plein&quot; title=&quot;Volume group plein&quot; style='height:217px;width:383px;' class=' format_png' /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Nous allons donc maintenant cr&#233;er des syst&#232;mes de fichier sur les logical volumes afin de pouvoir les utiliser comme des partitions standard.&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;br /&gt; osiris ~ # mkfs.ext3 /dev/lvmspace/tmp -L &quot;/tmp&quot;&lt;br /&gt; osiris ~ # mkfs.ext3 /dev/lvmspace/var -L &quot;/var&quot;&lt;br /&gt; osiris ~ #mkfs.reiserfs /dev/lvmspace/portage -l &quot;/usr/portage&quot;&lt;br /&gt; osiris ~ # mkfs.reiserfs /dev/lvmspace/home -l &quot;/home&quot;&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Nous avons donc le sch&#233;ma suivant :&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;span class='spip_document_3955 spip_documents spip_documents_center' &gt;
&lt;img src='http://geekz.fr/local/cache-vignettes/L383xH217/all_lvs_with_FS-5f1c7.png' width='383' height='217' alt=&quot;Syst&#232;mes de fichiers cr&#233;&#233;s&quot; title=&quot;Syst&#232;mes de fichiers cr&#233;&#233;s&quot; style='height:217px;width:383px;' class=' format_png' /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Nous allons dans la prochaine partie voir &#224; quel point l'utilisation de LVM2 est un avantage.&lt;/p&gt; &lt;hr class=&quot;spip&quot; /&gt;
&lt;h3 class=&quot;spip&quot;&gt;Redimensionnement des logical volumes&lt;/h3&gt;
&lt;p class=&quot;spip&quot;&gt;Imaginons que nous souhaitions ajouter un disque dur pour utiliser son espace disque.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Pr&#233;paration du physical volume :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;br /&gt; osiris ~ # pvcreate /dev/hdg&lt;br /&gt; Physical volume &quot;/dev/hdg&quot; successfully created&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;On &#233;tend maintenant le volume group [&lt;a href=&quot;http://geekz.fr/#nb9-2&quot; name=&quot;nh9-2&quot; id=&quot;nh9-2&quot; class=&quot;spip_note&quot; title='[2] Ne pr&#234;tez pas attention aux messages de warning concernant le (...)' &gt;2&lt;/a&gt;] :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;br /&gt; osiris ~ # vgextend lvmspace /dev/hdg&lt;br /&gt; /dev/cdrom: open failed: Read-only file system&lt;br /&gt; Attempt to close device '/dev/cdrom' which is not open.&lt;br /&gt; Volume group &quot;lvmspace&quot; successfully extended&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;&lt;span class='spip_document_3956 spip_documents spip_documents_center' &gt;
&lt;img src='http://geekz.fr/local/cache-vignettes/L520xH204/Vg_extended-d8181.png' width='520' height='204' alt=&quot;Volume groupe &#233;tendu&quot; title=&quot;Volume groupe &#233;tendu&quot; style='height:204px;width:520px;' class=' format_png' /&gt;&lt;/span&gt;&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;osiris ~ # vgdisplay&lt;br /&gt; --- Volume group ---&lt;br /&gt; VG Name lvmspace&lt;br /&gt; System ID&lt;br /&gt; Format lvm2&lt;br /&gt; Metadata Areas 3&lt;br /&gt; Metadata Sequence No 7&lt;br /&gt; VG Access read/write&lt;br /&gt; VG Status resizable&lt;br /&gt; MAX LV 0&lt;br /&gt; Cur LV 4&lt;br /&gt; Open LV 0&lt;br /&gt; Max PV 0&lt;br /&gt; Cur PV 3&lt;br /&gt; Act PV 3&lt;br /&gt; VG Size 81.62 GB&lt;br /&gt; PE Size 4.00 MB&lt;br /&gt; Total PE 20894&lt;br /&gt; Alloc PE / Size 11078 / 43.27 GB&lt;br /&gt; Free PE / Size 9816 / 38.34 GB&lt;br /&gt; VG UUID W7zp0w-pYZk-xkg1-9u37-9kiI-30uM-yA6Yji&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Nous allons maintenant &#233;tendre le logical volume &lt;code class='spip_code' dir='ltr'&gt;home&lt;/code&gt; de 3Go. Maintenant il est tr&#232;s important de saisir que nous allons &#233;tendre ce qui fait office de lecteur virtuel, pas la partition que nous avons cr&#233;&#233; dessus, et il sera n&#233;cessaire de redimensionner le syst&#232;me de fichiers pour que le lecteur puisse &#234;tre utilis&#233; dans sa totalit&#233;. Le sh&#233;ma suivant vous illustrera la diff&#233;rence.&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;osiris ~ # lvextend -L +3G /dev/lvmspace/home&lt;br /&gt; Extending logical volume home to 10.00 GB&lt;br /&gt; Logical volume home successfully resized&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;&lt;span class='spip_document_3957 spip_documents spip_documents_center' &gt;
&lt;img src='http://geekz.fr/local/cache-vignettes/L520xH204/home_extended-7ab34.png' width='520' height='204' alt=&quot;Home &#233;tendu&quot; title=&quot;Home &#233;tendu&quot; style='height:204px;width:520px;' class=' format_png' /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Nous voyons bien maintenant que le logical volume &#224; une taille de 10Go.&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;osiris ~ # lvdisplay /dev/lvmspace/home&lt;br /&gt; --- Logical volume ---&lt;br /&gt; LV Name /dev/lvmspace/home&lt;br /&gt; VG Name lvmspace&lt;br /&gt; LV UUID icrus5-H10v-GqTG-NW0L-cwUR-FW2P-T5eqy1&lt;br /&gt; LV Write Access read/write&lt;br /&gt; LV Status available&lt;br /&gt; # open 0&lt;br /&gt; LV Size 10.00 GB&lt;br /&gt; Current LE 2560&lt;br /&gt; Segments 3&lt;br /&gt; Allocation inherit&lt;br /&gt; Read ahead sectors 0&lt;br /&gt; Block device 253:0&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Nous allons maintenant &#233;tendre le syst&#232;me de fichiers existant sur &lt;code class='spip_code' dir='ltr'&gt;home&lt;/code&gt; en utilisant la commande sp&#233;cialement mise &#224; disposition pour cela concernant le syst&#232;me de fichiers reiserfs appel&#233;e &lt;code class='spip_code' dir='ltr'&gt;resize_reiserfs&lt;/code&gt;. &lt;strong class=&quot;spip&quot;&gt;Il est important de noter que cette op&#233;ration doit se faire sur une partition non mont&#233;e !&lt;/strong&gt;.&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;osiris ~ # resize_reiserfs -s+3G /dev/lvmspace/home&lt;br /&gt; resize_reiserfs 3.6.19 (2003 www.namesys.com)&lt;br /&gt; &lt;br /&gt; ReiserFS report:&lt;br /&gt; blocksize 4096&lt;br /&gt; block count 2621440 (1835008)&lt;br /&gt; free blocks 2613149 (1826741)&lt;br /&gt; bitmap block count 80 (56)&lt;br /&gt; &lt;br /&gt; Syncing..done&lt;br /&gt; &lt;br /&gt; resize_reiserfs: Resizing finished successfully.&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Nous allons maintenant faire la m&#234;me op&#233;ration sur le lecteur &lt;code class='spip_code' dir='ltr'&gt;var&lt;/code&gt; en &#233;tendant la logical volume et le syst&#232;me de fichiers ext3 qui est dessus (gr&#226;ce &#224; la commande &lt;code class='spip_code' dir='ltr'&gt;resize2fs&lt;/code&gt;) de 5Go.&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;osiris ~ # lvextend -L +5G /dev/lvmspace/var&lt;br /&gt; Extending logical volume var to 25.00 GB&lt;br /&gt; Logical volume var successfully resized&lt;/code&gt;&lt;/div&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;osiris ~ # resize2fs /dev/lvmspace/var 25G&lt;br /&gt; resize2fs 1.38 (30-Jun-2005)&lt;br /&gt; Resizing the filesystem on /dev/lvmspace/var to 6553600 (4k) blocks.&lt;br /&gt; The filesystem on /dev/lvmspace/var is now 6553600 blocks long.&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Voici donc maintenant la situation :&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;span class='spip_document_3961 spip_documents spip_documents_center' &gt;
&lt;img src='http://geekz.fr/local/cache-vignettes/L520xH204/var_extended-d0734.png' width='520' height='204' alt=&quot;Var &#233;tendu&quot; title=&quot;Var &#233;tendu&quot; style='height:204px;width:520px;' class=' format_png' /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;R&#233;trecissement d'un logical volume&lt;/strong&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Admettons maintenant que nous souhaitions ne plus avoir 10Go sur &lt;code class='spip_code' dir='ltr'&gt;home&lt;/code&gt; pour une raison quelconque. La m&#233;thode &#224; suivre pour pouvoir proc&#233;der au r&#233;tr&#233;cissement du logical volume est d'abord de redimensionner &#224; la baisse le syst&#232;me de fichiers existant dessus puis de redimensionner &#224; la baisse le logical volume.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Redimensionnement du syst&#232;me de fichiers :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;osiris ~ # resize_reiserfs -s-1G /dev/lvmspace/home&lt;br /&gt; resize_reiserfs 3.6.19 (2003 www.namesys.com)&lt;br /&gt; &lt;br /&gt; You are running BETA version of reiserfs shrinker.&lt;br /&gt; This version is only for testing or VERY CAREFUL use.&lt;br /&gt; Backup of you data is recommended.&lt;br /&gt; &lt;br /&gt; Do you want to continue? [y/N]:y&lt;br /&gt; Processing the tree: 0%....20%....40%....60%....80%....100% left 0, 0 /sec&lt;br /&gt; &lt;br /&gt; nodes processed (moved):&lt;br /&gt; int 0 (0),&lt;br /&gt; leaves 1 (0),&lt;br /&gt; unfm 0 (0),&lt;br /&gt; total 1 (0).&lt;br /&gt; &lt;br /&gt; check for used blocks in truncated region&lt;br /&gt; &lt;br /&gt; ReiserFS report:&lt;br /&gt; blocksize 4096&lt;br /&gt; block count 2359296 (2621440)&lt;br /&gt; free blocks 2351013 (2613149)&lt;br /&gt; bitmap block count 72 (80)&lt;br /&gt; &lt;br /&gt; Syncing..done&lt;br /&gt; &lt;br /&gt; resize_reiserfs: Resizing finished successfully.&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Redimensionnement du logical volume :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;osiris ~ # lvresize -L -1G /dev/lvmspace/home&lt;br /&gt; WARNING: Reducing active logical volume to 9.00 GB&lt;br /&gt; THIS MAY DESTROY YOUR DATA (filesystem etc.)&lt;br /&gt; Do you really want to reduce home? [y/n]: y&lt;br /&gt; Reducing logical volume home to 9.00 GB&lt;br /&gt; Logical volume home successfully resized&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Vous savez maintenant agrandir et reduire des logical volume, &#233;tendre des volume groups, vous &#234;tes donc capables de faire pas mal de choses avec cette technologie g&#233;niale qu'est LVM.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;Liens&lt;/strong&gt;&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li class=&quot;spip&quot;&gt; &lt;a href=&quot;http://sourceware.org/lvm2/&quot; class=&quot;spip_out&quot;&gt;Site officiel&lt;/a&gt;&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; &lt;a href=&quot;http://www.tldp.org/HOWTO/LVM-HOWTO/index.html&quot; class=&quot;spip_out&quot;&gt;LVM Howto&lt;/a&gt;&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; &lt;a href=&quot;http://www.tldp.org/HOWTO/LVM-HOWTO/commontask.html&quot; class=&quot;spip_out&quot;&gt;T&#226;ches courantes avec LVM2&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://geekz.fr/#nh9-1&quot; name=&quot;nb9-1&quot; class=&quot;spip_note&quot; title=&quot;Notes 9-1&quot;&gt;1&lt;/a&gt;] Attention, seulement si le syst&#232;me de fichiers le permet&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://geekz.fr/#nh9-2&quot; name=&quot;nb9-2&quot; class=&quot;spip_note&quot; title=&quot;Notes 9-2&quot;&gt;2&lt;/a&gt;] Ne pr&#234;tez pas attention aux messages de warning concernant le cdrom&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>





</channel>

</rss>

