Nextcloud en bref
Nextcloud a besoin d’un serveur web (Apache, Nginx…) et d’une base de données relationnelle (MySQL/MariaDB, PostgreSQL, SQLite), que l’on peut héberger sur la même machine. On y accède depuis un navigateur, un client de synchronisation ou une application pour smartphone.
Installation de Nextcloud
Installation d’un serveur LAMP
Nextcloud nécessite un serveur LAMP (Linux, Apache, MariaDB/MySQL, PHP) ainsi que plusieurs modules PHP. Nous partons d’une Debian 12 (Bookworm) fraîchement installée, sans environnement de bureau. Elle fournit PHP 8.2 et MariaDB 10.11, ce qui détermine la version de Nextcloud installable (voir plus bas).
apt update && apt upgrade -y
apt install -y curl unzip apache2 libapache2-mod-php mariadb-server \
php php-mysql php-mbstring php-gd php-curl php-intl php-imagick \
php-xml php-zip php-ldap php-bcmath php-gmp
Installez également le serveur SSH et Fail2ban :
apt install -y openssh-server fail2ban python3-systemd
Téléchargement et décompression
Pour récupérer Nextcloud 34 (dernière version corrective de la branche 34) directement depuis le serveur :
cd /tmp
wget https://download.nextcloud.com/server/releases/latest-34.zip
unzip latest-34.zip
mv nextcloud /var/www/html/
chown -R www-data:www-data /var/www/html/nextcloud/
Remarque sur l’adressage IP
Choisissez pour le serveur Nextcloud une adresse IP cohérente avec votre environnement : s’il est opérationnel, le serveur doit être joignable par son adresse IP. Les accès par nom DNS seront abordés plus tard dans l’année.
Préparation de la base de données
1. Sécurisez le serveur MariaDB :
mysql_secure_installation
Cette commande permet notamment de protéger le compte root de MariaDB, de supprimer les utilisateurs anonymes et la base de test. Répondez Oui à toutes les questions.
2. Connectez-vous au serveur de base de données (en tant que root du système) :
mysql
3. Créez la base, l’utilisateur propriétaire et ses droits :
CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'localhost';
FLUSH PRIVILEGES;
QUIT;
L’utilisateur propriétaire de la base est donc nextcloud, avec le mot de passe password.
Finalisation de l’installation depuis le navigateur
Depuis le navigateur du poste client, rendez-vous à l’adresse du serveur : http://<adresse-ip-du-serveur>/nextcloud.
- Créez le compte administrateur : identifiant
admin, mot de passepassword(pour les besoins de l’activité). - Dans la partie basse du formulaire, saisissez les informations de connexion à la base : utilisateur
nextcloud, mot de passepassword, basenextcloud, hôtelocalhost. - Cliquez enfin sur Installer : la page d’accueil de Nextcloud s’affiche, connecté en administrateur.
NB : l’espace de stockage des fichiers est configuré automatiquement dans /var/www/html/nextcloud/data.
Prise en main de l’interface
- L’application Fichiers donne accès à la liste des fichiers, aux fichiers récents, aux favoris, aux partages et aux étiquettes. Ce menu s’enrichit selon les applications installées.
- Le menu de l’avatar, en haut à droite, permet de configurer son espace (langue, notifications, mot de passe…) et, pour un administrateur, de gérer Nextcloud, ses applications et ses utilisateurs.
Ces menus s’adaptent selon que la personne connectée est administrateur ou simple utilisateur.
Contre-mesure Fail2ban
Fail2ban analyse les journaux (logs) de différents services (SSH, Apache…) à la recherche de motifs définis dans ses filtres. Lorsqu’une correspondance est trouvée, une ou plusieurs actions sont exécutées : typiquement, après plusieurs connexions échouées, l’adresse IP source est bannie par une règle ajoutée au pare-feu (fonctionnement de type IDS/IPS).
Nextcloud intègre déjà une protection contre les attaques par force brute sur sa page de connexion (ralentissement progressif des tentatives) : aucun réglage n’est nécessaire. Ce n’est pas le cas des autres services qui demandent une authentification, comme SSH. SSH est robuste, mais on peut renforcer sa protection avec Fail2ban.
Administrer le serveur en SSH
Pour administrer le serveur à distance de manière sécurisée, nous utilisons SSH. Un client SSH est intégré à Linux, macOS et Windows (« Terminal » ou « Invite de commandes ») ; des outils graphiques comme PuTTY ou WinSCP existent aussi. SSH permet la prise de contrôle à distance et le transfert de fichiers chiffré.
| Usage | Commande | Effet |
|---|---|---|
| Connexion à distance | ssh administrateur@192.168.1.7 | Ouvre une session sur le serveur 192.168.1.7 avec l’utilisateur « administrateur » |
| Copie de fichier chiffrée | scp toto.txt cedric@192.168.10.15:/home/cedric/doc | Copie toto.txt dans /home/cedric/doc de la machine 192.168.10.15, en tant que « cedric » |
Principe de configuration
Le fichier /etc/fail2ban/jail.conf contient les réglages par défaut de tous les services (les « jails »). Ne le modifiez pas : il est écrasé lors des mises à jour. Les personnalisations se placent dans des fichiers .conf du répertoire /etc/fail2ban/jail.d/, qui viennent compléter et remplacer les valeurs par défaut. Soyez curieux : ouvrez jail.conf pour y repérer la section [sshd] et les valeurs de maxretry, findtime et bantime.
Configuration de la surveillance SSH
Créez le fichier /etc/fail2ban/jail.d/monsshd.conf avec le contenu suivant (remplacez 192.168.1.50 par l’adresse de votre poste d’administration) :
[DEFAULT]
ignoreip = 127.0.0.1/8 ::1 192.168.1.50
findtime = 10m
bantime = 1h
[sshd]
enabled = true
backend = systemd
maxretry = 3
| Directive | Rôle |
|---|---|
ignoreip | Adresses jamais bannies (liste blanche), séparées par des espaces |
findtime | Fenêtre de temps pendant laquelle les échecs sont comptés |
bantime | Durée du bannissement (-1 = définitif) |
enabled | Active la surveillance du service par Fail2ban |
maxretry | Nombre d’échecs tolérés : 3 ici, contre 5 par défaut |
Démarrage et vérification
systemctl restart fail2ban
systemctl status fail2ban
fail2ban-client status
La commande fail2ban-client status doit afficher la jail sshd.
Avant le test des 3 échecs, vérifiez que Fail2ban sait reconnaître une erreur d’authentification. Ratez volontairement une connexion SSH depuis une machine quelconque, puis lancez sur le serveur :
fail2ban-regex systemd-journal sshd
Cette commande applique le filtre sshd au journal systemd. En fin d’affichage, la ligne Failregex: doit indiquer au moins 1 « matched » : le backend, la sélection des journaux et le filtre fonctionnent. Si elle affiche 0 matched, inutile de lancer le test : Fail2ban ne bannira jamais personne (vérifiez backend et l’installation de python3-systemd).
Les bannissements sont ensuite tracés dans le journal de Fail2ban :
tail -f /var/log/fail2ban.log
Exemple de trace après trois échecs depuis le poste 192.168.1.60 :
2026-10-05 14:02:11,512 fail2ban.jail [812]: INFO Jail 'sshd' started
2026-10-05 14:09:37,204 fail2ban.filter [812]: INFO [sshd] Found 192.168.1.60
2026-10-05 14:09:41,876 fail2ban.filter [812]: INFO [sshd] Found 192.168.1.60
2026-10-05 14:09:45,033 fail2ban.filter [812]: INFO [sshd] Found 192.168.1.60
2026-10-05 14:09:45,301 fail2ban.actions [812]: NOTICE [sshd] Ban 192.168.1.60
Pour voir la règle ajoutée au pare-feu : nft list ruleset.
Commandes importantes
| Besoin | Commande |
|---|---|
| Lister les jails actives | fail2ban-client status |
| Détail d’une jail : échecs, nombre de bannis, IP bannies | fail2ban-client status sshd |
| Débannir une IP (erreur de manipulation, fin de test) | fail2ban-client set sshd unbanip 192.168.1.60 |
| Bannir manuellement une IP | fail2ban-client set sshd banip 203.0.113.70 |
| Recharger la configuration | fail2ban-client reload |
Clients Nextcloud : poste de travail et smartphone
Client Windows ou Linux (Nextcloud Desktop)
- Téléchargez et installez le client Nextcloud Desktop depuis nextcloud.com/install.
- Paramétrez-le avec l’adresse du serveur et un compte utilisateur créé précédemment.
- Testez la synchronisation dans les deux sens (dépôt depuis le poste, dépôt depuis l’interface web).
Smartphone
- Vérifiez que le smartphone est connecté au réseau Wi-Fi.
- Installez l’application Nextcloud depuis le magasin d’applications.
- Paramétrez-la avec l’adresse du serveur et un compte utilisateur.
- Testez (consultation, dépôt d’une photo…).
Sauvegarde et automatisation
En informatique, on met en place des PCA et PRA pour se prémunir contre toute panne ou attaque pouvant interrompre les services ou entraîner la perte de données sensibles (fichiers de configuration, contenu des bases de données…).
| Plan | Définition |
|---|---|
| PCA — Plan de Continuité d’Activité | Garantit une haute disponibilité de la production : procédures, moyens, équipements et architectures permettant la continuité de l’activité quels que soient les sinistres. |
| PRA — Plan de Reprise d’Activité | Complément (ou palliatif en l’absence) du PCA : processus mis en œuvre après un incident pour reprendre l’activité normale, directement ou progressivement. |
Compresser et décompresser des fichiers
| Action | Commande |
|---|---|
| Compresser un répertoire et ses sous-répertoires (-r = récursif) | zip -r nom_du_fichier.zip repertoire_ou_fichier |
| Décompresser une archive zip | unzip nom_du_fichier.zip |
| Alternative Linux : archive tar compressée | tar -czf nom.tar.gz repertoire_ou_fichier |
| Extraire une archive tar compressée | tar -xzf nom.tar.gz |
Planifier des tâches avec cron
Pour planifier des actions, éditez la table cron de l’utilisateur avec crontab -e. Chaque ligne correspond à une tâche :
# .---------------- minute (0 - 59)
# | .------------- heure (0 - 23)
# | | .---------- jour du mois (1 - 31)
# | | | .------- mois (1 - 12) OU jan,feb,mar,apr ...
# | | | | .---- jour de la semaine (0 - 7, 0 et 7 = dimanche) OU sun,mon,tue ...
# | | | | |
# * * * * * commande à exécuter
| Champ | Valeurs |
|---|---|
| mm | minutes (0-59) |
| hh | heures (0-23) |
| jj | jour du mois (1-31) |
| MMM | mois (1-12 ou abréviation anglaise : jan, feb, mar…) |
| JJJ | jour de la semaine (0-7, 0 et 7 = dimanche, ou mon, tue, wed…) |
> log | facultatif : redirection de la sortie vers un fichier. Sans redirection, la sortie est envoyée par mail à l’utilisateur local. |
Pour chaque champ : 1-5 = de 1 à 5 ; */6 = toutes les 6 unités ; 2,7 = les valeurs 2 et 7.
Exemples
| Planification | Ligne crontab |
|---|---|
| Tous les jours à 22 h, avec journalisation | 0 22 * * * /root/scripts/sauvegarde.sh >> /var/log/sauvegarde.log 2>&1 |
| Toutes les 6 heures | 0 */6 * * * /root/scripts/synchronisation.sh |
| Toutes les heures | 0 * * * * /root/scripts/verification.sh |
| Toutes les minutes, le lundi uniquement | * * * * 1 /root/scripts/commandes-du-lundi.sh |
| Une fois par an (25 décembre à 0 h 15) | 15 0 25 12 * echo "Le père Noël est passé !" |
| Chaque jour à 2 h 15 | 15 2 * * * /root/scripts/nettoyage.sh |
Sauvegarder et restaurer une base de données
mysqldump exporte tout ou partie des bases d’un serveur MariaDB/MySQL sous forme de fichier SQL. Sur Debian, exécutée en tant que root du système, la commande n’a pas besoin de mot de passe (authentification par socket) :
### Une seule base de données
mysqldump --databases nextcloud > /sauvegarde/nextcloud.sql
### Toutes les bases
mysqldump --all-databases > /sauvegarde/toutes_bdd.sql
### Plusieurs bases
mysqldump --databases bdd1 bdd2 > /sauvegarde/dump.sql
### Une ou plusieurs tables d’une base
mysqldump nom_bdd table1 table2 > /sauvegarde/tables.sql
### Restauration
mysql < /sauvegarde/nextcloud.sql
Avec un autre compte, on indique l’utilisateur avec -u et on laisse -p sans valeur : le mot de passe est alors demandé de façon interactive.
mysqldump -u nextcloud -p --databases nextcloud > /sauvegarde/nextcloud.sql
Le mode maintenance et la commande occ
Nextcloud s’administre aussi en ligne de commande avec l’outil occ. Il doit être lancé avec le compte www-data, propriétaire des fichiers de Nextcloud :
runuser -u www-data -- php /var/www/html/nextcloud/occ status
runuser -u www-data -- php /var/www/html/nextcloud/occ maintenance:mode --on
runuser -u www-data -- php /var/www/html/nextcloud/occ maintenance:mode --off
En mode maintenance, Nextcloud refuse les connexions et les synchronisations : personne ne peut modifier un fichier pendant que l’on copie la base et le dossier data/. Connectez-vous depuis le navigateur pendant que le mode est actif pour voir ce qu’affichent les utilisateurs.
Assembler le script de sauvegarde
Créez le script /root/scripts/sauvegarde_nextcloud.sh à partir du squelette suivant, en remplaçant chaque ligne ... par la commande adaptée (voir les sections précédentes) :
#!/bin/bash
# Sauvegarde quotidienne de Nextcloud
DATE=$(date +%Y-%m-%d)
DEST=/sauvegarde
NC=/var/www/html/nextcloud
mkdir -p "$DEST"
# 1. Activer le mode maintenance
...
# 2. Exporter la base nextcloud, compressée avec gzip, dans "$DEST/nextcloud_bdd_$DATE.sql.gz"
...
# 3. Archiver et compresser le répertoire "$NC" dans "$DEST/nextcloud_fichiers_$DATE.tar.gz"
...
# 4. Désactiver le mode maintenance
...
- Rendez le script exécutable :
chmod 700 /root/scripts/sauvegarde_nextcloud.sh. - Testez-le à la main, puis vérifiez le contenu de
/sauvegarde(ls -lh,tar -tzf). - Planifiez-le avec
crontab -epour une exécution tous les jours à 20 h, en journalisant sa sortie.
Conclusion : les mots de passe
La gestion des mots de passe reste un élément essentiel de la sécurité des systèmes d’information. C’est souvent la seule protection sur laquelle s’appuient les utilisateurs, dans presque tous les services du quotidien (messagerie, réseaux sociaux, cloud…). La CNIL publie des recommandations de sécurité et peut sanctionner les entreprises dont la politique de mots de passe est trop laxiste, au titre de la protection des données.
Recommandations de la CNIL : mots de passe, recommandations de sécurité minimales.
Nextcloud & moi
Il est tout à fait possible de reproduire cette activité chez vous pour remplacer des services comme Google Drive ou Dropbox. Ces services appartiennent à des entreprises américaines : même lorsque les données sont stockées en Europe, elles peuvent être soumises à des lois extraterritoriales comme le Cloud Act, ce qui pose question au regard du RGPD. Héberger son propre cloud, c’est garder la maîtrise de ses données.
RGPD : cnil.fr/fr/reglement-europeen-protection-donnees.
Nextcloud s’installe très bien sur un Raspberry Pi, pour un budget de quelques dizaines d’euros à une centaine selon le modèle et les accessoires. Des boîtiers en kit sont disponibles… mais on peut aussi en fabriquer un en briques de construction.
Missions bonus : pour aller plus loin
| N° | Bonus | Difficulté |
|---|---|---|
| 1 | Restaurer Nextcloud sur un serveur vierge (PRA) | ★★★ |
| 2 | Configurer les tâches de fond de Nextcloud | ★ |
| 3 | Analyser les avertissements de sécurité | ★★ |
| 4 | Authentification SSH par clé | ★★ |
| 5 | Protéger la page de connexion avec Fail2ban | ★★★ |
| 6 | Passer en HTTPS et le prouver avec Wireshark | ★★ |
| 7 | Auditer son serveur avec Nmap | ★ |
Bonus 1 — Restaurer Nextcloud sur un serveur vierge (PRA)
Objectif : prouver que votre sauvegarde permet réellement de reconstruire le service après la perte du serveur.
- Créez une nouvelle VM Debian 12 et installez le socle LAMP.
- Recréez l’utilisateur MariaDB
nextcloudet ses droits. La base elle-même sera recréée par la restauration. - Copiez vos deux archives de
/sauvegardevers la nouvelle VM avecscp. - Restaurez la base :
zcat nextcloud_bdd_<date>.sql.gz | mysql. - Restaurez les fichiers :
tar -xzf nextcloud_fichiers_<date>.tar.gz -C /var/www/html/, puischown -R www-data:www-data /var/www/html/nextcloud. - L’archive a été prise en mode maintenance : désactivez-le avec
occ. Si l’adresse IP a changé, mettez à jourtrusted_domains. - Connectez-vous avec vos deux utilisateurs : retrouvent-ils tous leurs fichiers ?
Bonus 2 — Configurer les tâches de fond
Nextcloud exécute régulièrement des tâches de fond (nettoyage, notifications…). Par défaut, elles ne se lancent que lorsqu’un utilisateur charge une page (mode AJAX), ce qui n’est pas fiable.
- Dans Paramètres d’administration → Paramètres de base → Tâches de fond, choisissez Cron.
- Éditez la table cron du compte www-data :
crontab -u www-data -e. - Ajoutez une ligne exécutant
php -f /var/www/html/nextcloud/cron.phptoutes les 5 minutes. - Vérifiez, quelques minutes plus tard, l’heure de la dernière exécution affichée dans la page d’administration.
Bonus 3 — Analyser les avertissements de sécurité
La page Paramètres d’administration → Vue d’ensemble liste les avertissements de sécurité et de configuration de votre serveur. Relevez-les et, pour chacun, expliquez ce qu’il signifie puis s’il est corrigé, accepté ou hors périmètre, et pourquoi.
Bonus 4 — Authentification SSH par clé
Objectif : remplacer les mots de passe SSH par une paire de clés, bien plus résistante à la force brute.
- Sur le poste client, générez une paire de clés :
ssh-keygen -t ed25519. - Copiez la clé publique sur le serveur :
ssh-copy-id utilisateur@<ip>(Linux). Sous Windows, ajoutez le contenu deid_ed25519.pubau fichier~/.ssh/authorized_keysde l’utilisateur sur le serveur. - Vérifiez que la connexion fonctionne sans mot de passe, sans fermer la session en cours.
- Sur le serveur, créez
/etc/ssh/sshd_config.d/durcissement.confcontenantPasswordAuthentication no, puissystemctl reload ssh. - Rejouez le test de Fail2ban : que constatez-vous ? Qu’en concluez-vous sur l’encadré « ce que Fail2ban fait… et ne fait pas » ?
Bonus 5 — Protéger la page de connexion Nextcloud avec Fail2ban
Nextcloud ralentit déjà les tentatives répétées, mais Fail2ban peut bannir l’adresse au niveau du pare-feu. Créez le filtre /etc/fail2ban/filter.d/nextcloud.conf (d’après la documentation officielle de Nextcloud) :
[Definition]
_groupsre = (?:(?:,?\s*"\w+":(?:"[^"]+"|\w+))*)
failregex = ^\{%(_groupsre)s,?\s*"remoteAddr":"<HOST>"%(_groupsre)s,?\s*"message":"Login failed:
^\{%(_groupsre)s,?\s*"remoteAddr":"<HOST>"%(_groupsre)s,?\s*"message":"Trusted domain error.
datepattern = ,?\s*"time"\s*:\s*"%%Y-%%m-%%d[T ]%%H:%%M:%%S(%%z)?"
Puis ajoutez la jail correspondante dans /etc/fail2ban/jail.d/monsshd.conf :
[nextcloud]
enabled = true
backend = auto
port = 80,443
filter = nextcloud
maxretry = 3
logpath = /var/www/html/nextcloud/data/nextcloud.log
Redémarrez Fail2ban, échouez trois fois à vous connecter depuis le navigateur du poste client, puis vérifiez avec fail2ban-client status nextcloud.
Bonus 6 — Passer en HTTPS et le prouver avec Wireshark
- Sur le poste client, lancez une capture Wireshark et connectez-vous à Nextcloud en HTTP.
- Filtrez la capture avec
http.request.method == "POST": retrouvez-vous l’identifiant et le mot de passe ? - Sur le serveur, activez le site HTTPS d’Apache avec son certificat auto-signé :
a2enmod ssl,a2ensite default-ssl, puissystemctl reload apache2. - Connectez-vous à
https://<ip>/nextcloud(acceptez l’avertissement du navigateur) et refaites la capture : que voyez-vous désormais ?
Bonus 7 — Auditer son serveur avec Nmap
Depuis le poste client, lancez nmap -sV <ip-du-serveur> et justifiez chaque port ouvert : quel service est détecté, pourquoi il est ouvert, et s’il est vraiment nécessaire.
Question : le serveur héberge MariaDB, pourtant le port 3306 n’apparaît pas. Pourquoi est-ce une bonne chose ?
Documenter son serveur : la fiche serveur
Tout serveur mis en service se documente dans une fiche serveur, tenue à jour à chaque modification. Elle permet à un collègue de reprendre l’administration sans vous, et elle sert de point de départ en cas de panne ou de restauration (bonus 1). Elle indique au minimum :
- l’identité du serveur : nom, rôle (« serveur Nextcloud de l’entreprise »), version de la fiche, auteur ;
- les services : ceux qui sont actifs (web, SGBD, SSH, Fail2ban…) et ceux qui ont été volontairement désactivés, car tout service inutile est une surface d’attaque en moins ;
- la configuration réseau : système d’exploitation et version, adresse IP, masque, passerelle, VLAN, DNS, NTP, proxy ;
- les comptes d’administration : quels comptes existent et à quoi ils servent, mais pas leurs mots de passe (voir l’encadré ci-dessous) ;
- le mode opératoire : installation, sauvegarde, restauration, mises à jour.
🧠 Testez vos connaissances
6 questions. Répondez puis cliquez sur « Corriger ». Rien n’est enregistré : c’est de l’auto-évaluation.
© 2026 Bruno Jousseaume. Ce cours est publié sous licence CC BY-NC-SA 4.0 : vous pouvez le partager et l’adapter en citant l’auteur et un lien vers cette page, sans usage commercial, et en partageant vos adaptations sous la même licence.