bloquear sudo com script

2

Eu não gosto de digitar a senha para sudo , então eu a desativei com

%sudo ALL=(ALL) NOPASSWD: ALL

Agora, tenho um efeito colateral ruim de que qualquer script de shell que eu execute pode executar silenciosamente sudo em meu nome.

O caso de uso mais comum seria a intenção de instalar material experimental em $ {HOME} / local e esquecer de configurar o PREFIX .

Pergunta - existe uma maneira inovadora com o sudo para bloquear a invocação não interativa (de um script)? No Arch Linux , para ser específico.

    
por bobah 10.05.2018 / 11:35

2 respostas

1

Além da resposta de Gilles ao aspecto Can I block non-interactive sudo invocation? de sua pergunta, eu sugeriria um trabalho -para este elemento específico da sua situação:

I don't like typing the password for sudo so I disabled it

e

Now I have a bad side effect that any shell script I run can silently execute sudo on my behalf.

Se a sua situação é que você normalmente sudo um monte de vários comandos, mas você se encontra executando scripts que executam silenciosamente o sudo onde você não é solicitado a digitar uma senha para perceber que coisas do nível de raiz estão acontecendo, você poderia:

  1. Retire a opção NOPASSWD
  2. Estenda o tempo limite do registro de data e hora para além do estoque 5 minutos para ter um período de tempo maior
  3. Mate o timestamp do sudo antes de executar um script não confiável

Você já sabe como editar sudoers para a opção NOPASSWD .

Para estender o timestamp_timeout no arquivo sudoers, defina-o como um valor muito alto ou um valor negativo. Fragmentos relevantes da página de manual para esse parâmetro:

timestamp_timeout

Number of minutes that can elapse before sudo will ask for a passwd again.

The default is 5.

If set to a value less than 0 the user's time stamp will not expire until the system is rebooted.

Quando você estiver prestes a executar um script do qual não tem certeza, basta executar sudo -k para "matar" o timestamp:

-k

When used without a command, invalidates the user's cached credentials. In other words, the next time sudo is run a password will be required.

Se você executar um script e encontrar o prompt de sudo para sua senha, saberá que sudo foi invocado e poderá interromper o script se desejar.

Como um aparte aqui, recomendo definir o parâmetro passprompt para incluir o texto sudo , como:

Defaults passprompt="[sudo] password for %u:"

... para que seja óbvio se / quando o sudo estiver solicitando sua senha (em comparação com qualquer outra ferramenta).

    
por 11.05.2018 / 17:27
7

Você não pode fazer o que quiser porque “sudo com script” e “sudo interativo” não são contraditórios. Um script pode executar o sudo em um terminal. Alguns exemplos de ferramentas que podem executar um comando em um terminal de maneira totalmente automatizada são script , expect , screen , tmux , etc.

Mesmo que o sudo possa de alguma forma detectar que você o executou "diretamente" (o que não é o caso, pois você está interagindo com periféricos como teclado e mouse, não com processos), ele não protege contra scripts maliciosos . Os scripts não autorizados podem plantar comandos falsos em sua conta, por exemplo, de modo que, na próxima vez que você executar sudo , ele invoque um wrapper que discretamente embaralhe em seu acesso.

E, de qualquer forma, a ameaça que você está protegendo não é particularmente relevante.

Sevocênãoconfiaquealgumsoftwarenãofaçacoisasproblemáticas,comoroubarsuacontademídiasocial,nãooexecutenasuaconta.Rodá-lo,nomínimo,emumacontadiferente(quenãoéumsudoer,éclaro), sem acesso à GUI . Para melhor isolamento, execute-o em uma máquina virtual. (Isso ainda não é perfeito, é seguro contra malware comum, não necessariamente se um governo tiver como alvo você.)

    
por 10.05.2018 / 11:57