Aller au contenu
Administration serveur

Utilisateurs

Utilisateurs

Introduction à SSH

SSH, acronyme de Secure Shell, est un protocole de communication sécurisé largement utilisé pour administrer et communiquer avec des serveurs à distance. Il fournit un canal de communication crypté entre votre machine locale et un serveur distant, ce qui permet d'exécuter des commandes et de transférer des fichiers de manière sécurisée.

Une des caractéristiques clés de SSH est l'utilisation de paires de clés pour l'authentification. Une paire de clés SSH se compose d'une clé publique, qui peut être partagée librement, et d'une clé privée, qui doit être gardée secrète. Lorsque vous vous connectez à un serveur SSH, le serveur utilise la clé publique pour créer un message crypté que seule la clé privée correspondante peut déchiffrer. Si vous pouvez déchiffrer le message et le renvoyer au serveur, le serveur sait que vous êtes en possession de la clé privée et vous autorise à vous connecter.

L'utilisation de clés SSH offre plusieurs avantages par rapport à l'authentification par mot de passe. Tout d'abord, elle permet une authentification sans mot de passe, ce qui est plus pratique et potentiellement plus sûr si votre clé privée est bien protégée. Deuxièmement, elle permet une authentification à deux facteurs lorsque vous utilisez à la fois une clé SSH et un mot de passe. Enfin, elle permet de limiter les connexions SSH à certaines clés publiques, ce qui peut renforcer la sécurité de votre serveur.

Première connexion SSH au serveur

Lorsque vous installez un nouveau VPS, le fournisseur vous envoie généralement les informations de connexion initiales par email. Ces informations comprennent l'adresse IP du serveur, le nom d'utilisateur (habituellement root ou admin) et un mot de passe.

Pour vous connecter à votre serveur pour la première fois, vous pouvez utiliser la commande ssh dans votre terminal. Par exemple :

ssh root@your_server_ip

Remplacez root par le nom d'utilisateur fourni et your_server_ip par l'adresse IP ou le nom d’hôte de votre serveur.

La première fois que vous vous connectez à un serveur, SSH vous demandera de vérifier l'empreinte digitale du serveur. Si vous acceptez, cette empreinte digitale sera stockée et utilisée pour vérifier l'identité du serveur lors des connexions futures.

Mise à jour du système

Une fois que vous avez établi une connexion sécurisée à votre serveur via SSH et que vous avez configuré vos utilisateurs et leurs clés, la première tâche à effectuer est de mettre à jour le système. Cette étape est cruciale pour assurer la sécurité et la stabilité de votre serveur.

Pourquoi mettre à jour le système ?

Les mises à jour du système d'exploitation sont essentielles pour plusieurs raisons :

  1. Sécurité : Les mises à jour contiennent souvent des correctifs pour des vulnérabilités de sécurité découvertes. En gardant votre système à jour, vous minimisez le risque d'être compromis par des attaquants.

  2. Stabilité : Les mises à jour apportent également des corrections de bugs qui peuvent affecter la stabilité du système.

  3. Fonctionnalités : Les nouvelles versions des logiciels peuvent offrir de nouvelles fonctionnalités ou améliorations.

Comment mettre à jour le système ?

Sur un serveur VPS basé sur Ubuntu, vous pouvez utiliser les commandes suivantes pour mettre à jour le système :

sudo apt-get update
sudo apt-get upgrade

La commande sudo apt-get update met à jour la liste des paquets disponibles à partir des dépôts configurés dans le système.

La commande sudo apt-get upgrade installe les nouvelles versions des paquets installés sur le système.

Il est recommandé de redémarrer le serveur après une mise à jour, surtout si le noyau du système ou des services importants ont été mis à jour. Vous pouvez le faire en utilisant la commande suivante :

sudo reboot

Modification du mot de passe de root

Le compte root est le compte d'administrateur par défaut sur les systèmes Linux. Il possède des privilèges illimités et peut effectuer n'importe quelle opération sur le système. Par conséquent, il est essentiel de protéger ce compte avec un mot de passe fort.

