Rendre le data_dir visible au service : ProtectHome=tmpfs + BindPaths

Le data_dir de YunoHost vit sous /home/yunohost.app/mabibli, or
ProtectHome=yes rend /home vide dans le namespace du service : le démarrage
mourait sur « SQLite Error 14: unable to open database file ».

ReadWritePaths ne perce pas ProtectHome — vérifié sur une unité de test :
`yes` + ReadWritePaths échoue, `tmpfs` + BindPaths réussit. La forme retenue
garde les répertoires personnels du serveur invisibles au service.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
mathieu
2026-08-18 19:26:48 +02:00
co-authored by Claude Opus 5
parent 4e9bd8be71
commit 7ab423783f
2 changed files with 12 additions and 2 deletions
+11 -1
View File
@@ -71,7 +71,17 @@ NoNewPrivileges=yes
PrivateTmp=yes
PrivateDevices=yes
DevicePolicy=closed
ProtectHome=yes
# ⚠️ `yes` ne convient PAS ici, et c'est contre-intuitif.
# Le `data_dir` de YunoHost vit sous `/home/yunohost.app/__APP__`. `ProtectHome=yes`
# rend `/home` inaccessible et vide dans le namespace du service : la base devient
# introuvable, et le démarrage meurt sur « SQLite Error 14: unable to open database
# file ». `ReadWritePaths=` ne suffit pas à percer cette protection — mesuré sur une
# unité de test : `yes` + `ReadWritePaths` échoue, `tmpfs` + `BindPaths` réussit.
#
# `tmpfs` conserve l'essentiel du bénéfice : les répertoires personnels du serveur
# restent invisibles au service, seul son propre répertoire de données est remonté.
ProtectHome=tmpfs
BindPaths=__DATA_DIR__
ProtectHostname=yes
ProtectClock=yes
ProtectControlGroups=yes
+1 -1
View File
@@ -7,7 +7,7 @@ name = "MaBibli"
description.fr = "Gestion de bibliothèque personnelle : catalogue, prêts et scan ISBN"
description.en = "Personal library manager: catalogue, loans and ISBN scanning"
version = "0.1.0~ynh2"
version = "0.1.0~ynh3"
maintainers = ["mathieu"]