Dans le monde du développement web collaboratif, où plusieurs développeurs travaillent simultanément sur un même projet, une gestion rigoureuse des accès est primordiale. Chaque contribution, chaque nouvelle fonctionnalité, chaque correctif est le fruit d'un effort d'équipe. Derrière cette collaboration se cache une nécessité impérieuse : garantir que chacun possède les droits nécessaires sans compromettre la sécurité et l'intégrité du projet. La gestion des utilisateurs sous Linux offre une solution robuste pour répondre à cet enjeu.

Que vous soyez un développeur junior, un administrateur système ou un étudiant, vous trouverez ici les informations et les outils pour maîtriser cet aspect essentiel de la gestion de projet.

Concepts et terminologie fondamentaux

Avant de passer à la pratique, il est indispensable de bien comprendre les concepts et le vocabulaire essentiels liés à la gestion des comptes utilisateurs sous Linux. Cette section vous fournira les bases nécessaires pour assimiler les étapes suivantes et mettre en œuvre les techniques expliquées avec assurance. Nous explorerons les identifiants d'utilisateurs et de groupes, ainsi que les fichiers de configuration qui définissent ces éléments clés du système.

Qu'est-ce qu'un utilisateur sous linux ?

Dans l'environnement Linux, un utilisateur représente une identité unique permettant l'accès aux ressources du système. Chaque utilisateur est identifié par un UID (User ID), un numéro unique qui le distingue des autres. Similairement, chaque utilisateur est rattaché à un GID (Group ID), désignant le groupe principal auquel il appartient. Ces identifiants sont déterminants pour définir les autorisations et les droits d'accès de chaque utilisateur.

  • UID (User ID) : Numéro d'identification unique pour chaque utilisateur. Les UID de 0 à 999 sont typiquement réservés aux utilisateurs système, tandis que les UID supérieurs à 1000 sont attribués aux utilisateurs standards.
  • GID (Group ID) : Numéro d'identification unique pour chaque groupe, suivant une logique similaire aux UID.

Les informations concernant les utilisateurs sont stockées dans des fichiers système importants tels que /etc/passwd , /etc/shadow et /etc/group . Le fichier /etc/passwd comprend des informations basiques comme le nom d'utilisateur, l'UID, le GID et le répertoire personnel. Le fichier /etc/shadow , accessible uniquement à l'utilisateur root, contient les mots de passe chiffrés. Enfin, le fichier /etc/group répertorie les groupes, leurs noms et les utilisateurs qui en sont membres.

Important : Il est fortement recommandé de ne pas modifier directement ces fichiers. Préférez l'utilisation des commandes dédiées telles que useradd , usermod , groupadd et groupmod pour assurer la cohérence et l'intégrité du système. L'utilisation directe d'un éditeur de texte pourrait corrompre les fichiers et rendre le système instable.

Types de comptes utilisateurs

Linux distingue différents types d'utilisateurs, chacun ayant un rôle et des privilèges spécifiques. La distinction entre ces types est cruciale pour une gestion efficace des accès et de la sécurité.

  • Root : Le superutilisateur, disposant de tous les droits sur le système. Il peut accéder à tous les fichiers, modifier les configurations et installer des logiciels. L'utilisation du compte root doit être limitée aux opérations d'administration nécessitant des privilèges élevés. Utilisez la commande sudo avec précaution et uniquement lorsque nécessaire.
  • Utilisateurs standards : Disposent de droits restreints, limités à leurs fichiers et répertoires personnels. Ils ne peuvent pas modifier les fichiers système ni installer de logiciels sans autorisation. Il est conseillé d'utiliser un compte standard pour les tâches courantes et de réserver le compte root aux opérations d'administration.
  • Utilisateurs système : Créés pour l'exécution de services et processus spécifiques du système. Ils n'ont généralement pas de répertoire personnel et ne sont pas destinés à une utilisation directe par des utilisateurs humains. Ils servent à isoler les processus et renforcer la sécurité du système.

Gestion des groupes