Comment modifier le mot de passe de root ?

Pour modifier le mot de passe de root, vous pouvez utiliser les commandes suivantes :

sudo su
passwd

La première commande, sudo su, vous permet de passer au compte root. La seconde commande, passwd, vous invite à entrer un nouveau mot de passe pour le compte root.

Sur une distribution Linux, le mot de passe que vous tapez n'apparaîtra pas pour des raisons de sécurité. Vous devrez entrer le mot de passe deux fois pour confirmer que vous l'avez tapé correctement.

Gestionnaire de mots de passe

Il est fortement recommandé d'utiliser un générateur de mots de passe pour créer un mot de passe fort et unique pour le compte root. Les générateurs de mots de passe créent des mots de passe qui sont difficiles à deviner ou à craquer.

De plus, utiliser un gestionnaire de mots de passe peut vous aider à gérer vos mots de passe. Un gestionnaire de mots de passe stocke vos mots de passe de manière sécurisée et vous permet de les récupérer facilement lorsque vous en avez besoin.

https://bitwarden.com/ - Gestionnaire de mot de passe open-source.

Création des utilisateurs

Une fois que vous avez une compréhension de base de SSH, vous pouvez commencer à configurer votre serveur. La première étape consiste à créer des utilisateurs.

Utilisateur admin

Sur votre serveur, vous pouvez utiliser la commande adduser pour créer un nouvel utilisateur. Par exemple, pour créer un utilisateur nommé admin, vous pouvez utiliser la commande suivante :

sudo adduser admin

Cette commande crée un nouvel utilisateur et un groupe avec le même nom, ainsi qu'un répertoire personnel pour l'utilisateur.

Utilisateur deployer

De la même manière, pour créer un utilisateur dédié aux déploiements, nommé deployer, utilisez la commande suivante :

sudo adduser deployer

Ces deux utilisateurs auront des droits standard sur le système. Si vous avez besoin qu'ils aient des droits d'administrateur, vous devrez les ajouter sudoers, ce que nous aborderons dans une section ultérieure.

Il est important d'avoir des utilisateurs séparés pour différentes tâches sur votre serveur. Cela permet d'isoler les droits et les responsabilités, ce qui peut améliorer la sécurité et l'organisation de votre serveur.

Gestion des droits d'administrateur

Dans le cadre de l'administration d'un serveur, certains utilisateurs peuvent avoir besoin de droits d'administrateur pour accomplir certaines tâches. Dans Ubuntu et la plupart des autres distributions Linux, ces privilèges peuvent être accordés en ajoutant l'utilisateur au groupe sudo.

Ajout des utilisateurs au groupe sudo

Au lieu de modifier directement le fichier sudoers, qui peut être délicat et risqué, nous allons utiliser la commande usermod pour ajouter nos utilisateurs au groupe sudo. Les membres de ce groupe ont la capacité d'exécuter des commandes en tant que root via la commande sudo.

Voici comment ajouter les utilisateurs admin et deployer au groupe sudo :

sudo usermod -aG sudo admin
sudo usermod -aG sudo deployer

La commande usermod -aG sudo userName ajoute l'utilisateur spécifié (dans ce cas, admin et deployer) au groupe sudo.

Implications en termes de sécurité et de contrôle

Donner à un utilisateur des privilèges d'administrateur est une décision importante qui a des implications en termes de sécurité et de contrôle. Un utilisateur avec des privilèges d'administrateur peut effectuer des changements majeurs sur le système, y compris des actions qui peuvent rendre le système instable ou vulnérable aux attaques.

Il est donc essentiel de ne donner des privilèges d'administrateur qu'aux utilisateurs qui en ont besoin pour leurs tâches, et de s'assurer qu'ils comprennent les responsabilités qui accompagnent ces privilèges.

Gestion des clés SSH

