Mettre en place rapidement un serveur sous Debian 8

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.

Facebooktwittergoogle_plusredditpinterestlinkedintumblrmail
No Comments

Laisser un commentaire

%d blogueurs aiment cette page :