Cómo ejecutar scripts de Shell con el comando Sudo en Linux


sudo es una poderosa herramienta de línea de comandos que permite a un "usuario autorizado" ejecutar un comando como otro usuario (el superusuario por defecto), según lo definido por una política de seguridad. En la mayoría de los sistemas Linux, si no en todos, la política de seguridad se rige por el archivo/etc/sudoers.

Por lo tanto, para ejecutar un script de shell o un programa como root, debe usar el comando sudo. Sin embargo, sudo solo reconoce y ejecuta comandos que existen en directorios especificados en secure_path en/etc/sudoers, a menos que haya un comando presente en secure_path, contrarrestará un error como el que se muestra a continuación.

Esto sucederá incluso si el script existe en un directorio de la variable de entorno PATH, porque cuando un usuario invoca sudo, PATH se reemplaza por secure_path.

$ echo  $PATH
$ ls  -l
$ sudo proconport.sh 80

En el escenario anterior, el directorio/home/aaronkilik/bin está en la variable de entorno PATH y estamos intentando ejecutar el script /home/aaronkilik/bin/proconport.sh (encuentra el proceso escuchando en un puerto) con privilegios de root.

Luego encontramos el error "sudo: proconport.sh: comando no encontrado", ya que/home/aaronkilik/bin no está en el sudo secure_path como se muestra en la siguiente captura de pantalla.

Para solucionar esto, necesitamos agregar el directorio que contiene nuestros scripts en sudo secure_path usando el comando visudo editando el archivo/etc/sudoers de la siguiente manera.

$ sudo visudo

Atención: este método tiene serias implicaciones de seguridad, especialmente en servidores que se ejecutan en Internet. De esta manera, corremos el riesgo de exponer nuestros sistemas a varios ataques, porque un atacante que logra obtener acceso a un directorio no seguro (sin privilegios de superusuario) que se ha agregado a secure_path, puede ejecutar un script/programa malicioso con el comando sudo.

Por motivos de seguridad, consulte el siguiente artículo del sitio web de sudo que explica una vulnerabilidad relacionada con secure_path: https://www.sudo.ws/sudo/alerts/secure_path.html

Preferiblemente, podemos proporcionar la ruta absoluta a un script mientras lo ejecutamos con sudo:

$ sudo ./proconport.sh 80

¡Eso es! Puede seguir la lista de artículos sobre el comando sudo:

  1. Cómo ejecutar el comando "sudo" sin ingresar una contraseña en Linux
  2. Cómo mantener la sesión de tiempo de espera de la contraseña "sudo" durante más tiempo en Linux
  3. Cómo corregir "El nombre de usuario no está en el archivo sudoers. Este incidente se informará ”en Ubuntu
  4. Deje que Sudo lo insulte cuando ingrese una contraseña incorrecta

Si tiene alguna pregunta o pensamiento sobre este artículo, compártalo con nosotros a través del formulario de comentarios a continuación.