web-dev-qa-db-fra.com

Configuration du service Systemd pour s'exécuter avec un accès root

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

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

22
Luke

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

Sudo n'a rien à voir avec ça.

En règle générale, vous demandez à systemd d'exécuter un service en tant qu'utilisateur/groupe spécifique avec un User= et Group= directive dans le [Service] section 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).

34
HBruijn

Pour effacer, systemd les services système s'exécutent en tant que root par défaut, 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 indiqué dans Variables d'environnement dans les processus générés , ces variables ne sont définies que si User= est défini:

$USER, $LOGNAME, $HOME, $Shell

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

15
Mark Stosberg

une solution temporaire, mais l'a fait fonctionner en un rien de temps:

/usr/bin/Sudo /bin/bash -lc 'bundle exec Rails server -e demo -p 80'

Peut fonctionner avec un utilisateur disposant des privilèges Sudo dans un fichier d'unité systemd comme ceci:

[Unit]
Description=Rails Webserver
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
2
daino3

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

1
Umut