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
journalctl -u app -n 50: repérer le fichier en cause.namei -l /opt/app/config/app.yml: droits de chaque composant du chemin.sudo -u appsvc cat /opt/app/config/app.yml: reproduire en tant que compte de service.- 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.