Se este fosse um binário normal, você poderia configurar executando
# chmod u+s /path/to/binary
Infelizmente, os scripts não podem ser configurados. (Bem, você pode, mas é ignorado). A razão para isso é que a primeira linha do script informa ao SO em que intérprete executar o script. Por exemplo, se você tivesse um script com:
#!/bin/bash
Você acabaria correndo
/bin/bash /path/to/script
Obviamente, você precisaria que o intérprete fosse setuid, o que significaria que todos os scripts seriam setuid. Isso seria ruim.
Você pode fazer isso com o sudo colocando o seguinte no 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, que exige a criação de um pequeno binário configurado que executa seu script, mas cada binário adicional adicionado adiciona outro possível problema de segurança.
ALL
por um nome de usuário para permitir que apenas um sudoer possa ser executado sem inserir uma senha.Eu precisava inserir essa linha NO FINAL do / etc / sudoers:
ALL ALL = NOPASSWD: <filename>
Aparentemente, uma%admin ALL=(ALL) ALL
substituição posterior exigia uma senha para usuários administrativos.Não há nenhum problema de segurança que permita que um script seja executado como root, desde que ele execute uma ação permitida, bem determinada, inofensiva e, se os valores de qualquer parâmetro não puderem causar o mau comportamento do script.
Mas há uma pegadinha ...
Sempre use caminhos completos nos nomes de comando e arquivo. Se você escrever algo como
echo Hello world!
emmyrootscript
, alguém pode escrever um~/bin/echo script
emyrootscript
seria executado como root o que está nele./bin/echo "Hoping this will keep you safe"
:-)fonte
Por padrão, os membros do
wheel
grupo têm permissão parasudo
qualquer comando comoroot
. Provavelmente é assim que você está usandosudo
até o momento.Para permitir outro usuário, você precisará criar uma
sudoers
regra. Por exemplo:Permitirá que o usuário
mickey.mouse
para executar o comando/usr/local/bin/test.sh
comoroot
sem exigir um prompt de senha adicional.Você deve ler este documento para obter mais informações.
fonte
Usechmod +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 (então faça o root para fazer root para fazê-lo funcionar dessa maneira).No entanto, isso pode ser MUITO perigoso com algo como scripts bash, porque um usuário encontra uma maneira de alterá-lo, podendo facilmente obter um shell raiz. Certifique-se de que não possa ser gravado por ninguém, exceto root.O Linux não permite que você defina scripts, para fazer isso, você precisará compilá-lo como um programa. Em vez disso, você pode usar o arquivo sudoers (/ etc / sudoers) e adicionar uma linha como esta.
<username> ALL = NOPASSWD: /path/to/script
fonte
Outra alternativa: você pode criar um pequeno wrapper C setuid em torno desse script que
Como o seu próprio subconjunto das múltiplas capacidades de
sudo
.fonte