Les groupes permettent de rassembler plusieurs utilisateurs et de leur accorder des autorisations communes. Cela simplifie la gestion des accès et facilite la collaboration au sein de l'équipe. Chaque utilisateur est rattaché à un groupe principal et peut également appartenir à plusieurs groupes secondaires.

Le groupe principal est celui auquel l'utilisateur appartient par défaut. Lorsqu'un utilisateur crée un fichier, son groupe principal est automatiquement attribué à ce fichier. Les groupes secondaires permettent d'étendre les autorisations d'un utilisateur en lui donnant accès aux ressources partagées par d'autres groupes. Par exemple, la création d'un groupe webdev pour l'équipe de développement permet de gérer plus facilement l'accès aux fichiers et répertoires du projet web.

Création d'un compte utilisateur : la pratique

Passons maintenant à la pratique et découvrons comment créer un utilisateur sous Linux. Cette section vous présentera les commandes useradd et passwd , ainsi que l'alternative adduser (spécifique aux distributions Debian/Ubuntu).

La commande useradd : guide détaillé

La commande useradd est l'outil principal pour créer de nouveaux comptes utilisateurs sous Linux. Elle propose de nombreuses options permettant de personnaliser la création, comme la définition du répertoire personnel, du shell et des groupes d'appartenance.

La syntaxe de base de la useradd est la suivante :

useradd [options] nom_utilisateur

Voici quelques options importantes :

  • -m : Crée le répertoire personnel de l'utilisateur.
  • -g : Définit le groupe principal de l'utilisateur.
  • -G : Ajoute l'utilisateur à des groupes secondaires.
  • -s : Définit le shell de l'utilisateur.
  • -d : Définit le répertoire personnel de l'utilisateur.
  • -c : Ajoute un commentaire descriptif pour l'utilisateur.

Par exemple, pour créer un utilisateur nommé "john" avec un répertoire personnel, un groupe principal "users" et un shell Bash, la useradd sera :

useradd -m -g users -s /bin/bash john

Pour créer un utilisateur nommé "jane" avec un répertoire personnel personnalisé situé dans /home/jane.dev et l'ajouter aux groupes "users" et "webdev", la commande sera :

useradd -m -d /home/jane.dev -G users,webdev jane

Définition du mot de passe avec passwd

Après la création d'un utilisateur, il est crucial de définir un mot de passe pour autoriser la connexion au système. La commande passwd est utilisée à cet effet.

Pour définir un mot de passe pour l'utilisateur "john", exécutez :

passwd john

Le système vous demandera de saisir et de confirmer le nouveau mot de passe. Optez pour un mot de passe robuste et unique, et suivez les recommandations de sécurité. La commande chage -d 0 john forcera également un changement de mot de passe lors de la prochaine connexion.

Voici quelques recommandations pour la gestion des mots de passe :

  • Utilisez un mot de passe complexe d'au moins 12 caractères, incluant des lettres majuscules et minuscules, des chiffres et des symboles.
  • Évitez les mots de passe faciles à deviner comme votre nom, date de naissance ou mots du dictionnaire.
  • Changez régulièrement vos mots de passe.
  • N'utilisez pas le même mot de passe pour plusieurs comptes.
  • Utilisez un gestionnaire de mots de passe pour sécuriser leur stockage.

adduser : une alternative conviviale

Sur les systèmes Debian et Ubuntu, la commande adduser offre une interface plus interactive pour la création d'utilisateurs. Elle vous guide à travers les étapes, en demandant le nom complet, le répertoire personnel et le shell.

Pour créer un utilisateur avec adduser , tapez :

adduser nom_utilisateur

L'outil vous posera une série de questions pour configurer le compte. Bien que plus intuitive, adduser peut être moins flexible que useradd pour les configurations avancées nécessitant un contrôle précis.

Collaboration optimisée : gestion des groupes

La gestion des groupes est essentielle pour une collaboration efficace. Cette section décrit comment créer des groupes, y ajouter des utilisateurs et vérifier l'appartenance.

