consentendo all'utente di eseguire servizi systemctl / systemd senza password


25

Voglio che l'utente predefinito ubuntusia in grado di eseguire un servizio specifico senza che venga richiesta una password.

In particolare systemctl restart unicorn_my_app.service.

Ho seguito le istruzioni qui per aggiungere l'utente ubuntua un gruppo appena creato LimitedAdmins, che è confermato con:

$ getent group LimitedAdmins
LimitedAdmins:x:1001:ubuntu

Creato un nuovo file, limitedadmins(usando sudo vim) nella /etc/sudoers.ddirectory contenente il seguente testo:

%LimitedAdmins ALL=NOPASSWD: /etc/init.d/unicorn_ofn_america restart, /etc/init.d/unicorn_ofn_america start

Ho anche provato:

%LimitedAdmins ALL=NOPASSWD: /bin/systemctl/unicorn_ofn_america restart, /bin/systemctl/unicorn_ofn_america start

(E /bin/systemd)

Il contenuto di /etc/sudoers/è predefinito come confermato con sudo visudo(o sudo cat /etc/sudoers):

    #
    # This file MUST be edited with the 'visudo' command as root.
    #
    # Please consider adding local content in /etc/sudoers.d/ instead of
    # directly modifying this file.
    #
    # See the man page for details on how to write a sudoers file.
    #
    Defaults    env_reset
    Defaults    mail_badpass
    Defaults    secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

    # Host alias specification

    # User alias specification

    # Cmnd alias specification

    # User privilege specification
    root    ALL=(ALL:ALL) ALL

    # Members of the admin group may gain root privileges
    %admin ALL=(ALL) ALL

    # Allow members of group sudo to execute any command
    %sudo   ALL=(ALL:ALL) ALL

    # See sudoers(5) for more information on "#include" directives:

    #includedir /etc/sudoers.d

(L'hash access #includedirnon è un commento, ma fa parte della sintassi della direttiva #include ).

Tuttavia c'è ancora una richiesta di password dopo l'esecuzione systemctl restart unicorn_my_app.service

Il servizio è presente nella init.ddirectory:

$ ls -l /etc/init.d | grep unicorn
-rwxr--r-- 1 ubuntu ubuntu 1874 Oct 29 06:47 unicorn_my_app

Ho provato a sorridere 755sull'app, ma non pensare che dovrebbe fare la differenza, dal momento che lo ubuntupossiede comunque.

Ho anche provato a riavviare il sistema senza alcuna differenza. Mi manca un passaggio, come un riavvio / ricaricare)? Configurare qualcosa di sbagliato?

Dovrei anche menzionare che ho usato vimper creare il nuovo file all'interno /etc/sudoers.d, in quanto sembra che il visudocomando sia solo per la modifica /etc/sudoers.


Risposte:


38

Il file sudoers è abbastanza flessibile e con ciò arriva complessità. Quello che vuoi qui è consentire l'accesso al comando /bin/systemctl, con parametri specifici:

%LimitedAdmins ALL=NOPASSWD: /bin/systemctl restart unicorn_my_app.service

Fondamentalmente prendi esattamente la riga di comando che dovresti digitare, codifica il nome del percorso per motivi di sicurezza, e inseriscilo nel tuo file sudoers (o /etc/sudoers.d). E nota che 'start' e 'restart' sono completamente diversi per quanto riguarda sudo; consentire a uno di non concedere l'accesso all'altro.


1
Non sembra funzionare. Posso copiare /bin/systemctl restart unicorn_my_app.servicedirettamente dal /etc/sudoers.d/limitedadminsfile ed eseguirlo nella CLI e mi viene richiesta una password. L'utente ubuntudeve essere specificato da qualche parte o lo ALLapre a tutti gli utenti per tutti i domini?
MikeiLL,

5
Si eseguirà sudo /bin/systemctl restart unicorn_my_app.servicee dovrebbe quindi funzionare senza una password. (postando come commento nel caso in cui la risposta di PsiOps sia separata da questa)
rosuav,

1
@rosuav C'è un modo per poterlo eseguire direttamente come systemctl restart myapp.servicesenza usare sudo.
kabirbaidhya,

Non proprio, ma potresti mettere il comando in uno script (completo con il prefisso sudo), e poi mettere quello script in $ PATH. O renderlo un alias di shell.
Rosuav,

3
Attenzione: su altre distro systemctl è presente /usr/bin:-(.
guettli
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.