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?
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).
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
.
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
Exécutez-le en tant qu'utilisateur système dans ce cas, par défaut, le service s'exécute en tant que root.