--- title: Serveur Web Apache2 multi-utilisateurs tags: Serveur lang: fr image: description: GA: UA-68715119-9 disqus: hackmd author: Nicolas Malet --- 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](4.0-ssh-connexion-securisee.md) ## 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 : ```bash # 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 : ```bash # /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 : ```bash # 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 : ```bash # 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 : ```bash # 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. ```bash $ 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 : ```bash # 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 : ```bash # /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 ```bash # apt-get install apache2 ``` (On peut changer le répertoire cible : nano /etc/apache2/sites-enabled/000-default.conf) ## Installer PHP ( 5 ou 7 ) ```bash # 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: ```bash $ a2query -m php7.2 ``` ## Installer mysql ```bash # apt-get install mysql-server # mysql –m (ou p) # mysql ``` Puis dans la console MySQL : ```sql >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 ```bash # apt-get install php-mysql ``` ## Securiser l'installation de mysql ```bash # mysql_secure_installation ``` ## Installer phpMyAdmin ```bash # apt-get install phpmyadmin # ln -s /usr/share/phpmyadmin /var/www/html/phpmyadmin ``` {% hint style="info" %} Option : ```bash # dpkg-reconfigure phpmyadmin ``` {% endhint %} ## Activer PHP pour les dossiers utilisateurs ```bash # vi /etc/apache2/mods-available/php7.2.conf ``` Et commenter les dernières lignes OU ```bash # 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 : ```bash # a2enmod userdir ``` Créer un squelette pour les utilisateurs : ```bash # 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) ```bash # 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 ```bash # 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 : ```bash # apache2ctl -t # /etc/init.d/apache2 restart ``` On valide et on ferme le fichier. On rend le domaine créé disponible. ```bash # ln -s /etc/apache2/sites-available/domain.conf /etc/apache2/sites-enabled/domain.conf ``` On vérifie que la syntax est bonne : ```bash # 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. {%hackmd @alternative-rvb/contact %}