Como fazer uma verificação do sudo que dura o tempo suficiente para que (unprivileged) faça o acabamento?

5

Costumo usar a seguinte construção para criar e instalar um tarball:

sudo -v && make && sudo make install

que me permitirá inserir minha senha imediatamente e que tudo será feito sem supervisão. Isso funciona bem, exceto no caso raro de a construção demorar mais do que o tempo limite sudo , o que pode acontecer na minha máquina lenta com grandes projetos (mesmo quando usar make -j4 ).

Mas quando a compilação leva muito tempo, é exatamente quando fazer coisas sem supervisão tem uma grande vantagem. Alguém pode pensar em uma construção shell que me permita inserir minha senha imediatamente e que tenha make executando sob permissões normais e make install sob permissões elevadas?

Por motivos de segurança, não quero configurar meu usuário para usar sudo sem senha.

Uma opção viável é definir o tempo limite para muito tempo, mas espero algo mais elegante.

    
por Timo Kluck 15.10.2012 / 14:27

3 respostas

3

Quando você ganhar privilégios de root, poderá usar sudo novamente para executar um comando como usuário não-root:

sudo bash -c "sudo -u $USER non-root-user-command ; root-command"

Observe que você precisa usar aspas duplas, e não aspas simples. Se você usar aspas simples, $USER será substituído por root , o que não atingirá o resultado desejado. Espero que estes comandos ilustrem o meu ponto:

$ sudo bash -c "echo $USER"
david
$ sudo bash -c 'echo $USER'
root

Então, vamos pegar o exemplo mencionado na pergunta:

 make && sudo make install

Isso se tornaria:

 sudo bash -c "sudo -u $USER make && make install"
    
por Flimm 02.01.2013 / 16:22
2

Acho que essa é a melhor maneira de fazer isso:

make | sudo bash -c 'cat - && make install'

Isso iniciará make e sudo simultaneamente, com sudo solicitando sua senha. Nesse meio tempo, make envia toda a sua saída para o pipe, que é lido pelo comando cat . Depois disso, make install é executado. Ele é chamado a partir do processo bash , que ainda tem permissões elevadas, portanto, não há problemas de tempo limite.

    
por Timo Kluck 15.10.2012 / 20:44
0

O método mais simples que não requer que você altere seus arquivos de sistema:

echo {password} | sudo -S -v && make && echo {password} | sudo -S make install

Isso permitirá que o script seja executado sem solicitar uma senha.

No entanto, esse método representa um risco à segurança, já que você está armazenando sua senha em texto simples.

Alguns outros métodos podem ser encontrados aqui mas a maioria é sobre a edição de arquivos do sistema.

edite: Se você adicionar um espaço na frente do primeiro eco, o comando não será mostrado no histórico bash.

    
por Rinzwind 15.10.2012 / 16:51

Tags