'sudo echo' bla '/etc/sysctl.conf' permissão negada

14

Disclaimer: Eu sou muito novato em coisas sysadmin.

Estou tentando configurar o encaminhamento de porta em uma instância do AWS EC2, isso tem que ser feito na linha de comando porque não quero entrar e editar nada, tem que ser automático (é parte do um processo de construção).

sudo echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

Permission denied

O estranho é que eu tenho (com sucesso) usando sudo para praticamente todos os comandos que exigiram su privileges. Se eu faço sudo su antes do comando (experimentando manualmente em uma sessão ssh ), então funciona.

Razões por trás disso? Possíveis soluções que não envolvem sudo su ou edições manuais?

    
por bevacqua 20.09.2013 / 16:05

4 respostas

42

Você não pode usar sudo para afetar o redirecionamento de saída; > e >> (e, para completude, < ) são afetados com o privilégio do usuário chamador, porque o redirecionamento é feito pelo shell de chamada, não pelo sub-processo chamado.

Ou faça

cp /etc/sysctl.conf /tmp/
echo "net.ipv4.ip_forward = 1" >> /tmp/sysctl.conf
sudo cp /tmp/sysctl.conf /etc/

ou

sudo /bin/su -c "echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf"
    
por 20.09.2013 / 16:09
13

Você pode achar mais simples usar este comando:

echo net.ipv4.ip_forward = 1 | sudo tee -a /etc/sysctl.conf
    
por 20.09.2013 / 22:45
12

sudo executa apenas o seu comando, não o redirecionado, como root. Você precisará agrupar tudo em um comando no qual a coisa toda será executada como root:

sudo sh -c 'echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf'
    
por 20.09.2013 / 16:09
3

O comando sudo echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf é interpretado como você (não raiz) escreve o resultado de sudo echo "net.ipv4.ip_forward = 1" em /etc/sysctl.conf.

Executar

sudo -s 'echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf'

ou

sudo su -c 'echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf'

para executar echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf como root.

    
por 20.09.2013 / 18:56