From 19c5f41751255cfbcd70e57e8ea1f9b3c37bff4e Mon Sep 17 00:00:00 2001 From: Mathieu Benoit Date: Thu, 30 Jul 2026 03:21:58 -0400 Subject: [PATCH] =?UTF-8?q?[FIX]=20script=20todo:=20service=20Odoo=20dev?= =?UTF-8?q?=20=E2=80=94=20SELinux=20permissif=20(unconfined=20inefficace)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit « SELinuxContext=unconfined_u:unconfined_r:unconfined_t:s0 » ne débloque PAS l'exécution : la transition init_t -> unconfined_t est refusée par la politique -> le service échouait toujours en 203/EXEC (« Permission denied » sur run.sh, contexte user_home_t) sur Fedora. En DEV (VM jetable, « SELinux relâché ») on passe désormais SELinux en PERMISSIF (setenforce 0 + persistance dans /etc/selinux/config) si actif -> le service exécute run.sh/venv sous /home sans blocage. PROD reste confiné (/opt/erplibre hors user_home_t + restorecon) — à peaufiner quand on reviendra sur la prod. Co-Authored-By: Claude Opus 4.8 (1M context) --- script/todo/todo.py | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/script/todo/todo.py b/script/todo/todo.py index 32c513b..6501884 100755 --- a/script/todo/todo.py +++ b/script/todo/todo.py @@ -3080,26 +3080,28 @@ class TODO: """Snippet shell (exécuté dans la VM) qui installe ERPLibre/Odoo comme service systemd puis l'active. N'est ajouté QUE pour les profils Odoo. - DEV : ERPLibre sous ~/home ; si SELinux est actif (Fedora), on lève le - confinement du service (unconfined) — un service système ne peut pas - exécuter du user_home_t. Acceptable pour une VM de dev. + DEV : ERPLibre sous ~/home. Un service système ne peut PAS exécuter + du user_home_t sous SELinux, et « SELinuxContext=unconfined » ne suffit + pas (transition init_t -> unconfined_t refusée -> toujours 203/EXEC). + Sur une VM de dev jetable, on passe donc SELinux en PERMISSIF (relâché). PROD : ERPLibre sous /opt/erplibre (hors user_home_t) -> le service reste CONFINÉ par SELinux ; on restaure les contextes (restorecon).""" svc_dir = self._qemu_install_dir(prod) + selinux_shell = 'SELINUX_LINE=""; ' # pas de SELinuxContext (inefficace) if prod: pre = ( "command -v restorecon >/dev/null 2>&1 && " "sudo restorecon -R /opt/erplibre >/dev/null 2>&1 || true; " ) - selinux_shell = 'SELINUX_LINE=""; ' # confiné : pas d'unconfined else: - pre = "" - selinux_shell = ( - 'SELINUX_LINE=""; ' + # DEV : SELinux permissif (persistant) si actif -> le service peut + # exécuter run.sh/venv sous /home. + pre = ( "if command -v getenforce >/dev/null 2>&1 && " - '[ "$(getenforce)" != "Disabled" ]; then ' - 'SELINUX_LINE="SELinuxContext=unconfined_u:unconfined_r:' - 'unconfined_t:s0"; fi; ' + '[ "$(getenforce)" = "Enforcing" ]; then ' + "sudo setenforce 0 || true; " + "sudo sed -i 's/^SELINUX=enforcing/SELINUX=permissive/' " + "/etc/selinux/config 2>/dev/null || true; fi; " ) return ( f'SVC_USER=$(whoami); SVC_GROUP=$(id -gn); SVC_DIR="{svc_dir}"; '