permitiendo al usuario ejecutar servicios systemctl / systemd sin contraseña

25

Quiero que el usuario predeterminado ubuntupueda ejecutar un servicio específico sin que se le solicite una contraseña.

Específicamente systemctl restart unicorn_my_app.service.

Han seguido las instrucciones aquí para agregar usuarios ubuntua un grupo recién creado LimitedAdmins, que se confirma con:

$ getent group LimitedAdmins
LimitedAdmins:x:1001:ubuntu

Creó un nuevo archivo, limitedadmins(usando sudo vim) en el /etc/sudoers.ddirectorio que contiene el siguiente texto:

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

También he intentado:

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

(Y /bin/systemd)

El contenido de /etc/sudoers/es el predeterminado según lo confirmado 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

(El inicio de sesión hash #includedirno es un comentario, sino parte de la sintaxis de la directiva #include ).

Sin embargo, todavía hay un mensaje de contraseña después de ejecutar systemctl restart unicorn_my_app.service

El servicio está allí en el init.ddirectorio:

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

Intenté chmodding 755en la aplicación, pero no creo que eso haga la diferencia, ya que la ubuntuposee de todos modos.

Incluso trató de reiniciar el sistema sin diferencia. ¿Me estoy perdiendo un paso, como un reinicio / recarga)? ¿Configurando algo mal?

También debo mencionar que solía vimcrear el nuevo archivo dentro /etc/sudoers.d, ya que parece que el visudocomando es solo para editar /etc/sudoers.

MikeiLL
fuente

Respuestas:

38

El archivo sudoers es bastante flexible, y con eso viene la complejidad. Lo que quiere aquí es permitir el acceso al comando /bin/systemctl, con parámetros específicos:

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

Básicamente, simplemente toma la línea de comando exacta que escribiría, codifica el nombre de la ruta por razones de seguridad y la coloca en su archivo sudoers (o /etc/sudoers.d). Y tenga en cuenta que 'inicio' y 'reinicio' son completamente diferentes en lo que respecta a sudo; permitir que uno no otorgue acceso al otro.

rosuav
fuente
1
No parece estar funcionando. Puedo copiar /bin/systemctl restart unicorn_my_app.servicedirectamente desde el /etc/sudoers.d/limitedadminsarchivo y ejecutarlo en la CLI, y se me solicita una contraseña. ¿El usuario ubuntunecesita que se especifique tp en algún lugar o lo ALLabre a todos los usuarios para todos los dominios?
MikeiLL
55
Usted correría sudo /bin/systemctl restart unicorn_my_app.servicey luego debería ejecutarse sin contraseña. (publicación como comentario en caso de que la respuesta de PsiOps esté separada de esta)
rosuav
1
@rosuav ¿Hay alguna manera de que podamos ejecutarlo directamente como si systemctl restart myapp.serviceno lo usáramos sudo?
kabirbaidhya
En realidad no, pero podría poner el comando en un script (completo con el prefijo sudo) y luego poner ese script en $ PATH. O conviértalo en un alias de shell.
rosuav
3
Atención: en otras distribuciones systemctl está en /usr/bin:-(.
guettli