GNU/Linux >> Linux Esercitazione >  >> Linux

systemd:concede a un utente senza privilegi il permesso di modificare un servizio specifico

Soluzione 1:

Posso pensare a due modi per farlo:

Uno è rendere il servizio un servizio per l'utente piuttosto che un servizio di sistema.

Invece di creare un'unità di sistema, l'unità systemd verrà posizionata nella home directory dell'utente del servizio, in $HOME/.config/systemd/user/daemon-name.service . Lo stesso utente può quindi gestire il servizio con systemctl --user <action> daemon-name.service .

Per consentire all'unità utente di avviarsi all'avvio, root deve abilitare linger per l'account, ad esempio sudo loginctl enable-linger username . Anche l'unità deve essere WantedBy=default.target .

L'altro modo consiste nel consentire all'utente di accedere alla gestione dell'unità di sistema tramite PolicyKit. Ciò richiede systemd 226 o superiore (e PolicyKit>=0.106 per i file JavaScript rules.d – controlla con pkaction --version ). Si noti che Debian ha deliberatamente trattenuto PolicyKit a una versione 0.105 vecchia di quasi dieci anni che non supporta questa funzionalità, apparentemente a causa dell'opinione personale di una persona, e né esso né le distribuzioni da esso derivate (come Ubuntu) possono utilizzare questo metodo.

Dovresti creare un nuovo file di configurazione di PolicyKit, ad es. /etc/polkit-1/rules.d/57-manage-daemon-name.rules che verifica gli attributi che si desidera consentire. Ad esempio:

// Allow alice to manage example.service;
// fall back to implicit authorization otherwise.
polkit.addRule(function(action, subject) {
    if (action.id == "org.freedesktop.systemd1.manage-units" &&
        action.lookup("unit") == "example.service" &&
        subject.user == "alice") {
        return polkit.Result.YES;
    }
});

L'utente denominato può quindi gestire il servizio denominato con systemctl e senza usare sudo .

Soluzione 2:

sudo è fatto per questo. Modifica il tuo /etc/sudoers file con visudo per aggiungere un Cmd_alias per i comandi che vuoi che l'utente senza privilegi possa usare:

# game server commands
Cmnd_Alias GAME_CMDS = /usr/bin/systemctl start <game service>, /usr/bin/systemctl stop <game service>

e aggiungi una riga per consentire all'utente non privilegiato di utilizzare i comandi definiti con l'alias in questo modo:

unprivileged_user ALL=(ALL) NOPASSWD: GAME_CMDS

Leggi altra documentazione sull'argomento per i vari parametri del comando sudo.

Potrebbe essere necessario installare sudo pacchetto per avere sudo disponibile sul tuo sistema.


Linux
  1. Come creare un servizio Systemd in Linux

  2. Aggiunta di un nuovo servizio a Linux systemd

  3. Autorizzazione SELECT INTO OUTFILE negata ma l'utente può scrivere nella directory

  4. Come interrompere il servizio systemd

  5. Autorizzazione docker.sock negata

Comandi Systemctl per gestire il servizio Systemd

Utilizzo delle funzionalità di systemd per proteggere i servizi

Gestire cgroup con systemd

Fai in modo che il servizio utente di systemd dipenda dalla destinazione del sistema

attivazione del socket systemd rispetto a xinetd

SSH:una chiave_autorizzata per più account di servizio