Création de groupes avec groupadd

La commande groupadd sert à créer de nouveaux groupes sous Linux. La syntaxe est :

groupadd nom_groupe

Par exemple, pour créer un groupe nommé "webdev", exécutez :

groupadd webdev

Vous pourrez ensuite ajouter des utilisateurs à ce groupe via la commande usermod .

Ajouter des utilisateurs aux groupes : usermod

La commande usermod est l'outil à privilégier pour ajouter un utilisateur à un ou plusieurs groupes. Elle offre plus de flexibilité et de compatibilité que d'autres méthodes.

Pour ajouter un utilisateur à un groupe secondaire avec usermod , utilisez la commande :

usermod -aG nom_groupe nom_utilisateur

L'option -aG garantit que l'utilisateur est ajouté au groupe sans affecter ses autres appartenances.

Pour ajouter l'utilisateur "john" au groupe "webdev", exécutez :

usermod -aG webdev john

Vérification de l'appartenance aux groupes : groups et id

Pour confirmer qu'un utilisateur est bien membre d'un groupe, utilisez les commandes groups et id . La commande groups affiche une liste des groupes auxquels l'utilisateur appartient :

groups nom_utilisateur

Pour vérifier les groupes de l'utilisateur "john", tapez :

groups john

La commande id fournit des informations détaillées sur un utilisateur, incluant son UID, GID et la liste des groupes :

id nom_utilisateur

Pour obtenir les informations de l'utilisateur "john", tapez :

id john

Sécurisation du développement web : permissions et accès

La gestion des permissions et des accès est un élément clé de la sécurité de votre environnement de développement web. Cette section explique le fonctionnement du système de permissions Linux, l'utilisation des ACLs (Access Control Lists) pour un contrôle plus fin, et le changement de propriétaire ou de groupe d'un fichier ou répertoire avec la commande chown .

Comprendre le système de permissions linux : le modèle rwx

Le système de permissions Linux est fondé sur le modèle rwx , représentant les trois types d'autorisations possibles :

  • r (read) : Autorisation de lire le fichier ou le contenu du répertoire.
  • w (write) : Autorisation de modifier le fichier ou d'ajouter, supprimer ou renommer des fichiers dans le répertoire.
  • x (execute) : Autorisation d'exécuter le fichier (s'il s'agit d'un exécutable) ou de parcourir le répertoire.

Ces permissions sont accordées à trois catégories d'utilisateurs :

  • Le propriétaire du fichier ou du répertoire.
  • Le groupe propriétaire du fichier ou du répertoire.
  • Les autres utilisateurs.

La représentation numérique des permissions est une notation concise. Chaque permission correspond à une valeur numérique : r = 4, w = 2, x = 1. La somme de ces valeurs pour chaque catégorie donne un nombre à trois chiffres. Par exemple, 755 signifie :

  • Propriétaire : rwx (4 + 2 + 1 = 7)
  • Groupe : r-x (4 + 0 + 1 = 5)
  • Autres : r-x (4 + 0 + 1 = 5)

La commande chmod permet de modifier les permissions d'un fichier ou d'un répertoire. Pour attribuer les permissions rwxr-xr-x (755) au fichier "script.sh", utilisez :

chmod 755 script.sh

Interactions avec les ACLs : L'utilisation des ACLs peut modifier la façon dont les permissions traditionnelles sont interprétées. Une ACL plus restrictive prévaut, tandis qu'une ACL plus permissive peut étendre les droits d'accès pour un utilisateur spécifique.

Contrôle d'accès avancé avec les ACLs

Les ACLs (Access Control Lists) offrent un contrôle plus précis des permissions pour des utilisateurs ou groupes spécifiques. Elles sont particulièrement utiles dans les scénarios complexes où des droits d'accès différenciés sont nécessaires.

Les commandes setfacl et getfacl permettent de gérer les ACLs. La commande setfacl permet de définir les ACLs, tandis que la commande getfacl permet de les afficher.

