Permissão `sudo echo“ bla ”>> / etc / sysctl.conf` negada

16

Disclaimer: Eu sou muito novato em coisas sysadmin.

Estou tentando configurar o encaminhamento de porta em uma instância do AWS EC2, isso deve ser feito na linha de comando, porque não quero editar nada, ele deve ser automático (faz parte de um processo de compilação )

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

Permissão negada

O estranho é que tenho usado (com sucesso) sudopraticamente todos os comandos que exigiam suprivilégios. Se eu fizer isso sudo suantes do comando (testando manualmente em uma sshsessão), ele funcionará.

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

bevacqua
fonte
Mesmo problema aqui: stackoverflow.com/questions/82256/... - Além disso, se você quiser ser realmente arriscado:sudo -i
MirroredFate

Respostas:

46

Você não pode usar sudopara afetar o redirecionamento de saída; >e >>(e, para completar <) , são efetuados com o privilégio do usuário que chama, porque o redirecionamento é feito pelo shell de chamada, não pelo subprocesso chamado.

Ou

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"
MadHatter apoia Monica
fonte
15

Você pode achar mais simples usar este comando:

echo net.ipv4.ip_forward = 1 | sudo tee -a /etc/sysctl.conf
Random832
fonte
12

sudoexecuta apenas seu comando, não o redirecionamento, como root. Você precisará agrupar tudo em um comando no qual a coisa toda é executada como raiz:

sudo sh -c 'echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf'
Cakemox
fonte
3

O comando sudo echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.confé interpretado como se você (sem raiz) grave o resultado sudo echo "net.ipv4.ip_forward = 1"em /etc/sysctl.conf.

Corre

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.confcomo root.

jdh8
fonte
1
sudo sed -i "$ a <text>" <file>
  • -i : editar arquivo no lugar.
  • $ a: acrescenta texto à última linha

O uso do sedcomando evita o aborrecimento de redirecionamentos e pipelines.

No seu caso: sudo sed -i "$ a net.ipv4.ip_forward = 1" /etc/sysctl.conf

forzagreen
fonte