Déploiement d'un Portfolio Étudiant

Informations
- Auteur : Louis MEDO
- Date de création : 26/03/2026
Contexte
Procédure de déploiement d'un portfolio pour les étudiants du BTS SIO sur le serveur web Apache 2. Afin de prévenir toute élévation de privilèges ou mouvement latéral en cas de compromission d'un site étudiant, une politique de sécurité stricte est appliquée. Chaque portfolio dispose de son propre utilisateur système et d'un pool d'exécution PHP-FPM dédié, garantissant une isolation totale des environnements.
Sommaire
- Création du compte de service et de l'arborescence (Cloisonnement)
- Configuration de l'isolation PHP-FPM
- Déploiement du code source
- Configuration du VirtualHost
- Application et vérification
1. Création du compte de service et de l'arborescence (Cloisonnement)
Chaque étudiant se voit attribuer un utilisateur système sans droit de connexion. Le serveur web (www-data) est autorisé à lire les fichiers via une appartenance de groupe.
-
Création de l'utilisateur dédié. (Remplacer
<nom-prenom>par l'identifiant de l'étudiant comme par exemple :pierre-jean).adduser: Crée un nouvel utilisateur et un groupe du même nom.--system: Définit le compte comme un compte de service (identifiant inférieur à 1000).--disabled-login: Interdit l'ouverture d'une session shell avec ce compte (sécurité). -
Ajout d'Apache au groupe de l'étudiant.
usermod -aG: Ajoute l'utilisateur systèmewww-data(Apache) au groupeportfolio-<nom-prenom>pour lui permettre de lire les fichiers statiques (HTML, CSS, images). -
Création du répertoire web et application des droits.
sudo mkdir -p /var/www/portfolio sudo mkdir -p /var/www/portfolio/portfolio-<nom-prenom> sudo chown -R github-deploy-portfolio:portfolio-<nom-prenom> /var/www/portfolio/portfolio-<nom-prenom> sudo chmod -R 750 /var/www/portfolio/portfolio-<nom-prenom>mkdir -p: Crée l'arborescence complète du répertoire cible.chown -R: Attribue la propriété du dossier et de son contenu à l'utilisateur et au groupeportfolio-<nom-prenom>.chmod -R 750: Accorde tous les droits au propriétaire (7), les droits de lecture et d'exécution au groupe (5- permet à Apache de lire), et aucun droit aux autres utilisateurs (0).
2. Configuration de l'isolation PHP-FPM
La création d'un "Pool" FPM spécifique force l'exécution des scripts PHP sous l'identité de l'étudiant, interdisant ainsi à un script malveillant de modifier les fichiers d'un autre étudiant ou du système.
-
Création du fichier de configuration du pool.
-
Ajout des directives de configuration.
Insérer le contenu suivant :
[portfolio-<nom-prenom>] user = portfolio-<nom-prenom> group = portfolio-<nom-prenom> listen = /run/php/php8.4-fpm-portfolio-<nom-prenom>.sock listen.owner = www-data listen.group = www-data pm = dynamic pm.max_children = 5 pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 3[portfolio-<nom-prenom>]: Nomme le pool d'exécution.user / group: Définit l'identité sous laquelle le code PHP sera exécuté.listen: Crée un socket Unix unique pour la communication entre Apache et ce pool FPM précis.listen.owner / group: Autorise Apache (www-data) à transmettre des requêtes à ce socket.pm.*: Gère dynamiquement l'allocation de la mémoire et des processus pour ce portfolio.
3. Déploiement du code source
-
Transfert des fichiers. Copier les fichiers du portfolio de l'étudiant dans le répertoire
/var/www/portfolio. -
Sécurisation finale des fichiers. S'assurer que les droits sont corrects après l'importation.
sudo chown -R github-deploy-portfolio:portfolio-<nom-prenom> /var/www/portfolio/portfolio-<nom-prenom> sudo find /var/www/portfolio/portfolio-<nom-prenom> -type d -exec chmod 750 {} \; sudo find /var/www/portfolio/portfolio-<nom-prenom> -type f -exec chmod 640 {} \;find -type d -exec chmod 750: Applique les droits de lecture/exécution (accès) uniquement aux dossiers.find -type f -exec chmod 640: Rend les fichiers lisibles, mais non exécutables directement par le système.
4. Configuration du VirtualHost
Pour router le trafic vers le bon dossier et le bon socket PHP, un hôte virtuel doit être créé.
-
Création du fichier de configuration.
-
Application du modèle. Copier le contenu du modèle standardisé et remplacer les variables d'environnement (nom de domaine, chemins et socket FPM).
5. Application et vérification
-
Activation du site.
a2ensite: Crée le lien symbolique activant le nouveau VirtualHost. -
Validation et redémarrage des services.
sudo apachectl configtest sudo php-fpm8.4 -t sudo systemctl restart php8.4-fpm sudo systemctl reload apache2apachectl configtest: Vérifie l'absence d'erreurs de syntaxe dans les configurations d'hôtes virtuels.php-fpm8.4 -t: Vérifie l'absence d'erreurs de syntaxe dans les configurations de fpm.systemctl restart php8.4-fpm: Démarre le nouveau pool d'isolation dédié à l'étudiant.systemctl reload apache2: Prend en compte le nouveau site web de manière transparente.
6. Récupération du .git
-
Clonage et configuration de l'exception Git.
sudo -u github-deploy-portfolio: Exécute la commande qui suit spécifiquement sous l'identité de l'utilisateur de déploiement (et non en tant queroot). Cela garantit que le dossier.gitest créé avec le bon propriétaire natif.git clone: Télécharge le dépôt directement depuis GitHub vers le dossier cible.