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?


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"

15

Você pode achar mais simples usar este comando:

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

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'

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.


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.