Monter un répertoire Nextcloud sous Debian avec davfs2


Dave et fesses

Continuons dans la documentation de choses pratiques que j'utilise. Je fais tourner une petite instance Nextcloud sur un serveur dédié, voyons aujourd'hui comment monter le répertoire d'un utilisateur Nextcloud dans le système de fichiers de Debian via davfs2, un utilitaire permettant d'accéder à des ressources WebDAV et de les monter comme une partition classique.

Première chose à faire, se préparer depuis son compte Nextcloud. On commence par récupérer l'URL d'accès à distance au serveur WebDAV (accessible via les paramètres de Fichiers dans l'interface de Nextcloud). Par défaut, cet URL est du type : https://example.org/nextcloud/remote.php/webdav/. Deuxième chose à faire, créer un mot de passe pour cette application. Cela permet d'éviter d'utiliser son mot de passe utilisateur et il est aisé de le révoquer en cas de soucis. Donc dans les paramètres de l'utilisateur, section Sécurité, on doit avoir quelque chose comme ça :

On entre le nom de l'application (c'est purement informatif, on peut donc mettre ce que l'on veut), on clique sur Créer un nouveau mot de passe d'application et on récupère le mot de passe généré (attention, il sera impossible de le récupérer ensuite, pensez à le stocker dans votre gestionnaire de mot de passe préféré).

Tout est bon côté Nextcloud, passons à Debian. La procédure que je vais décrire montera le répertoire en tant que root, les commandes décrites dans la suite de ce billet sont donc exécutés en tant que superutilisateur.

On commence par créer le répertoire qui servira de point de montage :

		# mkdir /mnt/nextcloud

Et on installe davfs2 :

		# apt-get install davfs2

L'installeur nous demande si d'autres utilisateurs que root pourront monter des répertoires. On répond par la négative (sachant que c'est réversible) :

Il y a quelques paramètres à éditer dans /etc/davfs2/davfs2.conf :

...
		use_locks	0
		...
		cache_size	500		# MiByte
		...
		gui_optimize	1

Ceci mérite quelques remarques : Nextcloud ne gère pas les verrous de fichiers de WebDAV, on les désactive donc. Par ailleurs, le cache par défaut de davfs2 est de 50 Mo ce qui est faible, on lui en donne 500 Mo (ce qui est suffisant pour moi, n'hésitez pas à adapter). Enfin lorsqu'un fichier est ouvert, davfs2 vérifie si une nouvelle version est disponible sur le serveur. Le problème étant que les interfaces graphiques ayant tendance à ouvrir tous les fichiers, cela peut très rapidement mener à des ralentissements. En activant gui_optimize, davfs2 essaie de récupérer les informations nécessaires en une seule requête PROPFIND.

La configuration pure de davfs2 est terminée. Reste à lui donner les informations d'authentification nécessaires pour se connecter. Ça ce passe dans /etc/davfs2/secrets. On ajoute en fin de fichier :

https://example.org/nextcloud/remote.php/webdav/ <Nom d'utilisateur Nextcloud> <le mot de passe généré précédemment>

Au passage, on vérifie que les droits d'accès à ce fichier sont corrects (on doit avoir 600) :

		# ls -lh  /etc/davfs2/secrets
		-rw------- 1 root root 2,7K févr. 10 19:30 /etc/davfs2/secrets

C'est presque terminé. Afin que d'autres utilisateurs que root puissent écrire dans le futur montage, on change le groupe de /mnt/nextcloud :

		# chown root:davfs2 /mnt/nextcloud

et on ajoute à ce groupe les utilisateurs qui auront un droit d'écriture :

		# usermod -a -G davfs2 john

Il nous reste à ajouter le montage dans /etc/fstab :

https://example.org/nextcloud/remote.php/webdav/ /mnt/nextcloud davfs nouser,noauto,x-systemd.automount,x-systemd.device-timeout=10,_netdev,file_mode=774,dir_mode=775,uid=root,gid=davfs2 0 0

noauto,x-systemd.automount permet de dire à systemd de monter la partition uniquement lors du premier accès à cette dernière et non pas au démarrage (pour ne pas trop le ralentir). x-systemd.device-timeout indique le temps à attendre.

Normalement à ce stade, tout est terminé. Étant donné que systemd est impliqué, on peut lancer les 2 commandes suivantes, à tout hasard, afin de satisfaire la Bête :

		# systemctl daemon-reload
		# systemctl restart remote-fs.target

Et on peut enfin monter le répertoire :

		# mount /mnt/nextcloud

On vérifie ensuite, d'abord depuis un terminal, que root peut lire et écrire des fichiers, on passe ensuite aux utilisateurs du groupe davfs2. Enfin, on teste depuis une interface graphique que le répertoire est accessible, lisible et que l'utilisateur peut y déposer des fichiers. Attention, Nextcloud ne gérant pas les verrous WebDAV, si plusieurs utilisateurs travaillent dans le répertoire en même temps, ils peuvent avoir quelques surprises si le même fichier est édité. On peut à tout hasard redémarrer la machine afin de vérifier que tout fonctionne encore.