Maintenant que vous avez vos utilisateurs, vous voulez probablement être en mesure de vous connecter à votre serveur via SSH. Pour ce faire, vous devez générer une paire de clés SSH sur votre machine locale et copier la clé publique sur votre serveur.

Génération d'une paire de clés SSH

Sur votre machine locale (Ubuntu 22 avec WSL), vous pouvez utiliser la commande ssh-keygen pour générer une nouvelle paire de clés SSH. Par exemple :

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

Cette commande génère une nouvelle paire de clés RSA de 4096 bits. Vous pouvez remplacer "your_email@example.com" par votre propre adresse e-mail ou tout autre identifiant que vous souhaitez utiliser.

Lors de la génération des clés, vous pourrez les nommer comme vous le désirez. Je vous conseille de donner un nom composé des informations importantes. Par exemple, [nom_utilisateur]-[nom_serveur]-[nom_ordinateur_client].

https://manpages.ubuntu.com/manpages/lunar/en/man1/ssh-keygen.1.html

Copie des clés SSH sur le serveur

Une fois que vous avez une paire de clés, vous devez copier la clé publique sur votre serveur. Vous pouvez le faire avec la commande ssh-copy-id. Par exemple, pour copier votre clé publique sur le compte admin sur votre serveur, vous pouvez utiliser la commande suivante :

ssh-copy-id -i ~/.ssh/nomDeLaClé admin@your_server_ip

De même, pour copier la clé publique sur le compte deployer, utilisez la commande suivante :

ssh-copy-id -i ~/.ssh/nomDeLaClé deployer@your_server_ip

Remplacez your_server_ip par l'adresse IP ou le nom d’hôte de votre serveur.

Une fois que vous avez copié vos clés publiques, vous devriez être en mesure de vous connecter à votre serveur avec la commande ssh sans avoir besoin de mot de passe. Par exemple :

ssh admin@your_server_ip

ou

ssh deployer@your_server_ip

Utilisation de SSH Agent et du fichier .ssh/config

Lorsque vous travaillez avec plusieurs serveurs distants et différents utilisateurs, la gestion des clés SSH peut devenir complexe. Pour simplifier ce processus, vous pouvez utiliser l'agent SSH et le fichier de configuration SSH.

Qu'est-ce que l'agent SSH ?

L'agent SSH est un programme en arrière-plan qui gère vos clés privées SSH pour vous. Il garde vos clés privées en mémoire et utilise les clés pour se connecter aux serveurs distants sans avoir à taper votre mot de passe à chaque fois.

Comment utiliser l'agent SSH ?

Voici une série de commandes qui illustrent comment utiliser l'agent SSH :

  1. Démarrer l'agent SSH : L'agent SSH doit être en cours d'exécution pour pouvoir utiliser vos clés. Vous pouvez démarrer l'agent SSH avec la commande suivante :

    eval $(ssh-agent)
    
  2. Ajouter votre clé privée à l'agent : Pour que l'agent SSH puisse utiliser votre clé privée, vous devez l'ajouter à l'agent. Vous pouvez le faire avec la commande suivante :

    ssh-add /chemin/vers/la/clé/privée
    
  3. Ajouter plusieurs clés : Vous pouvez ajouter plusieurs clés à l'agent SSH. Par exemple :

    ssh-add ~/.ssh/id_rsa
    ssh-add ~/.ssh/id_rsa_entreprise
    
  4. Vérifier les clés ajoutées : Vous pouvez vérifier quelles clés sont actuellement gérées par l'agent SSH avec la commande suivante :

    ssh-add -l
    

Qu'est-ce que le fichier .ssh/config ?

Le fichier .ssh/config est un fichier de configuration qui permet de définir des paramètres pour chaque hôte, ce qui facilite la connexion à différents serveurs.

Comment utiliser le fichier .ssh/config ?

Pour utiliser le fichier .ssh/config, vous devez créer ou modifier le fichier dans votre répertoire ~/.ssh. Vous pouvez le faire avec la commande suivante :

touch ~/.ssh/config

