Como rodar um arquivo com sudo sem senha? [duplicado]

2

Eu fiz um script que pré-forma várias tarefas do sistema, que eu corro regularmente, mas eu tenho que usar o sudo para executar o script, apesar do fato de eu possuí-lo porque ele executa comandos privilegiados de root. Como posso adicionar make sudo, deixe-me executar este arquivo sem ter que digitar minha senha toda vez que eu executar?

Eu sei que há perguntas sobre a execução de comandos sem uma senha, mas não consegui encontrar uma na execução de um arquivo sem uma senha.

Estou ciente dos riscos de segurança, mas estou em casa em um computador em que confio.

Adicionei john ALL = NOPASSWD: /home/john/.script/hibernate.sh ao meu /etc/sudoers , mas ao executar o comando sudo sh /home/john/.script/hibernate.sh , ele ainda solicita minha senha ...

    
por codesmith 15.10.2012 / 23:35

4 respostas

7

Use visudo para um ambiente de edição seguro para editar o arquivo sudoers. Esse script é um wrapper em torno de vi que também faz a verificação de sintaxe quando você salva o arquivo e não permite a substituição de um arquivo sudoers válido por um inválido.

Adicione uma linha como esta:

username ALL= NOPASSWD: /path/to/your/script

O "ALL=" tem alguma elaboração, especifica que a permissão é concedida quando o usuário em questão está logado de qualquer local, localmente (console ou terminal) ou remotamente (ssh, etc).

    
por Sparr 16.10.2012 / 00:00
3

Por uma questão de integralidade, você pode conseguir um efeito similar definindo setuid bit nas permissões do arquivo.

Uma parte um pouco complicada é que por razões de segurança setuid bit em scripts é ignorado pelo kernel, então você precisará compilar um pequeno programa wrapper em C e usá-lo para invocar seu script. Salve isso como runscript.c :

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

int main()
{
   setuid( 0 );
   system( "/path/to/script.sh" );

   return 0;
}

depois compile com

gcc runscript.c -o runscript

e defina setuid bit no executável:

sudo chown root:root runscript
sudo chmod 4755 runscript

Também é importante certificar-se de que seu script é apenas gravável pelo usuário root, já que todos que podem modificar o script poderão executar programas arbitrários:

sudo chown root:root /path/to/script.sh
sudo chmod 0711 /path/to/script.sh

Aqui está um artigo que eu tenho o código do programa wrapper de: setuid em scripts de shell .

Em termos de segurança, ambas as abordagens - a que tem sudo e a que tem setuid - são muito ruins, mas provavelmente ficarão boas em uma máquina doméstica. A diferença é que todos os usuários do sistema poderão executar um comando setuid , mesmo sem estar no arquivo sudoers . Além disso, obviamente, você não precisará prefixar o comando com sudo .

    
por Sergey 16.10.2012 / 00:49
0

Você precisa da tag "NOPASSWD".

Use visudo e defina algo assim no final do arquivo:

nome de usuário ALL = NOPASSWD: / bin / echo

Substitua o nome de usuário por seu nome de usuário e / bin / echo pelo comando que você deseja executar.

    
por ed. 16.10.2012 / 00:02
0

Você precisará adicionar o caminho completo do programa que está sendo executado ao arquivo sudoers, não o script. Eu estou assumindo que é pm-hibernate, então:

john ALL=NOPASSWD: /usr/sbin/pm-hibernate
    
por elkoraco 16.10.2012 / 00:59