Execute com segurança partes de script personalizadas como sudo

1

Em /usr/local/bin , tenho o seguinte script chamado sdown

/usr/local/bin$ cat sdown 
#!/bin/bash

if [ $# -lt 1 ];
then
  echo "no time set"
else
  sudo shutdown -h $1
fi

As permissões são 788: -rwxr-xr-- user user sdown

O ponto é se eu executar o script que está solicitando a senha do sudo:

/usr/local/bin$ sdown 13:37
[sudo] password for user: 

Apenas para tornar minha vida ainda melhor, eu gostaria de evitar digitar minha senha para desligar o computador. Eu acho que existem possibilidades que eu poderia procurar:

  • Permitindo a execução do comando shutdown sem solicitar direitos de sudo. (sudoers file ou so ...?)
  • Encontre uma permissão para conceder permissão ao sudo para o script, para que eu possa jogar o sudo lá.

Provavelmente, a primeira maneira é mais fácil e na minha máquina particular eu posso fazer isso. No entanto, eu me pergunto e se eu entrar em outra situação. Embora seja teórico, gostaria de aprender as melhores práticas.

Gostaria de saber se é melhor conceder permissão para um script específico que escrevo e, portanto, sei o que ele faz e o que não, em vez de remover a proteção de senha sudo para um comando completo (neste caso shutdown . Isso é possível?

Além disso, neste cenário, acho que devo considerar a possibilidade de injeção de código manipulando o script. Acho que, portanto, devo alterar o proprietário e o grupo para root e permitir a execução, mas não conceder acesso de leitura e gravação a outros usuários.
(Ou apenas para o grupo em caso de soluções mais específicas.) No entanto, o que acontece com a possibilidade de alguém trocar o arquivo completo com algum dele próprio e, portanto, adquirir direitos de sudo?

    
por yoshi 28.04.2012 / 02:36

1 resposta

1

Primeiro: com certeza você está desperdiçando seu esforço.
Leia a página de manual do shutdown no seu sistema : O argumento do tempo é obrigatório em todas as implementações que eu já vi. / p>

Se você tentar executar shutdown -h sem argumento de tempo, ele gritará com você:

[mgraziano@monitor ~]$ sudo shutdown -h
Password: 
usage: shutdown [-] [-h | -p | -r | -k] [-o [-n]] time [warning-message ...]

Para responder à sua pergunta:

Opção 1: Permitindo a execução do comando de desligamento sem solicitar direitos de sudo
Permitir explicitamente o desligamento com a opção NOPASSWD (leia man sudoers para informações) ou adicione seu usuário ao grupo com permissão para executar o desligamento (geralmente operator ).

Opção 2: Encontre uma permissão para conceder permissão sudo ao script para que eu possa soltar o sudo lá.
Você não pode fazer isso do jeito que pensa porque sudo não funciona dessa maneira - Permissões são concedidas aos usuários.
O melhor que você pode fazer é permitir que o script seja executado usando sudo , mas isso não compra nada além da Opção 1 (e, como você mencionou, abre algumas possíveis falhas de segurança em seu script, já que você permitindo que seja executado como root).

    
por 28.04.2012 / 04:05