Ensuite, vous pouvez éditer le fichier pour définir les paramètres pour chaque hôte. Voici un exemple de configuration :

Host admin.serveur.com
        HostName serveur.com
        User admin
        IdentitiesOnly yes
        IdentityFile ~/.ssh/admin-vps-pc

Host deployer.serveur.com
        HostName serveur.com
        User deployer
        IdentitiesOnly yes
        IdentityFile ~/.ssh/deployer-vps-pc

Dans cet exemple :

  • Host : C'est le nom que vous utiliserez pour vous connecter au serveur.
  • HostName : C'est le nom d'hôte réel ou l'adresse IP du serveur.
  • User : C'est le nom d'utilisateur que vous utiliserez pour vous connecter au serveur.
  • IdentitiesOnly yes : Cette option indique à SSH de n'utiliser que les clés indiquées dans le fichier de configuration.
  • IdentityFile : C'est le chemin vers le fichier de clé privée que vous utiliserez pour vous connecter au serveur.

Grâce à l'agent SSH et le fichier .ssh/config, vous pouvez gérer vos connexions SSH de manière plus efficace et sécurisée.

Maintenant, pour vous connecter au serveur en tant qu’administrateur avec cette commande :

ssh admin.serveur.com

La connexion se fait maintenant avec votre clé SSH, plus besoin de mot de passe !

Désactivation de la connexion par mot de passe et sécurité des clés SSH

Lorsqu'il s'agit de sécuriser les connexions SSH à votre serveur, l'utilisation de clés SSH est souvent considérée comme plus sûre que l'utilisation de mots de passe. Une des raisons principales est la résistance des clés SSH aux attaques de force brute, qui sont une menace courante pour les serveurs accessibles sur Internet.

Pourquoi les clés SSH sont-elles plus sûres ?

Une clé SSH est une paire de clés cryptographiques, l'une publique et l'autre privée. La clé privée reste sur votre machine locale et doit rester secrète. La clé publique peut être partagée et est ajoutée au serveur. Lorsque vous vous connectez au serveur, il utilise la clé publique pour crypter un message qui ne peut être déchiffré qu'avec la clé privée correspondante.

Par conséquent, même si un attaquant réussit à intercepter la communication, il ne pourra pas déchiffrer le message et donc ne pourra pas se connecter au serveur. De plus, une clé SSH est généralement beaucoup plus longue qu'un mot de passe, ce qui la rend beaucoup plus difficile à craquer par force brute.

Comment désactiver la connexion par mot de passe ?

Pour améliorer la sécurité de votre serveur, une fois que vous avez configuré la connexion par clé SSH, vous pouvez désactiver la connexion par mot de passe. Pour ce faire, vous devez modifier le fichier de configuration SSH sur le serveur.

  1. Ouvrez le fichier de configuration SSH avec la commande suivante :

    sudo nano /etc/ssh/sshd_config
    
  2. Recherchez la ligne qui contient #PasswordAuthentication yes, décommettez-la en supprimant le # au début et changez yes en no. Cela devrait ressembler à ceci :

    PasswordAuthentication no
    
  3. Enregistrez et fermez le fichier.

  4. Redémarrez le service SSH pour que les modifications prennent effet :

    sudo service ssh restart
    

En désactivant la connexion par mot de passe, vous réduisez le risque d'attaques de force brute réussies et augmentez la sécurité de votre serveur.

Attention, si vous pouvez vous connecter à un utilisateur qui ne possède pas de clé ssh, il existe sans doute une autre configuration qui vient écraser le paramètre PasswordAuthentication. Vous pouvez chercher dans le dossier /etc/ssh/sshd_config.d/ et modifier les fichiers si besoin.

Restriction de la connexion SSH à certains utilisateurs

Pour renforcer la sécurité de votre serveur, vous pouvez limiter les utilisateurs qui peuvent se connecter via SSH. Cela peut être réalisé en modifiant le fichier de configuration du démon SSH (sshd_config).

Limiter les utilisateurs avec la directive AllowUsers