Pour accorder à l'utilisateur "john" la permission de lecture et d'écriture sur le répertoire "/var/log/myapp", utilisez :

setfacl -m u:john:rw /var/log/myapp

Pour afficher les ACLs du répertoire "/var/log/myapp", exécutez :

getfacl /var/log/myapp

Cas d'utilisation : Pour partager un répertoire de logs sensibles avec un développeur ("jane") pour le débogage, sans lui donner d'accès complet, les ACLs permettent de lui accorder la permission de lire les fichiers, tout en interdisant l'accès aux autres utilisateurs.

La commande chown pour la gestion du propriétaire et du groupe

La commande chown permet de changer le propriétaire et/ou le groupe d'un fichier ou d'un répertoire. La syntaxe générale est :

chown [utilisateur][:groupe] fichier/répertoire

Pour changer le propriétaire du fichier "config.php" à l'utilisateur "john" et le groupe au groupe "webdev", la commande sera :

chown john:webdev config.php

Important : Soyez particulièrement prudent avec la commande chown , car une mauvaise utilisation peut avoir des conséquences importantes sur la sécurité de votre système. Assurez-vous de bien comprendre les implications avant de modifier le propriétaire ou le groupe d'un fichier ou d'un répertoire.

Sécurité et bonnes pratiques essentielles

Cette section est cruciale pour garantir la sécurité de votre environnement de développement web. Nous aborderons le principe du moindre privilège, l'audit et la surveillance, la désactivation des comptes, l'authentification à deux facteurs (2FA) et les clés SSH. L'application de ces pratiques est essentielle pour minimiser les risques et protéger vos données.

Application du principe du moindre privilège (PoLP)

Le Principe du Moindre Privilège stipule que chaque utilisateur ne doit avoir accès qu'aux ressources absolument nécessaires pour effectuer sa tâche. En limitant les droits d'accès, vous réduisez considérablement les risques de sécurité en cas de compromission d'un compte.

Appliquez ce principe en attribuant à chaque utilisateur les permissions minimales pour son rôle. Par exemple, un développeur travaillant sur une fonctionnalité spécifique ne doit pas avoir accès à l'intégralité du code source ou aux données sensibles.

Exemple : Ne donnez pas à tous les développeurs l'accès direct à la base de données de production. Créez des comptes distincts avec des permissions restreintes aux données requises par leur application.

Importance de l'audit et de la surveillance

L'audit et la surveillance permettent de détecter les activités suspectes et les tentatives d'intrusion. Analysez les accès aux fichiers sensibles, les tentatives de connexion infructueuses et les modifications de configuration.

Utilisez des outils d'audit tels que auditd pour enregistrer les événements système. Les outils de surveillance de logs comme logwatch ou graylog facilitent l'analyse et la détection d'anomalies.

Script de surveillance simplifié : Ce script bash surveille un fichier de configuration sensible et envoie une alerte en cas de modification :

#!/bin/bash FILE="/etc/myapp/config.ini" LAST_MODIFIED=$(stat -c %Y "$FILE") while true; do CURRENT_MODIFIED=$(stat -c %Y "$FILE") if [ "$CURRENT_MODIFIED" -gt "$LAST_MODIFIED" ]; then echo "Alerte : Le fichier $FILE a été modifié !" | mail -s "Alerte de sécurité" admin@example.com LAST_MODIFIED="$CURRENT_MODIFIED" fi sleep 60 # Vérifier toutes les minutes done 

Ce script surveille le fichier /etc/myapp/config.ini et envoie un email à l'administrateur en cas de modification. Adaptez-le à vos besoins spécifiques.

Désactivation des comptes inactifs

Lorsqu'un développeur quitte le projet, désactivez son compte pour éviter tout accès non autorisé. Évitez de supprimer immédiatement le compte pour ne pas perdre de données. Verrouillez plutôt le mot de passe.

Pour verrouiller le mot de passe d'un utilisateur, utilisez :

passwd -l nom_utilisateur

