Try   HackMD

Ce petit tuto a pour but de vous aider à créer un petit serveur Web Apache2 pour plusieurs utilisateurs

Installer le VPS__

Pour une connexion SSH sécurisée, suivez ce lien :

SSH : Connection sécurisée

Modifier le port d'écoute par défaut du service SSH__

L'écoute est par défaut définie sur le port 22. Il est donc déconseillé de le laisser comme tel et de modifier ce dernier.
Toujours dans votre connexion SSH tapez la commande ci-dessous afin de modifier le fichier de configuration du service :

# vi /etc/ssh/sshd_config

# What ports, IPs and protocols we listen for
Port 22

Remplacer le nombre 22 par celui de votre choix. Par exemple : 22223.
Veuillez toutefois ne pas renseigner un numéro de port déjà utilisé sur votre système !
Sauvegardez puis quittez le fichier de configuration (Ctrl X puis validez).
Il vous faut ensuite redémarrer votre service :

# /etc/init.d/ssh restart

A présent, lors de votre demande de connexion SSH sur votre machine il vous faudra obligatoirement renseigner le nouveau port :

# ssh root@<serveur> -p NouveauPort

Modifier le mot de passe associé à l'utilisateur "root"

Il est important de modifier le mot de passe reçu lors de l'installation.
Une personne ayant pu le récupérer via votre espace client ou votre adresse mail pourrait l'utiliser à vos dépends.
Pour modifier le mot de passe "root" tapez la commande suivante :

# passwd root

Votre système vous demandera alors de rentrer votre nouveau mot de passe par deux fois. 
Veuillez noter néanmoins que votre mot de passe ne s'affichera pas lors de l'écriture par mesure de sécurité. Vous ne pourrez donc pas voir les caractères saisis.
Une fois cette opération terminée, dès les prochaines connexions sur votre système il vous faudra renseigner le nouveau mot de passe.

Créer un utilisateur avec des droits restreints et agir sur le système avec les droits "root"

La création d'un nouvel utilisateur se fait avec la commande suivante :

# adduser <pseudo>

Remplissez ensuite les différentes informations demandées par le système (Mot de passe, Nom etc).
Cette utilisateur sera autorisé à se connecter sur votre système en SSH avec le mot de passe indiqué lors de sa création. 
Une fois connecté sur votre système avec ce dernier, si vous souhaitez effectuer des opérations nécessitant les droits root, il suffira de taper la commande suivante et indiquer le mot de passe associé à l'utilisateur root pour valider l'opération.

$ su root

Désactiver l'accès au serveur via l'utilisateur "root"

L'utilisateur root est par défaut, sur les système UNIX, celui qui possède le plus de droits sur votre système. Il est déconseillé et dangereux de laisser votre VPS uniquement accessible via cet utilisateur, ce dernier pouvant effectuer des opérations irréversibles sur votre serveur.
Il est recommandé de désactiver son accès direct via le protocole SSH.
Pour effectuer cette opération, il faut modifier le fichier de configuration SSH :

# vi /etc/ssh/sshd_config

Repérez ensuite la section suivante :

​​​​    # Authentication:
​​​​    LoginGraceTime 120
​​​​    PermitRootLogin yes <-
​​​​    StrictModes yes

Remplacez le yes par no pour la ligne PermitRootLogin.
Pour que cette modification puisse être prise en compte il faut redémarrer le service SSH :

# /etc/init.d ssh restart

Maintenant, afin de pouvoir vous connecter sur votre système il vous faut utiliser l'utilisateur que vous venez de créer.

Créer un sous-domaine dans OVH

Domaine TTL Type Cible
portfolio.alternative-rvb.com. 0 CNAME alternative-rvb.com
domain 0 CNAME 'domaine principale'

Installer apache2

# apt-get install apache2

(On peut changer le répertoire cible : nano /etc/apache2/sites-enabled/000-default.conf)

Installer PHP ( 5 ou 7 )

# apt-get install php

Attention à ce que le paquet libapache2-mod-php7.2 soit bien installé
sinon # apt-get install libapache2-mod-php

Vérifier:

$ a2query -m php7.2

Installer mysql

# apt-get install mysql-server
# mysql –m (ou p)
# mysql

Puis dans la console MySQL :