La directive AllowUsers permet de spécifier explicitement quels utilisateurs sont autorisés à se connecter via SSH. Pour l'utiliser, ouvrez le fichier sshd_config avec des privilèges root ou sudo :

sudo nano /etc/ssh/sshd_config

Recherchez la directive AllowUsers dans le fichier. Si elle n'existe pas, vous pouvez la créer n'importe où dans le fichier. Après la directive, listez les utilisateurs qui devraient être autorisés à se connecter via SSH :

AllowUsers user1 user2

Enregistrez et fermez le fichier. Redémarrez le démon pour appliquer vos modifications :

sudo service ssh restart

Limiter les utilisateurs avec la directive AllowGroups

Si vous préférez gérer les utilisateurs en groupes, vous pouvez utiliser la directive AllowGroups. Cette directive vous permet de spécifier un groupe d'utilisateurs autorisés à se connecter via SSH.

Enregistrez et fermez le fichier. Créez d’abord le groupe système correspondant (sans répertoire personnel) :

sudo groupadd -r sshmembers

Assurez-vous d'ajouter tous les utilisateurs nécessaires à ce groupe. Cela peut être fait en tapant :

sudo usermod -aG sshmembers user1
sudo usermod -aG sshmembers user2

Ensuite, dans le fichier sshd_config, ajoutez la directive AllowGroups suivie du nom du groupe :

AllowGroups sshmembers

Redémarrez le démon SSH pour appliquer vos modifications :

sudo service ssh restart

En limitant les utilisateurs qui peuvent se connecter via SSH, vous renforcez la sécurité de votre serveur en réduisant le nombre de points d'entrée possibles pour un attaquant.

Désactivation de la connexion SSH pour l'utilisateur root

Dans le cadre de la sécurisation de votre serveur, il est souvent recommandé de désactiver complètement la connexion SSH pour l'utilisateur root une fois que vous avez configuré un compte utilisateur SSH avec des privilèges sudo.

Pourquoi désactiver la connexion SSH pour l'utilisateur root ?

L'utilisateur root a des privilèges illimités et peut effectuer n'importe quelle opération sur le système. Si un attaquant parvient à se connecter en tant que root, il pourrait causer des dommages irréparables. Par conséquent, pour minimiser le risque, il est préférable de désactiver la connexion SSH pour l'utilisateur root.

Comment désactiver la connexion SSH pour l'utilisateur root ?

Pour désactiver la connexion SSH pour l'utilisateur root, vous devez modifier le fichier de configuration du démon SSH (sshd_config). Voici comment faire :

  1. Ouvrez le fichier sshd_config avec des privilèges root ou sudo :

    sudo nano /etc/ssh/sshd_config
    
  2. Recherchez la directive PermitRootLogin. Si elle est commentée, décommentez-la. Changez la valeur à no :

    PermitRootLogin no
    
  3. Enregistrez et fermez le fichier. Redémarrez le démon SSH pour appliquer vos modifications :

    sudo service ssh restart
    

En désactivant la connexion SSH pour l'utilisateur root, vous ajoutez une couche supplémentaire de sécurité à votre serveur.

Suppression de l'utilisateur fourni par le fournisseur de service cloud

Lorsque vous configurez un serveur sur un fournisseur de services cloud, il est courant que le fournisseur crée un utilisateur par défaut avec des privilèges d'administration. Une fois que vous avez terminé vos configurations et que vous avez créé vos propres utilisateurs, il est recommandé de supprimer cet utilisateur fourni par le fournisseur pour renforcer la sécurité de votre serveur.

Suppression de l'utilisateur

Une fois que vous avez vérifié l'existence de l'utilisateur fourni par le fournisseur, vous pouvez procéder à sa suppression. Utilisez la commande suivante pour supprimer l'utilisateur :

sudo userdel -r ubuntu

Assurez-vous de remplacer "ubuntu" par le nom d'utilisateur fourni par votre fournisseur de services cloud. L'option -r supprime également le répertoire personnel de l'utilisateur.