La commande userdel supprime un utilisateur, mais assurez-vous de sauvegarder les données importantes avant de l'utiliser.

Renforcer la sécurité avec l'authentification à deux facteurs (2FA)

La 2FA ajoute une sécurité supplémentaire en demandant un code unique en plus du mot de passe. Elle complique l'accès à un compte même si le mot de passe est compromis.

Activez la 2FA avec Google Authenticator ou Authy pour générer des codes uniques à saisir lors de la connexion.

Privilégier l'accès à distance sécurisé avec les clés SSH

Les clés SSH offrent une alternative plus sûre à l'authentification par mot de passe. Elles permettent de s'authentifier sans saisir de mot de passe.

Pour générer une clé SSH, tapez :

ssh-keygen -t rsa -b 4096

Suivez les instructions pour générer une paire de clés publique et privée. Copiez ensuite la clé publique sur le serveur. Une fois la clé installée, vous pourrez vous connecter sans mot de passe.

Bastion Host (Jump Server) : Un serveur bastion centralise l'accès SSH et renforce la sécurité. Seuls les utilisateurs autorisés peuvent s'y connecter, servant de point d'entrée vers les autres serveurs du réseau. Cela limite l'exposition et facilite l'audit.

Cas pratiques : scénarios d'utilisation

Pour illustrer l'application des concepts précédents, voici quelques exemples concrets d'utilisation de la gestion des comptes et des accès dans un environnement de développement web.

Scénario 1 : environnement de développement local isolé

Créer un environnement isolé pour chaque développeur, avec son propre utilisateur, répertoire personnel et outils, évite les conflits et assure un environnement de travail stable.

  • Créer un utilisateur pour chaque développeur avec useradd .
  • Définir un répertoire personnel avec l'option -d .
  • Installer les outils de développement dans le répertoire personnel.
  • Attribuer les permissions adéquates au répertoire pour permettre la lecture, l'écriture et l'exécution.

Scénario 2 : gestion de l'accès à un dépôt git partagé

Ce scénario garantit que seuls les développeurs autorisés peuvent lire et écrire dans le dépôt, tout en facilitant l'accès pour l'équipe. Un groupe dédié permet de gérer les permissions.

  • Créer un groupe git avec groupadd .
  • Ajouter les développeurs au groupe avec usermod -aG git nom_utilisateur .
  • Configurer les permissions du dépôt pour permettre la lecture et l'écriture au groupe.
  • Utiliser les ACLs pour affiner les permissions si nécessaire.

Scénario 3 : restriction d'accès à la base de données

Pour restreindre l'accès à la base de données, un utilisateur dédié est créé pour chaque application web, avec des permissions minimales.

  • Créer un utilisateur dédié pour chaque application web accédant à la base de données.
  • Attribuer des permissions minimales (lecture et écriture sur les tables nécessaires).
  • Configurer le pare-feu pour limiter l'accès à la base de données aux seuls serveurs autorisés.

Scénario 4 : gestion de l'accès à un serveur de test

Ce scénario permet à l'équipe de test d'accéder aux ressources nécessaires, tout en protégeant les données sensibles. Un système d'audit permet de surveiller les activités.

  • Créer un utilisateur pour l'équipe de test.
  • Restreindre l'accès aux fichiers sensibles avec les permissions Linux et les ACLs.
  • Mettre en place un système d'audit pour surveiller les activités de l'équipe.

Conclusion : vers une maîtrise accrue

La gestion des accès sous Linux est un pilier de la sécurité et de la collaboration dans le développement web. Nous avons exploré les outils et les techniques clés pour ajouter, gérer et sécuriser les comptes utilisateurs. De la création avec useradd à la manipulation des permissions avec chmod et setfacl , vous disposez d'une base solide pour protéger vos projets et faciliter le travail d'équipe.

Pour approfondir vos connaissances, explorez les ressources complémentaires et mettez en pratique les concepts présentés. La sécurité et la fluidité de votre collaboration en dépendent.