Consenti al gruppo non sudo di controllare il processo di avvio


11

Sto cercando di impostare un processo Upstart da eseguire all'avvio del sistema e che può anche essere avviato / arrestato da membri di un gruppo diverso da sudo. Con una versione precedente, ho usato update-rc.de gli script archiviati /etc/init.d/per farlo funzionare aggiungendo %Group ALL = NOPASSWD: /etc/init.d/scriptnameal mio file sudoers, ma non riesco a ottenere un equivalente funzionante per Upstart.

Ho provato ad aggiungere %Group ALL = NOPASSWD: /sbin/initctl start jobnameal file sudoers, ma provare a eseguire il comando start jobnameproduce questo errore:

start: Rejected send message, 1 matched rules; type="method_call", sender=":1.21" (uid=1000 pid=5148 comm="start jobname " interface="com.ubuntu.Upstart0_6.Job" member="Start" error name="(unset)" requested_reply="0" destination="com.ubuntu.Upstart" (uid=0 pid=1 comm="/sbin/init")

Per quanto posso dire, è una lamentela su come il mio account utente non ha il potere di inviare messaggi "Start" nel file di configurazione D-Bus per Upstart. Non sono stato effettivamente in grado di trovare alcuna informazione su come modificare quel file per autorizzare un gruppo ad accedere a un servizio specifico - esiste una tale opzione? C'è un modo per modificare il file Sudoers in modo che io possa eseguire il lavoro senza modificare il file di configurazione? Sto meglio solo con la versione precedente?

Risposte:


7

Puoi iniziare scoprendo dove è conservata la configurazione D-Bus specifica per Upstart. Vedi quello destination="com.ubuntu.Upstart"snippet dal messaggio di errore? Ora prova a grep nella cartella con i file di configurazione D-Bus:

vhost07:~ $ grep -r "com.ubuntu.Upstart" /etc/dbus-1
/etc/dbus-1/system.d/Upstart.conf:    <allow own="com.ubuntu.Upstart" />
[...skipped...]

Quel Upstart.conffile contiene alcuni esempi di criteri. Immagino che potresti provare a capire il formato di una politica da loro. Quindi prova a consentire al tuo utente specifico solo le azioni di cui ha bisogno. Ad esempio, come in:

<policy user="pope_benedict">
  <allow send_destination="com.ubuntu.Upstart"
         send_interface="com.ubuntu.Upstart0_6.Job"
         send_member="Start"/>
</policy>

Ciò dovrebbe consentire pope_benedictall'utente di iniziare quel lavoro.

Si noti che i valori per gli attributi di criterio "consenti" sono elencati nel messaggio di errore originale.


1
Oh, e non dimenticare di riavviare D-Bus dopo questo! :)
Iuliu Pascaru il

L'ho trovato un po 'sconcertante, ma questo mi ha aiutato: blog.arkency.com/2014/07/…
Mike Campbell

7

Personalmente sto usando la seguente riga nel file /etc/sudoers.d/jobname_myuser:

myuser ALL = (root) NOPASSWD: /sbin/start jobname, /sbin/stop jobname, /sbin/restart jobname, /sbin/status jobname

come descritto qui: /server//a/390723/68608


2

Tale opzione non esiste in sudo.

La differenza tra script Sysv e file di configurazione di Upstart è proprio questo: gli script Sysv sono script, eseguibili a sé stanti e puoi dire a sudo di consentire ad alcuni gruppi di eseguirli. D'altra parte, i file di configurazione di Upstart sono semplicemente file di configurazione, non eseguibili, quindi l'esecuzione di start(link simbolico a initctl) è ciò che sudo consente. Il tuo problema qui è che consentire alle persone di eseguirti initctlti consente di initctltutto.

La soluzione è semplice se la tua preoccupazione è solo un singolo lavoro. Crea una sceneggiatura, dì /usr/bin/jobname.shcon

#!/bin/sh
initctl $1 jobname

quindi chmod 755 /usr/bin/jobname.she infine aggiungi l'eseguibile al tuo file sudoers:

%Group ALL = NOPASSWD: /usr/bin/jobname.sh

In questo modo, tutti possono chiamare jobname.sh starto jobname.sh stopcontrollare questo specifico lavoro. Potresti voler aggiungere alcuni controlli per consentire solo starte stopparametri ecc.


In altre parole, il mio problema non è che il sistema nega ai membri del gruppo la possibilità di essere eseguito initctl, ma che Upstart rifiuta qualsiasi segnale inviato da utenti / gruppi a cui non è stata esplicitamente assegnata una voce Consenti politica in Upstart.conf? E non c'è modo di fornire più granularità di un'impostazione per tutti i lavori o nessuna nel file di configurazione?
Angolo O'Saxon,

