16 votos

¿Cómo se ejecuta un bash script que requiere privilegios de root?

Tengo estas líneas script de mi ISP:

sudo bash
echo "plugin L2TP.ppp">>/etc/ppp/options 
echo "l2tpnoipsec">>/etc/ppp/options

Funciona si pego línea por línea en la Terminal. Quiero crear un archivo *.command y ejecutarlo haciendo doble clic. Pero todo lo que obtengo es un pedido de contraseña y luego una ventana bash vacía. El archivo de "opciones" resultante está vacío.

Ya lo intenté:

#!/bin/bash

echo "plugin L2TP.ppp">>/etc/ppp/options 
echo "l2tpnoipsec">>/etc/ppp/options

Lo entiendo:

/etc/ppp/opciones: Permiso denegado

Creo que necesito usar algún comando para obtener los privilegios de Root desde dentro de la fiesta.

0 votos

Cuando creaste tu script ¿lo ejecutaste escribiendo sudo ./ispscript.command? Además, los de bash suelen tener un sufijo .sh: ipscript.sh.

1 votos

FYI Este script sólo debe ejecutarse una vez. Además, si sigues ejecutando el script tal y como está, está AMPLIANDO >> al archivo. El archivo de opciones va a seguir creciendo en tamaño cuanto más lo ejecute (el script). Esto puede o no causar problemas con lo que sea que esté leyendo el archivo de opciones.

0 votos

@dennis.hempler, gracias ya lo sé. En realidad voy a ejecutar este script a menudo. Porque el dispositivo USB-módem necesita que este archivo esté en blanco para funcionar correctamente. Así que antes de insertar el USB-módem borro el archivo y antes de conectarme a internet por cable escribo esas opciones en el archivo.

17voto

user4416 Puntos 41

Toma el script que creaste:

#!/bin/bash

echo "plugin L2TP.ppp">>/etc/ppp/options 
echo "l2tpnoipsec">>/etc/ppp/options

Guárdalo en tu directorio principal, o en un directorio 'scripts' dentro de tu directorio principal, como l2tp.sh. Permite que se ejecute (escribe este comando en Terminal):

chmod 700 ~/path/to/l2tp.sh

Para ejecutar el archivo usando sudo (privilegios de root):

Método #1. En el tipo Terminal:

$ sudo ~/path/to/l2tp.sh

Método #2. Crear un archivo run_l2tp.command con este contenido:

sudo ~/path/to/l2tp.sh

Permita que se ejecute:

chmod u+x run_l2tp.command

Al hacer doble clic en run_l2tp.command e introducir la contraseña, el archivo l2tp.sh se ejecutará con privilegios de root.

Algunas notas:

  • En sistemas como UNIX, ~ es la abreviatura de "mi directorio de inicio".
  • Chmod 700 hará que el archivo sea ejecutable sólo por ti. Para más información: ver esta página de Wikipedia .
  • escribiendo 'sudo' antes de un comando ejecutará el programa usando los privilegios de root. Ten cuidado al hacer esto, pueden ocurrir cosas malas si no estás seguro de lo que estás haciendo.
  • Obviamente puedes omitir el /path/to si has guardado este script directamente en tu directorio principal.

4voto

shsteimer Puntos 8749

Guarda esto:

#!/bin/bash

echo "plugin L2TP.ppp">>/etc/ppp/options 
echo "l2tpnoipsec">>/etc/ppp/options

a su Escritorio en un archivo llamado script.sh .

Abre una ventana de la Terminal y escribe:

sudo bash ~/Desktop/script.sh

Introduce tu contraseña cuando se te pida y todos los comandos del archivo se ejecutarán con privilegios de superusuario.

4voto

TraFoO Puntos 11

Si por motivos de seguridad, no quiere que ningún usuario de su sistema pueda ejecutar el script, sino que quiere que se le pida una contraseña administrativa, una solución alternativa sería guardar el shell script y luego usar el programa Editor de AppleScript para crear un AppleScript.

El AppleScript sería de una sola línea, diciendo do shell script «your script's name here» with administrator privileges . Guarda ese script como una Aplicación. Luego, cuando hagas clic en él, te pedirá una contraseña de administrador, y luego ejecuta el shell script con privilegios de administrador.

Obviamente, reemplazar «your script's name here» con el camino a tu script.

2voto

agemO Puntos 504

El problema es que cuando lo haces desde la línea de mando, lo que estás haciendo es empezar bash bajo sudo y luego enviando los dos siguientes comandos a bash no la cáscara original. (la señal es que necesitas exit dos veces)

Cuando lo haces en un script, el bash El comando nunca sale, así que los dos siguientes comandos nunca se ejecutan.

No es tan elegante como la solución de AppleScript, pero si vas a hacer esto como script desde la línea de comandos, el equivalente sería:

#!/bin/sh --
sudo bash -c 'echo "plugin L2TP.ppp">>/etc/ppp/options' 
sudo bash -c 'echo "l2tpnoipsec">>/etc/ppp/options'

Si no necesitáramos la redirección io (la >> bit), podríamos llamar al comando directamente a través de sudo sin necesidad de la sudo sh -c truco. (y note que tuve que citar el argumento para sh -c para evitar que ejecute el eco como root, pero el archivo que se añade como el usuario original).

Es será trabajar como .command del Finder, pero mostrará una ventana de terminal, pidiéndole su contraseña, y si la introduce correctamente, ejecutará los comandos. (asumiendo que no te hayas autentificado recientemente para sudo ... si lo has hecho, se ejecutará sin necesidad de que te lo pidan)

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X