Configurazione del servizio Systemd per l'esecuzione con accesso root


21

Ho un servizio sotto forma di un'applicazione node.js impostata con Systemd su Raspbian Jessie e sta usando il proprio account utente. Tuttavia, sto scoprendo che il servizio non funziona correttamente perché non dispone delle autorizzazioni necessarie. Uno dei moduli nodo che ho installato richiede l'accesso come root. Se eseguo manualmente l'applicazione con sudo, tutto funziona bene.

C'è un modo per dire a systemd di eseguire il servizio con sudo?


2
Come appare il tuo file unitario, aggiungilo alla tua domanda? Normalmente systemdesegue i file di unità con diritti di root.
Thomas,

Risposte:


31

dire a systemd di eseguire il servizio con sudo?

sudo non ha nulla a che fare con esso.

In genere si indica a systemd di eseguire un servizio come utente / gruppo specifico con a User=e Group=direttiva nella [Service]sezione del file di unità.

Impostare quelli su root (o rimuoverli, poiché l'esecuzione come root è l'impostazione predefinita).


L'ho configurato per utilizzare un utente specifico mentre stavo usando una guida per configurarlo. Tuttavia nel mio caso questo non era appropriato. Ho rimosso questo per funzionare come root per impostazione predefinita e ora tutto funziona!
Luca,

2
L'esecuzione come root non è esattamente uguale a quella con User=root. Vedi la mia risposta
Mark Stosberg,

Dove può essere modificato questo file?
Matteo


15

Per cancellare, i systemdservizi di sistema vengono eseguiti come root per impostazione predefinita, ma esiste ancora una differenza tra il comportamento predefinito e l'esecuzione di un servizio di sistema User=root.

Come documentato in Variabili d'ambiente nei processi generati , queste variabili sono impostate solo se User=è impostato:

$USER, $LOGNAME, $HOME, $SHELL

Ho testato per confermare questo risultato. Quindi, se si desidera eseguire un servizio systemd come root che necessita di una delle variabili sopra, è necessario impostare User=root.


Grazie! Questa è stata l'unica cosa che ha funzionato per me in un'applicazione che ho
Pedro Torres,

NB se imposti User = root dovresti probabilmente anche impostare Group = root :) superuser.com/a/1452367/39364
rogerdpack

2

una soluzione temporanea, ma ha funzionato in un attimo:

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

Può essere eseguito con un utente che ha i privilegi di sudo in un file di unità systemd in questo modo:

[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

Ciò ha diversi problemi: in primo luogo, le prime due risposte spiegano perché non è necessario utilizzare un utente e quindi sudo e mostrano il modo giusto per farlo. In secondo luogo, non dovresti comunque eseguire la tua webapp come root. In terzo luogo, l'app Web dovrebbe trovarsi dietro un normale server Web come nginx.
Michael Hampton

Non sarò d'accordo con te su nessuno dei tuoi punti. Ma se qualcuno, come me, voleva un stand-up semplice e veloce come un server, questa è un'opzione praticabile che funziona.
daino3,

Quasi il più velocemente possibile. Ovviamente l'utilizzo sudorallenterà un po 'l'avvio. Ed è inutile.
Michael Hampton

@MichaelHampton Sto cercando di scrivere una backdoor, quindi ho trovato utile questa risposta!
P. Soutzikevich,

1

Eseguirlo come utente di sistema in questo caso per impostazione predefinita, il servizio è in esecuzione come root.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.