>GRANT ALL ON *.* TO 'nom_utilisateur_choisi'@'localhost' IDENTIFIED BY 'mot_de_passe_solide' WITH GRANT OPTION;
>FLUSH PRIVILEGES;
>QUIT;

Installer des librairies php-mysql

# apt-get install php-mysql

Securiser l'installation de mysql

# mysql_secure_installation

Installer phpMyAdmin

# apt-get install phpmyadmin
# ln -s /usr/share/phpmyadmin /var/www/html/phpmyadmin

{% hint style="info" %}
Option :

# dpkg-reconfigure phpmyadmin

{% endhint %}

Activer PHP pour les dossiers utilisateurs

# vi /etc/apache2/mods-available/php7.2.conf

Et commenter les dernières lignes

OU

# vi /etc/apache2/mods-available/userdir.conf

Et insérer les lignes :

<IfModule mod_userdir.c>
        UserDir /home/*/public_html

        <Directory /home/*/public_html>
                AllowOverride FileInfo AuthConfig Limit Indexes
                Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
                IndexOptions FancyIndexing HTMLTable <-
                php_admin_flag engine On <-
                Require method GET POST OPTIONS
        </Directory>
</IfModule>

# vi: syntax=apache ts=4 sw=4 sts=4 sr noet

Normalement vous pourrez accéder au site de l'utilisateur à l'adresse :
[ localhost/~ user ]

Installation des virtualhosts

Activer le module userdir :

# a2enmod userdir

Créer un squelette pour les utilisateurs :

# mkdir /etc/skel/public_html
# mkdir /etc/skel/logs
# echo " <h1>Nouvel espace web crée</h1> " > /etc/skel/public_html/index.html

Une fois le squelette créé, on peut créer un nouvel utilisateur
(ici domain = portfolio.alternative-rvb.com) :
(ici pseudo = portfolio)

# useradd -g www-data -m pseudo (ou adduser pseudo && adduser pseudo www-data)

On crée un nouveau fichier /etc/apache2/sites-available/domain.conf

# nano /etc/apache2/sites-available/domain.conf

Et on y enregistre :

<VirtualHost *:80>
        ServerAdmin postmaster@domain
        ServerName domain
        ServerAlias www.domain
        DocumentRoot /home/pseudo/public_html/
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /home/pseudo/public_html/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ErrorLog /home/pseudo/logs/error.log
        LogLevel warn
</VirtualHost>

Lors de la créations de virtualhosts :

# apache2ctl -t
# /etc/init.d/apache2 restart

On valide et on ferme le fichier. On rend le domaine créé disponible.

# ln -s /etc/apache2/sites-available/domain.conf  /etc/apache2/sites-enabled/domain.conf

On vérifie que la syntax est bonne :

# apache2ctl -t

Si en retour on obtient un « Syntax OK », on redémarre apache2 :

Normalement vous devriez pouvoir accéder à [ http://IP_DE_VOTRE_SERVEUR/~zone-web/ ] et y voir Nouvel espace web crée

Configurer serveur FTP

[…]

Empêcher l'accès au serveur via son adresse IP

Pour des raisons diverses, on peut souhaiter empêcher les utilisateurs ne découvrant que l'adresse IP du serveur, de consulter son contenu.

La syntaxe est la suivante: il suffit de modifier le fichier /etc/apache2/sites-enabled/000-default, et d'y ajouter au début un VirtualHost répondant à l'adresse IP:

<VirtualHost  www.xxx.yyy.zzz:80>
        ServerName www.xxx.yyy.zzz
        <Directory />
                Deny from all
        </Directory>
</VirtualHost>

Où "www.xxx.yyy.zzz" est l'adresse IP publique du serveur.

Le Deny from all bloque l'accès à tout client qui appelle le site via l'adresse IP du serveur.

On garde ensuite, dans le même fichier, la configuration habituelle, avec une petite modification:

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName mon_joli_domaine
        [...]
</VirtualHost>

Il faut ajouter la directive ServerName et y placer le nom de domaine du serveur.Cela peut-être un nom dynamique (fourni par des services comme no-ip ou Dyndns).

Attention: cette technique n'est pas, à proprement parler, une "sécurisation". Elle évite juste de recevoir du trafic inutile de la part de bots, ou de se faire fouiller son serveur par des gens pratiquant le scan de port. Bien évidemment, si vous rendez publique le nom de domaine menant à votre serveur, ça ne change pas grand chose.