360 lines
17 KiB
HTML
360 lines
17 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>Monter son propre serveur, partie 1: le serveur et l'apache.</title>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<meta name="author" content="wxcafé">
|
|
<link rel="icon" type="image/png" href="//wxcafe.net/theme/img/favicon.ico">
|
|
<!-- Le styles -->
|
|
<link rel="stylesheet" href="//wxcafe.net/theme/css/extra.css" type="text/css" />
|
|
<link rel="stylesheet" href="//wxcafe.net/theme/css/bootstrap.css" type="text/css" />
|
|
<link href='http://fonts.googleapis.com/css?family=Oswald&subset=latin,latin-ext' rel='stylesheet' type='text/css'>
|
|
<script type="text/javascript">
|
|
/* <![CDATA[ */
|
|
(function() {
|
|
var s = document.createElement('script');
|
|
var t = document.getElementsByTagName('script')[0];
|
|
|
|
s.type = 'text/javascript';
|
|
s.async = true;
|
|
s.src = '//api.flattr.com/js/0.6/load.js?'+
|
|
'mode=auto&uid=wxcafe&button=compact&popout=0';
|
|
t.parentNode.insertBefore(s, t);
|
|
})();
|
|
/* ]]> */
|
|
</script> <!-- flattr button loader -->
|
|
<style type="text/css">
|
|
body {
|
|
padding-top: 60px;
|
|
padding-bottom: 40px;
|
|
}
|
|
.sidebar-nav {
|
|
padding: 9px 0;
|
|
}
|
|
.tag-1 {
|
|
font-size: 13pt;
|
|
}
|
|
.tag-2 {
|
|
font-size: 10pt;
|
|
}
|
|
.tag-2 {
|
|
font-size: 8pt;
|
|
}
|
|
.tag-4 {
|
|
font-size: 6pt;
|
|
}
|
|
</style>
|
|
<link href="//wxcafe.net/theme/css/bootstrap-responsive.css" rel="stylesheet">
|
|
<link href="//wxcafe.net/theme/css/font-awesome.css" rel="stylesheet">
|
|
<link href="//wxcafe.net/theme/css/pygments.css" rel="stylesheet">
|
|
<!-- Le fav and touch icons -->
|
|
<link rel="shortcut icon" href="//wxcafe.net/theme/images/favicon.ico">
|
|
|
|
<link href="//wxcafe.net/feeds/feed.rss.xml" type="application/atom+xml" rel="alternate" title="Wxcafé RSS Feed" />
|
|
|
|
</head>
|
|
|
|
<body>
|
|
|
|
<div class="navbar navbar-fixed-top">
|
|
<div class="navbar-inner">
|
|
<div class="container-fluid">
|
|
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
|
|
<span class="icon-bar"></span>
|
|
<span class="icon-bar"></span>
|
|
<span class="icon-bar"></span>
|
|
</a>
|
|
<a class="brand" href="//wxcafe.net/index.html">Wxcafé </a>
|
|
<div class="nav-collapse">
|
|
<ul class="nav">
|
|
<li><a href="//wxcafe.net/archives.html"><i class="icon-th-list"></i> Archives</a></li>
|
|
<li><a href="//wxcafe.net/pages/about/">A propos</a></li>
|
|
<li class="divider-vertical"></li>
|
|
<ul class="nav pull-right">
|
|
</ul>
|
|
</ul>
|
|
</div><!--/.nav-collapse -->
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="container-fluid">
|
|
<div class="row">
|
|
<div class="span9" id="content">
|
|
<section id="content">
|
|
<article>
|
|
<header>
|
|
<h1>
|
|
<a href=""
|
|
rel="bookmark"
|
|
title="Permalink to Monter son propre serveur, partie 1: le serveur et l'apache.">Monter son propre serveur, partie 1: le serveur et l'apache.</a>
|
|
</h1>
|
|
</header>
|
|
<div class="entry-content">
|
|
<div class="well">
|
|
<footer class="post-info">
|
|
<span class="label">Date</span>
|
|
<span class="published" title="2013-03-18T09:51:00+01:00">
|
|
<i class="icon-calendar"></i> Mon 18 March 2013
|
|
</span>
|
|
<br />
|
|
<span class="label">By</span>
|
|
<a href="//wxcafe.net/author/wxcafe.html"><i class="icon-user"></i>Wxcafe</a>
|
|
<br />
|
|
<span class="label">Category</span>
|
|
<a href="//wxcafe.net/category/tutoriel/"><i class="icon-folder-open"></i>Tutoriel</a>
|
|
<br />
|
|
|
|
|
|
|
|
|
|
</footer><!-- /.post-info --> </div>
|
|
<p>Il y a un certain temps, j’avais parlé du concept du self-hosting. Il
|
|
s’agit de posséder son propre serveur, et donc, par extension, ses
|
|
données. </p>
|
|
<p>Bien entendu, il n’est pas nécessaire pour cela de posséder
|
|
physiquement son propre serveur (encore que ce soit possible, mais ce
|
|
n’est pas le sujet abordé ici.)<br />
|
|
Nous expliquerons ici les étapes nécessaires pour arriver a avoir un
|
|
serveur utilisable, du moment ou vous arrivez sur le système fraichement
|
|
installé, au moment ou vous possédez un serveur avec tous les paquets
|
|
nécessaires a l’utilisation que l’on veut en faire ici d’installés.
|
|
Cette partie va consister a paramétrer le système (ici un debian
|
|
squeeze. Il est bien sur possible de faire la même chose avec a peu près
|
|
toutes les distributions Linux disponibles, tout comme avec les BSD et
|
|
tous les autres systèmes UNIX, mais je vais ici me limiter a debian 6.0.x
|
|
squeeze, parce que c’est une distribution simple a utiliser comme
|
|
serveur, stable, et facile a configurer (puisqu’une bonne partie de la
|
|
configuration est déjà faite et incluse dans le paquet), donc adaptée au
|
|
but de cet article, a savoir rendre l’installation simple et
|
|
compréhensible).</p>
|
|
<p>La première chose a faire est bien entendu d’obtenir le serveur en lui
|
|
même. Cette partie de la chose ne sera pas traitée dans cet article. Il
|
|
existe en effet un nombre infini d’obtenir un serveur, que ce soit en le
|
|
louant chez OVH/1&1/n’importe quel autre hébergeur commercial, en
|
|
participant a un système d’hébergement collaboratif (je vous laisse
|
|
chercher), en achetant un serveur et en le faisant fonctionner de chez
|
|
vous, en utilisant un vieux PC… Bref, les possibilités sont multiples.
|
|
Dès lors que vous avez accès a un système debian serveur, peu importe sur
|
|
quel matériel il fonctionne, et a priori peu importe aussi la manière
|
|
dont vous y accédez, le résultat est le même (et la procédure aussi…).
|
|
Dans cet article, nous parlerons de la configuration de base, du moment
|
|
ou vous avez le serveur vierge dans les mains au moment ou vous
|
|
installez le serveur http.</p>
|
|
<p>Dans cet article, lorsque est précisée le type d’IP a utiliser, il
|
|
convient de mettre ce type précisément. Quand le type n’est pas
|
|
précisée, libre a vous de choisir ipv4 ou ipv6.</p>
|
|
<p>Bref. Commençons au point ou vous avez un accès root a votre serveur,
|
|
n’ayant soit aucun mot de passe, soit un choisi par l’hébergeur, et ou
|
|
rien n’est configuré. Connectez vous a celui-ci (ssh root@). Commencez
|
|
donc par faire un <code>passwd</code>, pour mettre au plus vite un mot de passe
|
|
solide sur le compte root. Continuons en allant vite mettre en place le
|
|
nom de domaine. Pour cela, votre registrar doit vous fournir une
|
|
interface vous permettant d’éditer l’entrée DNS pour votre nom de
|
|
domaine. </p>
|
|
<p>Cette entrée doit donc pour l’instant ressembler a ca :</p>
|
|
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> <votre nom de domaine> NS 1
|
|
IN MX 1
|
|
IN A <IPv4 de votre serveur>
|
|
IN AAAA <IPv6 de votre serveur>
|
|
</pre></div>
|
|
|
|
|
|
<p>Cela vous permet de rediriger tout le trafic se référant a votre nom de
|
|
domaine vers votre ip (le fonctionnement exact du DNS est assez
|
|
compliqué a expliquer, donc on va dire que c’est de la magie pour
|
|
l’instant, ca sera peut être le sujet d’un autre article), et d’indiquer
|
|
que les mails @votre-nom-de-domai.ne doivent aussi être redirigés vers
|
|
votre serveur, ce qui est un bon début. Faisons un petit point sécurité
|
|
ici : pour accéder a votre serveur, il vous suffit actuellement de taper
|
|
le mot de passe root.</p>
|
|
<p>root est un utilisateur <strong>assez</strong> répandu, et il est assez simple de
|
|
bruteforcer le mot de passe. (<em>Relativement</em> assez simple, en fonction
|
|
du nombre de caractères, ça prend plus ou moins de temps, et si vous
|
|
avez suffisamment de caractères, ça peut prendre un temps assez
|
|
conséquent. Cela dit, il vaut mieux être prudent…) Ainsi, nous allons
|
|
arrêter d’utiliser root et nous allons commencer a utiliser des couples
|
|
clés publiques/privées pour nous connecter au serveur.<br />
|
|
Cela se fait en deux temps : tout d’abord, créer un nouvel utilisateur,
|
|
grâce auquel nous administrerons le serveur a l’avenir; puis configurer
|
|
OpenSSH pour que celui ci n’accepte que les connections par clés et plus
|
|
celles sur root.</p>
|
|
<p>Commençons par ajouter un utilisateur. Si vous êtes sous debian, cela se
|
|
fait avec adduser, qui est interactif (vous ne devriez pas avoir de
|
|
problème avec, puisqu’il crée tout les dossiers et fichiers nécessaires,
|
|
et vous pose toutes les questions utiles pour vous aider.) sinon, vous
|
|
devrez utiliser useradd, qui est (en plus d’être très chiant a
|
|
distinguer de l’autre, bien plus chiant a utiliser. (adduser est en fait
|
|
un simple script permettant l’utilisation d’useradd plus facilement.)</p>
|
|
<p>Avec adduser, vous pouvez soit utiliser le mode interactif en tapant
|
|
juste <code>adduser <username></code>, soit utiliser le mode non-interactif
|
|
en faisant un <code>adduser --group <username></code></p>
|
|
<p>Avec useradd, vous devrez utiliser la commande suivante : <code>useradd -m
|
|
-N -g <username></code>. Cette commande ajoutera un utilisateur, créera
|
|
son dossier principal dans /home/, et l’ajoutera au groupe du même nom
|
|
que lui (ce qui est en général nécessaire pour des questions de vie
|
|
privée).</p>
|
|
<p>Il convient maintenant d’ajouter cet utilisateur aux groupes qu’il sera
|
|
amené a administrer: <code>usermod <username> -a -G www-data postfix
|
|
users staff sudo wheel</code>, puis de changer son mot de passe
|
|
<code>passwd</code>. Enfin, ajoutons le aux utilisateurs autorisés a utiliser
|
|
sudo: <code>echo "%sudo ALL=(ALL) ALL" >> /etc/sudoers</code><br />
|
|
Enfin, changeons d’utilisateur : <code>su</code>. A ce point, vous avec un
|
|
utilisateur complètement fonctionnel et utilisable pour toutes les
|
|
taches d’administration. Si vous devez encore utiliser root, c’est que
|
|
quelque chose ne va pas.</p>
|
|
<p>Vous êtes donc loggés sur le système en tant qu’utilisateur normal. Nous
|
|
allons maintenant passer a la phase 2 du plan : désactiver le login ssh
|
|
root et le login ssh par mot de passe.<br />
|
|
Tout d’abord, qu’est-ce qu’un login par clé ssh? Il s’agit en fait d’un
|
|
système assez semblable a celui vous permettant de chiffrer vos mail :
|
|
vous avec une clé publique et une clé privée sur le client, et la clé
|
|
publique est aussi sur le serveur. Lorsque vous vous connectez, openssh
|
|
vérifie que vous possédez la clé privée qui correspond a la clé publique
|
|
stockée sur le serveur (pour votre utilisateur, bien entendu). Il est
|
|
également possible d’utiliser plusieurs clés publique pour chaque<br />
|
|
utilisateur.</p>
|
|
<p>Bref, maintenant que nous avons la théorie, passons a la pratique : tout
|
|
d’abord, il nous faut générer un couple de clés publique/privée sur le
|
|
client. Openssh fait ça via la commande <code>ssh-keygen -t rsa</code> (le -t
|
|
rsa précise a ssh que nous voulons un chiffrement rsa, qui est
|
|
suffisamment solide pour cette utilisation.) Entrez les informations que
|
|
ssh-keygen vous demande. Trois fichiers devraient maintenant se trouver
|
|
dans votre dossier .ssh/ : id_rsa, id_rsa.pub, et known_hosts.<br />
|
|
known_hosts liste les serveurs auxquels vous vous êtes connectés déjà
|
|
une fois (pour éviter les attaques MITM, mais bref). Non, ce qui nous
|
|
intéresse ici c’est id_rsa et id_rsa.pub . id_rsa contient votre clé
|
|
privée, sauvegardez la sur une clé USB ou notez la sur un bout de
|
|
papier, si vous la perdez, vous ne pourrez plus vous connecter au
|
|
serveur. (planquez la clé usb/le bout de papier…) id_rsa.pub, quand a
|
|
lui, contient votre clé publique. Copiez la sur le serveur, avec un<code>scp ~/.ssh/id_rsa.pub <username>@<votre nom de domaine>:~/</code> , ou
|
|
en la copiant a la main, si ça vous amuse. </p>
|
|
<p>Vous avez maintenant un fichier id_rsa.pub dans votre dossier personnel
|
|
sur le serveur, il faut le mettre a un endroit ou openssh le reconnaitra.
|
|
Il est donc nécessaire de créer le dossier .ssh (<code>mkdir .ssh</code>), puis
|
|
de déplacer ce fichier a la bonne place (<code>mv ~/id_rsa.pub ~/.ssh/authorized_keys</code>).
|
|
Testez si ça fonctionne : ouvez un autre terminal, et<br />
|
|
connectez vous a votre serveur (<code>ssh <username>@<votre nom de
|
|
domaine></code>), et il ne devrait pas vous demander de mot de passe.<strong>Si
|
|
il vous en demande un, NE PASSEZ PAS A LA SUITE. Quelque chose a foiré,
|
|
donc vérifiez que vous avez suivi correctement les instruction
|
|
ci-dessus.</strong></p>
|
|
<p>Continuons. Il ne nous reste plus qu’a installer le serveur web, et a le
|
|
configurer: </p>
|
|
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo apt-get install \
|
|
apache2 apache2.2-common apache2-doc apache2-mpm-prefork \
|
|
apache2-utils libexpat1 ssl-cert libapache2-mod-php5 \
|
|
php5 php5-common php5-gd php5-cgi libapache2-mod-fcgid \
|
|
apache2-suexec php-pear php-auth php5-mcrypt mcrypt \
|
|
php5-imagick imagemagick libapache2-mod-suphp libruby \
|
|
libapache2-mod-ruby
|
|
</pre></div>
|
|
|
|
|
|
<p>(faisons large, on aura besoin de l’excédent plus tard…), puis activons les<br />
|
|
mods apache en faisant <code>a2enmod suexec rewrite ssl actions include
|
|
dav_fs dav auth_digest</code>, et faisons en sorte que ces activations
|
|
soient prises en compte par apache via un <code>sudo service apache2
|
|
restart</code> </p>
|
|
<p>Le serveur fonctionne, maintenant, il est necessaire de lui expliquer
|
|
comment fonctionner sur notre nom de domaine et ou trouver les fichiers
|
|
a envoyer. </p>
|
|
<p>Pour cela, nous allons faire un simple <code>ln -s /etc/apache2/sites-{available,enabled}/default</code>, car apache est assez
|
|
sympa pour nous filer un fichier de configuration par défaut. Il nous
|
|
faut encore l’éditer, en changeant l’adresse mail au début du document
|
|
par la votre, et en changeant <code>AllowOverride none</code> en <code>AllowOverride All</code>,
|
|
et enfin redémarrer apache pour qu’il prenne en compte les
|
|
modifications, par un <code>sudo service apache2 restart</code> </p>
|
|
<p>Et maintenant, il vous reste a apprendre le html, parce que ca y est,
|
|
votre serveur est fonctionnel! Voila voila. Dans la prochaine partie, on
|
|
verra l’installation du serveur mail (c’est suffisamment complexe pour
|
|
prendre un article seul…)</p>
|
|
</div><!-- /.entry-content -->
|
|
</article>
|
|
</section>
|
|
</div><!--/span-->
|
|
<div class="span3 well sidebar-nav" id="sidebar">
|
|
<ul class="nav nav-list">
|
|
|
|
|
|
<!-- Categories links -->
|
|
<li class="nav-header"><h4><i class="icon-folder-close icon-large"></i> Categories</h4></li>
|
|
<li>
|
|
<a href="//wxcafe.net/category/hacking/">
|
|
<i class="icon-folder-open icon-large"></i>Hacking
|
|
</a>
|
|
</li>
|
|
<li>
|
|
<a href="//wxcafe.net/category/note/">
|
|
<i class="icon-folder-open icon-large"></i>Note
|
|
</a>
|
|
</li>
|
|
<li>
|
|
<a href="//wxcafe.net/category/oses/">
|
|
<i class="icon-folder-open icon-large"></i>OSes
|
|
</a>
|
|
</li>
|
|
<li>
|
|
<a href="//wxcafe.net/category/ranting/">
|
|
<i class="icon-folder-open icon-large"></i>Ranting
|
|
</a>
|
|
</li>
|
|
<li>
|
|
<a href="//wxcafe.net/category/tutoriel/">
|
|
<i class="icon-folder-open icon-large"></i>Tutoriel
|
|
</a>
|
|
</li>
|
|
<li>
|
|
<a href="//wxcafe.net/category/vidya-games/">
|
|
<i class="icon-folder-open icon-large"></i>Vidya Games
|
|
</a>
|
|
</li>
|
|
<hr>
|
|
|
|
<!-- Social links -->
|
|
<li class="nav-header"><h4><i class="icon-exchange"></i> social</h4></li>
|
|
<a class="FlattrButton" style="display:none;"
|
|
title="//wxcafe.net"
|
|
style="padding-top: 10px;"
|
|
rel="flattr;
|
|
url://wxcafe.net;
|
|
title://wxcafe.net;
|
|
button:compact;
|
|
popout:0;
|
|
uid:wxcafe;
|
|
category:blog;"
|
|
href="//wxcafe.net">flattr</a>
|
|
<li><a href="https://twitter.com/wxcafe"><i class="icon-twitter icon-large"></i> Twitter</a></li>
|
|
<li><a href="https://github.com/wxcafe"><i class="icon-github icon-large"></i> Github</a></li>
|
|
<li><a href="mailto://wxcafe@wxcafe.net"><i class="icon-envelope icon-large"></i> Email</a></li>
|
|
<li><a href="https://pub.wxcafe.net/wxcafe.asc"><i class="icon-key icon-large"></i> Gpg</a></li>
|
|
<li><a href="https://www.openstreetmap.org/relation/105146"><i class="icon-map-marker icon-large"></i> IRL</a></li>
|
|
|
|
<hr>
|
|
|
|
<!-- Links -->
|
|
<li class="nav-header"><h4><i class="icon-external-link"></i> Links</h4></li>
|
|
<li><a href="https://github.com/wxcafe/blog-source"><i class="icon-code icon-large "></i> Source!</a></li>
|
|
<li><a href="http://git.wxcafe.net"><i class="icon-github-sign icon-large "></i> Public Git</a></li>
|
|
<hr>
|
|
|
|
<!--- RSS feed -->
|
|
<li class="nav-header"><h4><i class="icon-rss"></i> feeds</h4></li>
|
|
<li><a href="//wxcafe.net/feeds/feed.rss.xml" rel="alternate"><i class="icon-bookmark-empty icon-large"></i> RSS</a></li>
|
|
<li><a href="//wxcafe.net/feeds/feed.atom.xml" rel="alternate"><i class="icon-bookmark-empty icon-large"></i> Atom</a></li>
|
|
|
|
|
|
</ul> </div><!--/.well -->
|
|
</div><!--/row-->
|
|
<hr>
|
|
<footer>
|
|
<address id="about">
|
|
Proudly powered by <a href="http://pelican.notmyidea.org/">Pelican</a>,
|
|
which takes great advantage of <a href="http://python.org">Python</a>.<br />
|
|
Powered by <a href="https://github.com/getpelican/pelican-themes/tree/master/bootstrap2">bootstrap2</a> theme, thanks!
|
|
</address>
|
|
</footer>
|
|
</div><!--/.fluid-container-->
|
|
</body>
|
|
</html> |