[Unit] Description=Fail2banActionBanisher - émetteur : relais vers le master (master_client, SYNC_BAN) After=network.target mosquitto.service Requires=mosquitto.service [Service] Type=simple User=__EMITTER_USER__ Group=__EMITTER_GROUP__ WorkingDirectory=__EMITTER_DIR__ EnvironmentFile=__ENV_FILE__ Environment=DJANGO_SETTINGS_MODULE=config.settings.production Environment=PYTHONUNBUFFERED=1 ExecStart=__EMITTER_DIR__/.venv/bin/python manage.py master_client Restart=on-failure RestartSec=5 # Pas de NoNewPrivileges=true ici, contrairement aux autres services de # l'émetteur : ce process a structurellement besoin d'escalader via sudo # (execute_sync_ban -> `sudo fail2ban-client set master-sync banip `, # cf. master_client.py). NoNewPrivileges bloque tout mécanisme de gain de # privilège au niveau execve, y compris le setuid de sudo lui-même — sudo # échoue alors avec "the 'no new privileges' flag is set", quels que soient # les droits sudoers. Repéré seulement en conditions réelles (le premier # vrai SYNC_BAN reçu d'un autre noeud) : les tests précédents mockaient # subprocess.run, donc n'exerçaient jamais cette interaction avec systemd. ProtectSystem=strict PrivateTmp=true ReadWritePaths=__EMITTER_DIR__ [Install] WantedBy=multi-user.target