Initctl nel tuo caso funziona benissimo anche senza la modifica dei sudoers, Upstart sta semplicemente rifiutando i messaggi da esso se non lo permetti specificamente per utenti non root. Vedi le altre due risposte. È possibile definire la politica dbus in base al lavoro (vedere la com.ubuntu.Upstart0_6.<JOB>parte) in Upstart.conf. A seconda delle tue esigenze, potrebbe essere più semplice creare questo tipo di script per esso invece di scrivere politiche dbus e riavviare dbus ecc. La politica Dbus è ovviamente la cosa "giusta" da fare, ma a seconda del caso, un semplice script potrebbe andare a lunga strada con meno problemi.
Tuminoide,

Modifica del criterio DBus per utilizzare com.ubuntu.Upstart0_6.jobnamecome send_interfaceprodotto lo stesso messaggio di errore di prima. Se ho ragione nel supporre che l'output dell'errore contenga le informazioni sul segnale, sembra che l'interfaccia o la destinazione non riflettano il servizio Upstart a cui fa riferimento il segnale. Penso che le informazioni sul servizio siano solo argomenti nel messaggio di chiamata del metodo D-Bus e non sono sicuro di poter modificare la politica D-Bus per Upstart per prendere decisioni basate sui valori degli argomenti.
Angle O'Saxon,

Uno script del tipo che suggerisci sta funzionando abbastanza bene per me, con un avvertimento: ho avuto bisogno di eseguirlo come sudo jobname.sh start, così Upstart vede la richiesta come proveniente rootdall'utente. Sto facendo uno sforzo per provare a farlo questo nel modo "giusto" (quindi, in primo luogo, allontanarsi dagli script Sys-V), quindi mi piacerebbe farlo funzionare attraverso un criterio D-Bus o qualche altra opzione di configurazione di Upstart, ma se non posso farlo funzionare Accetterò questa risposta.
Angle O'Saxon,

1
Vorrei anche citare "$1". Con il tuo [ "$1" = "start" -o "$1" = "stop" ]test credo sia $1un'espansione sicura ma non quotata in una sceneggiatura come root è solo un'abitudine malsana (a meno che la divisione delle parole non sia volutamente voluta) ...
Beni Cherniavsky-Paskin

0

Come indicato sopra, il demone dbus ha un file di configurazione specializzato per una particolare applicazione.

ls /etc/dbus-1/system.d/
avahi-dbus.conf
bluetooth.conf
...
Upstart.conf
wpa_supplicant.con

Il file di configurazione stabilisce inoltre limiti di risorse, parametri di sicurezza e così via.

Per i dettagli vedere dbus-daemon-1 (1) - Pagina man di Linux

Per consentire a un gruppo di avviare / arrestare i lavori Upstart aggiungere la seguente politica a /etc/dbus-1/system.d/Upstart.conf

  <policy group="YourGroupName">
    <allow send_destination="com.ubuntu.Upstart"
       send_interface="com.ubuntu.Upstart0_6.Job"
       send_type="method_call" send_member="Start" />
    <allow send_destination="com.ubuntu.Upstart"
       send_interface="com.ubuntu.Upstart0_6.Job"
       send_type="method_call" send_member="Stop" />
  </policy>

È necessario considerare le implicazioni di sicurezza di tale politica prima di modificare la politica predefinita. I membri di YourGroupName saranno in grado di avviare / interrompere tutti i lavori Upstart.


Ma c'è un modo per limitare i lavori che possono controllare? O non è possibile perché D-Bus non presta attenzione al contenuto del messaggio?
Angle O'Saxon,

Ho provato ad aggiungere quella politica a Upstart.conf (sostituendo il nome gruppo con il mio nome gruppo effettivo), ho riavviato D-Bus e ho ottenuto start: You do not have permission to modify job: jobnamequando ho provato ad avviare il servizio.
Angle O'Saxon,

OK. Ciò significa che la politica è stata applicata con successo. Sembra che yourjob.conf sia in / etc / init. I lavori dell'utente dovrebbero essere in ~ / .init. È plausibile nel tuo caso d'uso posizionare yourjob.conf in ~ / .init?
Goran Miskovic,

Per quanto riguarda la prima domanda: la politica definisce a quali interfacce e membri è possibile accedere. Definisce il contenuto / gli argomenti che possono essere inviati / passati. L'attuale politica restrittiva è stata attenuata a monte. Vedere impossibile iniziare per eseguire il processo utente
Goran Miskovic,
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.