Sudoers NOPASSWD para executável único, mas permitindo que outros

5

Sistema operacional: Arch Linux

Versão do Linux: 4.16.11

Versão do sudo: 1.8.23

O que eu preciso :

  • conseguir executar any executable com sudo com uma solicitação de senha
  • poderá executar um executável, /home/username/script.sh , sem um prompt de senha.

Quando eu configuro assim

username ALL=(ALL) NOPASSWD: /home/username/script.sh

Eu tenho o efeito desejado no script.sh , mas não consigo executar nenhum outro executable com sudo .

Exemplo

$ sudo ./script.sh # runs fine!

Tente algo diferente

$ sudo nano /etc/sudoers
[sudo] password for username: 
Sorry, user username is not allowed to execute '/usr/bin/nano 
/etc/sudoers' as root on hostname.

Parece que isso é um resultado da substituição de ALL por NOPASSWD e parece que preciso dos dois. Se o arquivo sudoers tiver ALL para o usuário, posso executar o que quiser com o prompt de senha

username ALL=(ALL) ALL

Eu tentei combinar ALL e NOPASSWD, mas não tive resultados

username ALL=(ALL) ALL, NOPASSWD: /home/username/script.sh

Assim, ele pede uma senha para script.sh .

Posso ter os dois?

    
por Yaroslav Mytkalyk 04.06.2018 / 11:39

2 respostas

14

man 5 sudoers diz (seção "Sudoers File Format"):

When multiple entries match for a user, they are applied in order. Where there are multiple matches, the last match is used (which is not necessarily the most specific match).

Então você deve ter essas linhas exatamente nesta ordem:

username ALL=(ALL) ALL
username ALL=(ALL) NOPASSWD: /home/username/script.sh

e qualquer linha que também corresponda (por exemplo, %sudo ALL=(ALL:ALL) ALL ) deve ser anterior à linha NOPASSWD .

    
por 04.06.2018 / 11:50
3

Você encontrará uma linha como essa em /etc/sudoers :

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

Isso permitirá que qualquer usuário que esteja no grupo " roda " use sudo com prova de identidade adequada (por exemplo, sua senha). O grupo indicado também pode ser " sudo ", " admin " ou outros ... (por exemplo: a linha começa com %sudo )

Se isso estiver presente no arquivo, execute id para ver em quais grupos você está:

$ id
uid=1000(attie) gid=1000(attie) groups=1000(attie),27(sudo),117(docker)

Se o seu usuário não estiver no grupo apropriado, você deverá adicionar seu usuário a esse grupo.

Uma alternativa seria listar ambas as suas regras uma a uma, com a última regra de correspondência entrando em vigor (ou seja, a ordem é importante):

username ALL=(ALL) ALL
username ALL=(ALL) NOPASSWD: /home/username/script.sh

Veja a página do ArchWiki no sudo: link

    
por 04.06.2018 / 11:45