40 votes

Configurer le service systemd pour s'exécuter avec un accès root

J'ai un service sous forme d'une application node.js configurée avec Systemd sur Raspbian Jessie et elle utilise son propre compte utilisateur. Cependant, je trouve que le service ne s'exécute pas correctement car il n'a pas les autorisations nécessaires. L'un des modules node que j'ai installés nécessite un accès root. Si je lance l'application manuellement avec sudo, tout fonctionne correctement.

Y a-t-il un moyen de dire à systemd d'exécuter le service avec sudo ?

46voto

snowdude Points 2790

dire à systemd d'exécuter le service avec sudo ?

sudo n'a rien à voir avec ça.

En général, vous indiquez à systemd d'exécuter un service en tant qu'utilisateur / groupe spécifique avec une directive User= et Group= dans la section [Service] du fichier d'unité.

Définissez-les sur root (ou supprimez-les, car l'exécution en tant que root est la valeur par défaut).

31voto

Mark Stosberg Points 3665

Pour être clair, les services système systemd s'exécutent par défaut en tant que root, mais il existe toujours une différence entre le comportement par défaut et l'exécution d'un service système avec User=root.

Comme documenté dans Variables d'environnement dans les processus engendrés, ces variables ne sont définies que si User= est défini:

$USER, $LOGNAME, $HOME, $SHELL

J'ai testé pour confirmer cette constatation. Donc si vous souhaitez exécuter un service systemd en tant que root nécessitant l'une des variables ci-dessus, vous devez définir User=root.

3voto

daino3 Points 199

Une solution temporaire, mais réussi à le faire fonctionner en un clin d'œil :

/usr/bin/sudo /bin/bash -lc 'bundle exec rails server -e demo -p 80'

Peut être exécuté avec un utilisateur ayant des privilèges sudo dans un fichier unité systemd comme suit :

[Unit]
Description=Serveur Web Rails
After=syslog.target

[Service]
Type=simple
User=ubuntu
WorkingDirectory=/var/www/webserver
ExecStart=/usr/bin/sudo /bin/bash -lc 'bundle exec rails server -e demo -p 80'
Restart=always
KillSignal=SIGQUIT

[Install]
WantedBy=multi-user.target

1voto

Umut Points 401

Exécutez-le en tant qu'utilisateur système dans ce cas, par défaut le service s'exécute en tant que root.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X