20 Avr Mettre en place rapidement un serveur sous Debian 8
Ce petit billet – qui sera obligatoirement un peu long en fait – n’a pas pour but de vous présenter le paramétrage d’un serveur digne des plus grands centres sécurisés mais juste de mettre en place en peu de temps en serveur qui fonctionne correctement et avec un minimum de sécurisation (qu’il faudra ensuite bien évidemment approfondir).
Nota : l’ensemble décrira la mise en place d’une Debian 8 “Jessie”, si vous utilisez une autre distribution, il faudra certainement adapter quelques points !
C’est utilisable pour des hébergements genre VPS ou pour un serveur perso dont vous aurez fait une installation minimale.
Pour celles et ceux peu habitués au mode console, les lignes ci-dessous qui débutent par un $ sont celles d’un utilisateur “lambda”, celles avec un # sont exécutées en tant que root (l’admin si vous préférez). Je parts du principe que nous allons travailler à distance donc sans accès physique au serveur.
1 – Préambule
Première chose à faire, installer les éventuelles mises à jour qui seraient disponibles :
# apt-get update
# apt-get upgrade
On va commencer par modifier le port SSH et bloquer l’accès via root donc pour cela, il va falloir créer un nouvel utilisateur (que je vais appeler toto pour faire simple) :
# adduser toto (indiquez le mot de passe choisi – à confirmer – et quelques infos optionnelles)
Nous allons à présent modifier le fichier sshd_config :
# nano /etc/ssh/sshd_config
Nous allons dans un premier temps juste modifier le port (22 par défaut) pour 1901 (mettez ici le port de votre choix, tant que ce n’est pas un déjà utilisé par un autre protocole) et empêcher root de se connecter directement en SSH. Il faut donc modifier les lignes suivantes :
Port 1901
PermitRootLogin no
Une fois ces modifications effectuées, on redémarre le service SSH :
# /etc/init.d/ssh restart
2 – Installation des éléments de base du serveur
À présent, nous allons installer Apache MPM Worker (lire ici pour plus de détails), et php5 :
Nota : Le choix d’Apache est volontaire ici – même si je songe à titre perso à passer à Nginx – et les options telles que mpm_worker et php5-fpm sont liées à la volonté d’avoir un serveur avec des perfs correctes pour du multi-sites.
# apt-get install apache2-mpm-worker libapache2-mod-fastcgi php5-fpm
Une fois l’installation effectuée, vous pouvez aller modifier certains paramètres dans la configuration de mpm_worker (à condition de savoir ce que vous faites) :
# nano /etc/apache2/mods-available/mpm_worker.conf
Nous chargeons ensuite quelques modules qui vont nous être utiles :
# a2enmod actions alias fastcgi
Puis, nous allons modifier le fichier de configuration de fastcgi :
# nano /etc/apache2/mods-enabled/fastcgi.conf
Ci-dessous une version de base proposée, mais faites vos propres recherches pour éventuellement l’adapter en fonction de vos besoins :
<IfModule mod_fastcgi.c>
AddType application/x-httpd-fastphp .php
Action application/x-httpd-fastphp /php-fcgi
#PHP5
Alias /php-fcgi /usr/lib/cgi-bin/php5-fcgi
FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -appConnTimeout 10 -idle-timeout 250 -socket /var/run/php5-fpm.sock -pass-header Authorization
# Apache 2.4+
<Directory /usr/lib/cgi-bin>
Require all granted
</Directory>
</IfModule>
Nous allons ensuite désactiver le module php5 et charger celui de mpm_worker (à priori celui de php5 n’est pas chargé mais par principe je vérifie) :
# a2dismod php5
# a2enmod mpm_worker
Nota : j’ai eu sur plusieurs essais des erreurs au moment de charger mpm_worker (avec soit mpm_event soit mpm_prefork de déjà chargé). Dans ce cas là, désactivez le module au préalable puis refaites le chargement de mpm_worker.
Nous redémarrons ensuite les services pour que ça soit pris en compte :
# service php5-fpm restart
# service apache2 restart
Dernière commande de cette partie, celle permettant de charger le module userdir (pour utiliser le répertoire public_html des users plutôt que /var/www) :
# a2enmod userdir
3 – Installation d’une base de données et de son gestionnaire en ligne
Pour faire différent de la plupart des articles de ce genre, je ne vais pas installer MySQL mais PostgreSQL (parce que c’est ce que nous utilisons au boulot, tout simplement). Pour MySQL je vous invite à consulter la documentation spécifique (mais dans l’absolu, ça reste assez proche pour l’installation de base).
# apt-get install postgresql-9.4 postgresql-client-9.4 phppgadmin
1ère étape, le mot de passe de l’utilisateur postgres :
# passwd postgres (choix à entrer et confirmer)
Nous allons ensuite nous connecter en tant que user postgres et créer un user toto pour aller avec le même user local :
su – postgres
createuser -P –interactive toto
Enter password for new role:
Enter it again:
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) y
Vous pouvez ensuite créer une base – ici basatoto – pour cet utilisateur :
createdb -O toto -E UTF8 baseatoto
En cas de besoin, vous pouvez supprimer un user avec la commande suivante :
dropuser toto
Pour quitter et revenir sur l’user root, tapez simplement exit !
Si nécessaire, vous pouvez reconfigurer phppgadmin avec la commande :
# apt-reconfigure phppgadmin
Nota : j’ai laissé le chemin par défaut d’accès à phppgadmin (soit mon_domaine.fr/phppgadmin). Ça peut se modifier et je vous le conseille.
Par défaut, phppgadmin n’est accessible qu’en local. Pour modifier cela, il faut aller dans le fichier suivant :
# nano /etc/apache2/conf-available/phppgadmin.conf
Vous devez modifier l’information suivante :
Require local en Require allow from all
Ensuite nous redémarrons PostgreSQL :
# service posgresql restart
4 – On va à présent configurer un virtual host
Nous allons partir du principe que vous possédez le domaine toto.fr et que vous souhaitez utiliser un sous-domaine blog (pour la partie chez le registar, je vous laisse voir comment ça se passe avec le vôtre). Nous avons donc renseigné les éléments pour que les requêtes vers blog.toto.fr arrivent sur notre serveur, nous allons donc faire en sorte que ça pointe vers le bon répertoire à présent.
Dans notre exemple, nous aurons une architecture ainsi configurée pour nos users (là où sont déposés les sites) :
/home -> /toto -> /public_html -> /www
/home -> /toto -> /public_html -> /blog
Nous souhaitons donc que l’adresse blog.toto.fr aille chercher ledit blog dans /home/toto/public_html/blog donc nous allons créer le fichier qui va bien :
# touch /etc/apache2/sites-available/blogtotofr.conf
Puis nous allons l’éditer et le compléter (version un peu simplifiée ici) :
<VirtualHost *:80>
ServerAdmin moi@toto.fr
ServerName blog.toto.fr
ServerAlias blog.toto.fr
DocumentRoot /home/toto/public_html/blog
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /home/toto/public_html/blog>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny allow from all
</Directory>
</VirtualHost>
Nous allons ensuite charger ce vhost dans Apache :
# a2ensite blogtotofr.conf
Nous rechargeons ensuite Apache :
# service apache2 reload
Nota : j’ai rencontré à certaines occasions un petit problème. Le module php5 se retrouve chargé en lieu et place de mpm_worker donc si vous rencontrez un ennui à ce stade, il faut refaire les étapes a2dismod php5 puis a2enmod mpm_worker indiquées plus haut dans la fin du chapitre 2 !
5 – Installons à présent Exim pour pouvoir envoyer des mails via php
Le choix d’Exim est purement subjectif et je ne vais indiquer ici qu’un paramétrage très sommaire (et en aucun cas un serveur de mails !)
#apt-get install exim4 exim4-config
Nous allons ensuite le configurer pour nos besoins :
# dpkg-reconfigure exim4-config
Nous mettrons “site internet” dans notre exemple. Laissez une partie des paramètres autres par défaut. Renseignez ceux dont vous êtes certains et ça devrait suffire.
Vous pouvez modifier également à la main les paramètres :
# nano /etc/exim4/update-exim4.conf.conf
Nous redémarrons ensuite Exim :
# /etc/init.d/exim4 restart
6 – Accédons à notre site via filezilla en SFTP
Pour déposer des fichiers sur son site, utiliser un logiciel tel que Filezilla (ou autre similaire) s’avère utile pour bien des utilisateurs.
Comme je n’ai pas envie de me prendre la tête à configurer un serveur FTP et que je veux que ça soit un minimum sécurisé, je vais utiliser MySecureShell.
Ses avantages :
- hyper simple à installer
- hyper simple à paramétrer
Son inconvénient :
- vous n’aurez plus accès au shell pour les users l’utilisant donc plus d’accès SSH pour toto
En fait, son inconvénient est aussi une partie de sa force donc c’est à relativiser !
Nous allons donc l’installer :
# apt-get install mysecureshell
Je vais à présent créer un user marcel (qui me servira uniquement à accéder à mon serveur en SSH, cf. l’inconvénient) :
# adduser marcel (complétez ce qui est demandé)
Nous allons à présent dire que pour l’user toto c’est MySecureShell qui sera utilisé et non bash (par défaut) :
# nano /etc/passwd
Allez sur la ligne de votre user (ici toto) et modifiez le shell en fin de ligne :
…/bin/bash par ../usr/bin/mysecureshell
Ensuite, donnez les infos nécessaires pour la connexion :
# nano /etc/ssh/sftp_config
Vous aurez sans doute un fichier pré-rempli, commentez tout et indiquez ce qui est ci-dessous, vous pourrez ensuite affiner une fois que vous saurez ce que vous souhaitez exactement :
<User toto>
Home /home/toto/public_html <- l’arborescence ne pourra pas être remontée, juste descendue
StayAtHome true
VirtualChroot true
LimitConnectionByUser 3
LimitConnectionByIP 3
HideNoAccess true
DefaultRights 0604 0705
IgnoreHidden true <- si vous souhaitez masquer les fichiers cachés (peu pratique par contre)
</User>
Nous sommes arrivé au bout. Vous avez un serveur fonctionnel. Il devra bien sûr être amélioré mais en une petite heure, vous aurez déjà de quoi travailler correctement.
N’hésitez pas à commenter si vous pensez que certaines parties devraient être modifiées et/ou complétées.







No Comments