Permiso de sudo denegado con redireccionamiento o canalización [Solutions]

En este tutorial, le mostraré cómo usar el sudo comando al usarlo con redirección o tubería. Cuando usas sudo con redirección (>) o tubería (|), obtendrá Permiso denegado mensaje de error en bash producción. Más adelante, le mostraré diferentes formas de solucionar este problema.

Usar sudo con camiseta

Por ejemplo, para redirigir la salida del comando ‘echo 1’ al archivo ‘ip_forward’, ejecute:

$ sudo echo 1 > /proc/sys/net/ipv4/ip_forward
bash: /proc/sys/net/ipv4/ip_forward: Permission denied

Lo anterior sudo comando resultó en Permiso denegado porque la redirección la realiza el cáscara que no tiene permiso de escritura.

Nosotros podemos usar sudo comando con el comando tee para resolver este error:

$ echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward

Usando el enfoque anterior, el comando ejecutado antes de la tubería no se ejecutará como root (echo 1). Eso es útil si solo necesita la salida de un programa, que no requiere privilegios de root.

En caso de que el comando anterior a la tubería requiera root, podríamos usar sudo antes de cada comando, como:

$ sudo echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward > /dev/null

El enfoque similar que podemos usar para escribir “1” en el archivo “ip_forward”, como en los ejemplos anteriores, sería elevar el proceso para escribir en el archivo.

Un example sería el siguiente:

$ sudo tee /proc/sys/net/ipv4/ip_forward > /dev/null << EOF
1
EOF

Ejecutar shell con sudo -C

Otro enfoque popular sería ejecutar otro shell como root usando el -c opción.

Ejemplo:

$ sudo sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'

Ejecutar shell usando sudo -s

Otra forma sería lanzar un shell con sudo -s y luego ejecute el comando:

$ sudo -s
# echo 1 > /proc/sys/net/ipv4/ip_forward
# ^D
$

Mediante el uso de un script Bash

Hay otra forma de correr sudo con redireccionamiento o canalización, y es mediante la creación de un bash script con todos sus comandos, y ejecute ese script con sudo.

Veamos cómo podemos lograrlo. Primero, necesitamos crear un nuevo archivo usando cualquier editor de texto, como nano, vim, gedit o cualquier otro. Vamos a llamarlo “myscript.sh”.

Luego pegue los siguientes comandos en myscript.sh y guarde el archivo:

#!/bin/sh
echo 1 > /proc/sys/net/ipv4/ip_forward

Ahora solo necesita ejecutar el archivo myscript.sh con sudo mando:

$ sudo myscript.sh

Conclusión

Hemos visto múltiples formas de usar sudo con redirección o canalización y evitar errores de permiso denegado. Si conoce otra forma de lograr esto o tiene alguna pregunta, publíquela en la sección de comentarios a continuación.