Conclusion

Supprimer l'utilisateur fourni par le fournisseur de services cloud une fois que vous avez terminé vos configurations est une étape importante pour renforcer la sécurité de votre serveur. Assurez-vous de configurer vos propres utilisateurs avec des privilèges appropriés avant de supprimer l'utilisateur fourni par le fournisseur.

Bonnes pratiques

La gestion des utilisateurs et des clés SSH est un aspect essentiel de l'administration d'un serveur. Voici quelques bonnes pratiques à garder à l'esprit :

Protection des clés SSH par mot de passe

Lorsque vous générez une nouvelle paire de clés SSH, ssh-keygen vous demande si vous souhaitez protéger la clé privée avec un mot de passe. Il est fortement recommandé d'utiliser un mot de passe. Cela ajoute une couche de sécurité supplémentaire : même si quelqu'un parvient à obtenir votre clé privée, il ne pourra pas l'utiliser sans le mot de passe.

Authentification par clés plutôt que par mot de passe

L'authentification par clés est généralement plus sûre et plus pratique que l'authentification par mot de passe. Avec l'authentification par clés, vous n'avez pas à vous souvenir d'un mot de passe et vous n'avez pas à taper le mot de passe à chaque fois que vous vous connectez. De plus, l'authentification par clés est résistante aux attaques de force brute qui tentent de deviner votre mot de passe.

Pour désactiver l'authentification par mot de passe et forcer l'authentification par clés, vous pouvez modifier le fichier de configuration SSH sur votre serveur (/etc/ssh/sshd_config) et définir la directive PasswordAuthentication sur no.

Permissions appropriées pour les fichiers de clés SSH

SSH est très pointilleux sur les permissions des fichiers de clés. Si les permissions ne sont pas correctes, SSH peut refuser de vous laisser vous connecter. Les permissions correctes sont généralement les suivantes :

  • Le répertoire ~/.ssh sur votre machine locale doit avoir les permissions 700 (c'est-à-dire, accessible en lecture, écriture et exécution uniquement par le propriétaire).
  • Le fichier ~/.ssh/id_rsa (ou tout autre fichier de clé privée) sur votre machine locale doit avoir les permissions 600 (c'est-à-dire, accessible en lecture et écriture uniquement par le propriétaire).
  • Le fichier ~/.ssh/authorized_keys sur le serveur doit également avoir les permissions 600.

Vous pouvez définir ces permissions avec la commande chmod. Par exemple :

chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa

En suivant ces bonnes pratiques, vous pouvez améliorer la sécurité et l'efficacité de votre administration serveur.

Sources :

  1. SSH Essentials: Working with SSH Servers, Clients, and Keys : Ce guide explique les bases de SSH, y compris la génération de clés SSH, la connexion à un serveur SSH et la configuration des autorisations de clés.

  2. Initial Server Setup with Ubuntu 22.04 : Ce guide explique les étapes initiales de configuration d'un serveur Ubuntu, y compris la création d'un nouvel utilisateur, l'ajout de l'utilisateur au groupe sudo et la configuration du pare-feu.

  3. https://help.ovhcloud.com/csm/fr-dedicated-servers-getting-started-dedicated-server?id=kb_article_view&sysparm_article=KB0043481

  4. https://help.ovhcloud.com/csm/fr-vps-security-tips?id=kb_article_view&sysparm_article=KB0047708

  5. https://manpages.ubuntu.com/manpages/lunar/en/man1/ssh-keygen.1.html

  6. https://www.ssh.com/academy/ssh/copy-id

  7. https://linuxize.com/post/how-to-delete-users-in-linux-using-the-userdel-command/

  8. https://gist.github.com/bonnopc/c78920431284ce3fc2a5270016205116

  9. https://saturncloud.io/blog/could-not-open-a-connection-to-your-authentication-agent/

  10. https://docs.github.com/en/authentication/connecting-to-github-with-ssh/using-ssh-agent-forwarding