Como evitar o pedido de senha para sudo para scripts crontab?

1

Preciso que um novo usuário possa executar sudo sem qualquer solicitação de senha, porque esse usuário tem em crontab a .sh que usa sudo para alguns comandos.

Eu criei um novo usuário no meu servidor ubuntu 16.04 x64

adduser my-user sudo
gpasswd -a my-user sudo

Em seguida, usando visuo i adicionei esta linha, com base em esta questão

my-user ALL=(ALL) NOPASSWD : ALL

Em seguida, reinicie

Após a reinicialização eu loguei usando my-user e tentei fazer o sudo clear, mas ele me pergunta a senha do sudo.

NOTA : Eu adicionei o crontab usando crontab -e my-user , então suponho que meu script seja executado como my-user . Na verdade, o script crontabbed falha ao me informar no log sobre uma solicitação de senha sudo . Eu realmente preciso executar o script dessa forma para poder criar um arquivo com my-suer como proprietário.

Por favor, diga-me se algumas etapas / linhas não foram necessárias e como tornar possível my-user executar sudo sem solicitação de senha.

Obrigado

PS: Eu vi essa questão , mas eu não sou capaz de fazê-lo funcionar, então eu preciso de uma explicação mais precisa, porque a minha situação é diferente: eu estou executando um script crontab e eu preciso fazer não pedir senha sudo

    
por realtebo 09.07.2016 / 10:52

1 resposta

4

Às vezes, a execução de um processo do crontab do root pode causar problemas com a propriedade inicial do arquivo e rwx mode; esses podem não ser corretamente preservados.

Em qualquer caso:

1) para criar um novo usuário, simplifique:

 $ sudo deluser my-user  # if "my-user" is a regular user
 $ adduser my-user
 $ sudo gpasswd -a my-user sudo

2) para incluir uma nova entrada com uma tag NOPASSWD em sudoers ou em um arquivo (por exemplo, /etc/sudoers.d/60_my-user_rules ), faça os dois pontos ficarem na tag, ou seja, NOPASSWD:
Eu não vi isso antes com espaço intercalado e a regra do ano se torna:

 my-user my-host = NOPASSWD: /full/path/to/cmd [parameter1 [| parameter2 [| ...]]]

A adição de (ALL) antes do NOPASSWD: é opcional, já que a regra é padronizada como (ALL:ALL) . No entanto, você pode querer não apenas executar seu cmd / script com privilégio de root, mas também executá-lo como um determinado usuário ( spec-user ) ou como um membro de um determinado grupo ( spec-group ) ou ambos. Nesse caso, a regra se torna:

 my-user my-host = ([spec-user][:spec-group]) NOPASSWD: /full/path/to/cmd [parameter1 [| parameter2 [| ...]]]

Isso na verdade restringirá a eliminação de sudo sem senha a um usuário, um host e um comando. Você pode endurecer essa regra especificando o (s) parâmetro (s) opcional (is) para esse comando. Nesse caso, a regra será aplicada somente para aquele (s) parâmetro (s) exato (s).
Para scripts, você pode reforçar ainda mais essa regra, garantindo que a regra se aplique somente se o script não foi modificado de alguma forma . Esta é uma maneira de evitar o seqüestro de script. Isso é feito por meio do aliasing de cmd e da especificação de somas de SHA em /etc/sudoers.d/60_my-user_rules .

HTH. Por favor, informe se você tiver problemas com essa resposta.

    
por Cbhihe 11.07.2016 / 10:25