Sévérité : Élevéesystemd

Service systemd en échec « Permission denied » après déploiement

```text
app.service: Failed at step EXEC spawning /opt/app/bin/start: Permission denied
PermissionError: [Errno 13] Permission denied: '/opt/app/config/app.yml'
```

Détecter

Après une mise à jour, le service applicatif ne démarre plus. systemctl status affiche failed et redémarre en boucle.

Symptômes

Après une mise à jour, le service applicatif ne démarre plus. systemctl status affiche failed et redémarre en boucle.

Environnement

Service systemd avec User=appsvc, fichiers déployés par un script exécuté en root dans /opt/app.

Cause racine

Le script de déploiement a copié les fichiers en root avec un umask restrictif : l'exécutable a perdu son bit x et la configuration appartient à root:root en 600, illisible par appsvc.

Diagnostic

  1. journalctl -u app -n 50 : repérer le fichier en cause.
  2. namei -l /opt/app/config/app.yml : droits de chaque composant du chemin.
  3. sudo -u appsvc cat /opt/app/config/app.yml : reproduire en tant que compte de service.
  4. Si les droits POSIX sont corrects : vérifier SELinux (ls -Z, ausearch -m avc -ts recent).

Solution

Rendre les fichiers au bon propriétaire et aux bons modes, sans élargir inutilement :

chown -R root:appsvc /opt/app
find /opt/app -type d -exec chmod 750 {} +
chmod 640 /opt/app/config/app.yml
chmod 750 /opt/app/bin/start
systemctl restart app

Commandes

systemctl status app
journalctl -u app -b --no-pager | tail -30
namei -l /opt/app/bin/start

Prévention

Déploiement via paquet ou Ansible déclarant propriétaires et modes, test post-déploiement (systemctl is-active), jamais de chmod 777.