Em qual distribuição do Linux você está? Ou Unix, mesmo?
slhck
@slhck Linux, Ubuntu 12
HappyDeveloper
3
setuidnão funcionará em scripts - está desativado por razões de segurança na maioria das distribuições * nix atualmente. Você pode configurá-lo, mas será ignorado. Talvez você possa explicar mais sobre o seu problema real para que possamos ajudá-lo a resolver isso. Que script é esse? Por que você precisa que ele seja executado como root? Está usando sudouma alternativa?
slhck
Você já tentou sudo -s?
Nam Phung
Respostas:
29
Tenha muito cuidado: scripts combinados com setuid são perigosos!
Como root, impeça o acesso de gravação (e talvez outro) ao seu script:
raiz do chown /absolute/path/to/your/script.sh
chmod 700 /absolute/path/to/your/script.sh
Verifique se ninguém, exceto o root, pode substituir o script , por exemplo, modificando os direitos de acesso da pasta pai:
raiz do chown / absoluta / caminho / para / seu /
chmod 755 / absoluto / caminho / para / seu /
Modifique os direitos de acesso do sudo /etc/sudoerscom visudo:
ALL ALL = (root) NOPASSWD: /absolute/path/to/your/script.sh
Mais detalhes sobre as configurações (por exemplo, restringindo o acesso a usuários ou grupos específicos) podem ser encontrados na página de manual do sudoers.
Depois, todos os usuários podem executar o script como root sem senha:
sudo /absolute/path/to/your/script.sh
Isso é semelhante ao uso da solução wrapper / setuid acima.
Os perigos específicos não são muito óbvios, mas giram fortemente em torno do ambiente. Diferentemente da maioria dos programas, o comportamento de um script de shell pode ser alterado significativamente por dezenas de variáveis de ambiente, o suficiente para que, sem extensas salvaguardas, esse script possa ser facilmente levado a executar código arbitrário.
22712 Stephanie
1
Você deve adicionar uma chamada a clearenv () antes da chamada do sistema nesse wrapper, expulsando completamente o ambiente, para que não haja configurações incorretas para manipular o script. kernel.org/doc/man-pages/online/pages/man3/clearenv.3.html
Stephanie
@ Stephanie Devo estar fazendo algo errado, porque tudo isso parece muito louco para uma tarefa comum. Isto é o que estou tentando fazer: serverfault.com/questions/401405/…
HappyDeveloper
@HappyDeveloper Não é muito louco por um script setuid, já que um mal protegido é um caminho de raiz para qualquer um que consiga executá-lo.
22712 Stephanie
4
sudopode ser usado para dar a todos os usuários acesso a um programa (ou script) específico. Nesse sentido, ele atua como um invólucro setuid chique. Parece que normalmente seria uma escolha melhor do que escrever seu próprio invólucro setuid.
Jjlin 22/06
4
A maneira mais fácil e segura é usar os bits SETUID nas permissões de arquivo. dessa forma, as permissões de comando serão elevadas para permissões de proprietário de arquivo.
para impedir que o script da edição não defina a gravação para todos os bits.
setuid
não funcionará em scripts - está desativado por razões de segurança na maioria das distribuições * nix atualmente. Você pode configurá-lo, mas será ignorado. Talvez você possa explicar mais sobre o seu problema real para que possamos ajudá-lo a resolver isso. Que script é esse? Por que você precisa que ele seja executado como root? Está usandosudo
uma alternativa?sudo -s
?Respostas:
Tenha muito cuidado: scripts combinados com setuid são perigosos!
Primeiro, dê uma olhada nesta pergunta / respostas , especialmente nesta resposta e aviso de segurança .
Se você ainda deseja executar seu script com
setuid
set, pode escrever um programa C curto como wrapper e definir osetuid
bit no binário compilado.Exemplo de wrapper:
Outra solução usando
sudo
(mencionada aqui ):Como root, impeça o acesso de gravação (e talvez outro) ao seu script:
Verifique se ninguém, exceto o root, pode substituir o script , por exemplo, modificando os direitos de acesso da pasta pai:
Modifique os direitos de acesso do sudo
/etc/sudoers
comvisudo
:Mais detalhes sobre as configurações (por exemplo, restringindo o acesso a usuários ou grupos específicos) podem ser encontrados na página de manual do sudoers.
Depois, todos os usuários podem executar o script como root sem senha:
Isso é semelhante ao uso da solução wrapper / setuid acima.
fonte
sudo
pode ser usado para dar a todos os usuários acesso a um programa (ou script) específico. Nesse sentido, ele atua como um invólucro setuid chique. Parece que normalmente seria uma escolha melhor do que escrever seu próprio invólucro setuid.A maneira mais fácil e segura é usar os bits SETUID nas permissões de arquivo. dessa forma, as permissões de comando serão elevadas para permissões de proprietário de arquivo.
para impedir que o script da edição não defina a gravação para todos os bits.
fonte
Não sei se isso pode ser útil, mas, para tornar o script executado apenas como root, você pode usar este shebang na primeira linha do script:
fonte