permiso 'sudo echo “bla” >> / etc / sysctl.conf` denegado

16

Descargo de responsabilidad: soy bastante novato en sysadmin.

Estoy tratando de configurar el reenvío de puertos en una instancia de AWS EC2, esto debe hacerse en la línea de comandos porque no quiero entrar y editar nada, tiene que ser automático (es parte de un proceso de compilación )

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

Permiso denegado

Lo extraño es que he estado usando (con éxito) sudocasi todos los comandos que requieren suprivilegios. Si lo hago sudo suantes del comando (probarlo a mano en una sshsesión), entonces funciona.

¿Razones detrás de esto? ¿Posibles soluciones que no involucren sudo suo ediciones manuales?

bevacqua
fuente
El mismo problema aquí: stackoverflow.com/questions/82256/… - Además, si quieres ser realmente arriesgado:sudo -i
MirroredFate

Respuestas:

46

No puede usar sudopara afectar la redirección de salida; >y >>(y, para completar, <) se efectúan con el privilegio del usuario que realiza la llamada, porque la redirección se realiza mediante el shell de la llamada, no el subproceso llamado.

Tampoco

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

o

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

Puede que le resulte más sencillo usar este comando:

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

sudoejecuta solo su comando, no la redirección, como root. Tendrá que envolverlo todo en un comando donde todo se ejecuta como root:

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

El comando sudo echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.confse interpreta como que usted (no raíz) escribe el resultado sudo echo "net.ipv4.ip_forward = 1"en /etc/sysctl.conf.

correr

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

o

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

para correr echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.confcomo root.

jdh8
fuente
1
sudo sed -i "$ a <text>" <file>
  • -i : edita el archivo en su lugar.
  • $ a: agrega texto a la última línea

Usar el sedcomando evita la molestia de las redirecciones y las tuberías.

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

forzagreen
fuente