Como eu uso o redirecionamento com o sudo [duplicate]

8

Sim, eu poderia (e provavelmente vou) escalar para o root, mas gostaria de saber por que isso não funciona?

sudo cat .mplayer/config >> /home/griff/.mplayer/config
zsh: permission denied: /home/griff/.mplayer/config

sudo está configurado para poder executar qualquer comando, não coloquei restrições nele.

    
por xenoterracide 14.12.2010 / 13:57

3 respostas

14

Como foi respondido por msw antes , isso acontece porque >> acontece antes da execução do comando real e não é executado com os privilégios elevados de sudo .

Uma maneira alternativa de fazer isso é envolver o comando inteiro em outro shell de comando bash:

sudo bash -c "cat .mplayer/config >> /home/griff/.mplayer/config"

Isso iniciará um novo shell bash com sudo privileges e o fechará após a execução do comando.

    
por 14.12.2010 / 15:57
9

Isso falha porque o redirecionamento >> é sempre feito antes da execução do comando, independentemente do comando.

Neste caso, o shell está sendo executado como você (não raiz) e tenta anexar ao arquivo .../config usando suas permissões atuais, e não do root, e falha antes mesmo de o sudo ser executado.

Uma metáfora comum para fazer o que seu comando pretende é:

sudo tee --append /home/griff/.mplayer/config < .mplayer/config

(supondo que você tenha permissão de leitura para .mplayer/config ). Como /home/griff/... é aberto por tee no contexto raiz do sudo, ele tem permissões de root para gravar esse arquivo.

Não sou louca por essa abordagem, pois copia o conteúdo de .mplayer/config para a saída padrão - junto com o acréscimo ao arquivo do griff - mas funciona.

    
por 14.12.2010 / 14:50
0

Por

sudo is capable of running any command

você quer dizer que conceitualmente o sudo pode ser configurado para executar qualquer comando ou que você configurou o sudo no sistema em questão como, aproximadamente, <user> <host(s)>=<opt(s)> ALL ?

Você já tentou sudo -u 0 cat ... ? Isso forçaria o sudo a executar o comando como root, desde que seu ID de usuário tenha permissão para fazê-lo.

O que sudo -l imprime?

    
por 14.12.2010 / 14:31