ubuntu: permite que um usuário execute um script com permissões de root

9

Eu tenho o Ubuntu 8.04 e eu quero escrever um script bash que seja executado como root , que todo usuário pode executar.

Eu mesmo posso fazer sudo.

Como faço isso?

CLARIFICATION : Eu não quero fazer isso com o sudo, porque os usuários terão que digitar sua senha. Eu só quero que eles executem o script como root, talvez algo definido, não sei.

    
por flybywire 18.10.2009 / 10:57

5 respostas

22

Se este fosse um binário normal, você poderia setuid executando

# chmod u+s /path/to/binary

Infelizmente, os scripts não podem ser setuid. (Bem, você pode, mas é ignorado). A razão para isso é que a primeira linha do script informa ao SO qual interpretador executar o script. Por exemplo, se você tivesse um script com:

#!/bin/bash

Você realmente acabaria correndo

/bin/bash /path/to/script

Obviamente, você precisaria que o interpretador fosse setuid, o que significaria que todos os scripts seriam setuid. Isso seria ruim.

Você pode fazer isso com o sudo colocando o seguinte em seu arquivo / etc / sudoers executando o visudo.

ALL ALL=NOPASSWD: /path/to/script

E agora qualquer usuário pode executar

$ sudo /path/to/script

Isso permite que eles executem o script sem digitar sua senha.

Existe uma alternativa que não requer sudo no comando, o que requer a criação de um pequeno binário definido que executa seu script, mas cada binário adicional do setuid adiciona outro problema de segurança em potencial.

    
por 18.10.2009 / 11:54
3

Eu precisava inserir essa linha NO FINAL do / etc / sudoers: ALL ALL = NOPASSWD: <filename> Aparentemente, uma substituição posterior de %admin ALL=(ALL) ALL exigia uma senha para usuários admin.

Não há nenhum problema de segurança que permita que um script seja executado como raiz, contanto que o script faça uma ação bem determinada, inofensiva e permitida e, se os valores de qualquer parâmetro não puderem fazer com que o script se comporte mal.

Mas há uma pegadinha ...

Sempre use caminhos completos em nomes de comandos e arquivos. Se você escrever algo como echo Hello world! in myrootscript , alguém pode escrever um ~/bin/echo script e myrootscript executaria como raiz o que estiver nele.

/bin/echo "Hoping this will keep you safe" : -)

    
por 19.04.2011 / 11:37
2

Por padrão, os membros do grupo wheel têm permissão para sudo de qualquer comando como root . Provavelmente é assim que você está usando sudo até a data.

Para permitir outro usuário, você precisará criar uma regra sudoers . Por exemplo:

mickey.mouse ALL = (root) NOPASSWD: /usr/local/bin/test.sh

Permitirá que o usuário mickey.mouse execute o comando /usr/local/bin/test.sh as root sem precisar de um prompt de senha adicional.

Você deve ler este documento para obter mais informações.

    
por 18.10.2009 / 11:53
0

Use chmod +s <filename> para ver o bit suid. Isso significa que, quando o arquivo é executado, ele é executado com as permissões do proprietário do arquivo (portanto, use-o para fazer o root para executá-lo).

No entanto, isso pode ser MUITO perigoso com algo parecido com um script bash, porque um usuário encontra uma maneira de alterá-lo, eles podem facilmente ganhar um shell de root. Certifique-se de que não pode ser gravado por ninguém, exceto root.

O Linux não permite a você setuid em scripts, para fazer isso você teria que compilá-lo como um programa. Em vez disso, você pode usar o arquivo sudoers (/ etc / sudoers) e adicionar uma linha como essa.

<username> ALL = NOPASSWD: /path/to/script

    
por 18.10.2009 / 11:51
0

Outra alternativa: você pode fazer um pequeno wrapper C em torno desse script que

  • verifica se há alguma limitação que você possa deseja impor (lista de usuários, hora, carga do sistema, ...)
  • execução de logs / auditorias, se desejado
  • executa o script

Mais ou menos como o seu próprio subconjunto de várias capabilidades de sudo .

    
por 19.04.2011 / 14:07