systemd

Migrate vers systemd-sysusers et tmpfiles pour gérer comptes et répertoires proprement

Créez des comptes système, définissez les permissions et gérez les répertoires de service avec systemd-sysusers et tmpfiles, sans scripts fragiles.

Par Julien Martel 9 min de lecture
Migrate vers systemd-sysusers et tmpfiles pour gérer comptes et répertoires proprement

Pour déployer un service interne proprement, déclarez son compte avec systemd-sysusers, ses répertoires persistants avec systemd-tmpfiles et son processus dans l’unité systemd. Cette séparation remplace les suites fragiles de useradd, mkdir, chown et rm par des déclarations relues de façon idempotente.

Elle convient aux paquets comme aux déploiements gérés par configuration. Les fichiers de déclaration fournissent une source de vérité lisible, y compris lorsque le compte ou les répertoires existent déjà.

Déclarer le compte et les répertoires

Pour un logiciel distribué par paquet, placez les déclarations de l’éditeur dans /usr/lib/sysusers.d/ et /usr/lib/tmpfiles.d/. Un administrateur peut les remplacer avec un fichier de même nom dans /etc/, selon les règles de sysusers.d et de tmpfiles.d.

Créez par exemple /usr/lib/sysusers.d/acme-sync.conf. Le type g déclare le groupe, le type u l’utilisateur et le tiret demande à systemd de choisir un identifiant disponible.

g acme-sync -

u acme-sync acme-sync "Service de synchronisation Acme" /var/lib/acme-sync /usr/sbin/nologin

Le champ /var/lib/acme-sync définit le répertoire personnel, mais tmpfiles doit créer explicitement ce chemin et ses droits. Évitez de fixer un UID numérique sans besoin opérationnel précis : il peut entrer en conflit avec des politiques locales ou d’autres logiciels.

Créez ensuite /usr/lib/tmpfiles.d/acme-sync.conf. La directive d crée le répertoire s’il manque et applique son mode, son propriétaire et son groupe.

d /var/lib/acme-sync 0750 acme-sync acme-sync -

d /var/cache/acme-sync 0750 acme-sync acme-sync 30d

Le premier chemin conserve l’état durable ; le second est un cache que systemd-tmpfiles peut nettoyer après 30d. Appliquez les règles avec systemd-tmpfiles --create et exécutez le nettoyage avec systemd-tmpfiles --clean.

N’utilisez pas Z, qui ajuste récursivement propriétaires, modes et contextes de sécurité, sans vérifier que le service est seul propriétaire du contenu. Sur un chemin partagé, cette règle peut modifier des fichiers qui ne lui appartiennent pas.

Confier l’exécution à l’unité

L’unité exécute le processus sous l’identité déclarée et peut gérer son répertoire d’exécution. Pour Acme Sync :

[Service]

User=acme-sync
Group=acme-sync
RuntimeDirectory=acme-sync
RuntimeDirectoryMode=0750
ExecStart=/usr/libexec/acme-sync

RuntimeDirectory=acme-sync crée /run/acme-sync pour la durée d’exécution. Ne déclarez pas ce même chemin dans tmpfiles : chaque répertoire doit avoir un responsable clair.

Testez d’abord la déclaration avec systemd-sysusers, puis vérifiez le compte avec getent passwd acme-sync et getent group acme-sync. Vérifiez enfin que l’outil de paquetage ou la procédure de déploiement applique systemd-sysusers et systemd-tmpfiles --create avant d’activer le service.

Commentaires · Aucun commentaire pour l'instant

Soyez le premier à réagir.

Laisser un commentaire