permitindo ao usuário executar serviços systemctl / systemd sem senha

14

Eu quero que o usuário padrão, ubuntu , consiga executar um serviço específico sem que seja solicitada uma senha.

Especificamente systemctl restart unicorn_my_app.service .

Siga as instruções aqui para adicionar o usuário ubuntu a um grupo recém-criado, LimitedAdmins , que é confirmado com:

$ getent group LimitedAdmins
LimitedAdmins:x:1001:ubuntu

Criado um novo arquivo, limitedadmins (usando sudo vim ) no diretório /etc/sudoers.d contendo o seguinte texto:

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

Eu também tentei:

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

(e /bin/systemd )

O conteúdo de /etc/sudoers/ é o padrão confirmado com sudo visudo (ou 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

(O sinal de hash em #includedir não é um comentário, mas faz parte da sintaxe da diretiva #include ).

No entanto, ainda há um prompt de senha após a execução de systemctl restart unicorn_my_app.service

O serviço está no diretório init.d :

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

Tentei chmodding 755 no aplicativo, mas não pense que isso deve fazer diferença, pois ubuntu é o proprietário mesmo assim.

Até tentou reiniciar o sistema sem diferença. Estou faltando um passo, como reiniciar / recarregar)? Configurando algo errado?

Também devo mencionar que usei vim para criar o novo arquivo em /etc/sudoers.d , pois parece que o comando visudo é somente para editar /etc/sudoers .

    
por MikeiLL 01.11.2015 / 21:52

2 respostas

22

O arquivo sudoers é bastante flexível e, com isso, vem a complexidade. O que você quer aqui é permitir o acesso ao comando /bin/systemctl , com parâmetros específicos:

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

Basicamente você apenas pega a linha de comando exata que você digitaria, codifica o nome do caminho por segurança, e coloca isso no seu arquivo sudoers (ou /etc/sudoers.d ). E note que 'start' e 'restart' são completamente diferentes no que diz respeito ao sudo; permitir que um não conceda acesso ao outro.

    
por rosuav 01.11.2015 / 22:29
5

Acho que se você implementar a @ resposta do rosuav e, em seguida, tentar sudo /bin/systemctl restart unicorn_my_app.service , você descobrirá que não é solicitado um senha e, de fato, reiniciar seu serviço. Espero que isso ajude.

    
por PsiOps 19.05.2016 / 10:29

Tags