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

15

Tengo estas líneas de 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 una solicitud de contraseña y luego vaciar la ventana bash. El archivo de "opciones" resultante está vacío.

He intentado esto:

#!/bin/bash

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

me sale:

  

/ etc / ppp / options: Permiso denegado

Creo que necesito usar algún comando para obtener privilegios de root desde dentro de bash.

    
pregunta Dmitriy 26.04.2012 - 16:09

4 respuestas

14

Toma el script que creaste:

#!/bin/bash

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

Guárdelo en su directorio de inicio, o un directorio de 'scripts' dentro de su directorio de inicio, como l2tp.sh. Permita que se ejecute (escriba este comando en la Terminal):

chmod 700 ~/path/to/l2tp.sh

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

Método # 1. En el tipo de terminal:

$ sudo ~/path/to/l2tp.sh

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

sudo ~/path/to/l2tp.sh

Permitir que se ejecute:

chmod u+x run_l2tp.command

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

Método # 3 Si por motivos de seguridad, no desea que ningún usuario de su sistema pueda ejecutar el script, sino que desea que se le solicite una contraseña administrativa, una alternativa La solución sería guardar el script de shell y luego utilizar 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 . Guarde ese script como una aplicación. Luego, cuando haga clic en él, le pedirá una contraseña de administrador, luego ejecute el script de shell con privilegios de administrador.

Obviamente, reemplaza «your script's name here» con la ruta a tu script.

Algunas notas:

  • En sistemas similares a UNIX, ~ es la abreviatura de "mi directorio de inicio".
  • Chmod 700 hará el archivo ejecutable solo por ti. Para obtener más información: vea esta página de Wikipedia .
  • al escribir 'sudo' antes de que un comando ejecute el programa usando privilegios de root. Tenga cuidado al hacer esto, pueden pasar cosas malas si no está seguro de lo que está haciendo.
  • Obviamente, puede omitir / path / to si guardó esta secuencia de comandos directamente en su directorio de inicio.
respondido por el Aaron Lake 26.04.2012 - 16:18
3

Guarda esto:

#!/bin/bash

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

a tu escritorio en un archivo llamado script.sh .

Abre una ventana de Terminal y escribe:

sudo bash ~/Desktop/script.sh

Ingrese su contraseña cuando se le solicite y todos los comandos en el archivo se ejecutarán con privilegios de superusuario.

    
respondido por el Ian C. 26.04.2012 - 16:20
1

Si, por motivos de seguridad, no desea que ningún usuario de su sistema pueda ejecutar el script, sino que desea que se le solicite una contraseña administrativa, una solución alternativa sería guardar el script de shell y luego use 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 . Guarde ese script como una aplicación. Luego, cuando haga clic en él, le pedirá una contraseña de administrador, luego ejecute el script de shell con privilegios de administrador.

Obviamente, reemplaza «your script's name here» con la ruta a tu script.

    
respondido por el Daniel 26.04.2012 - 17:35
1

El problema es que cuando lo haces desde la línea de comandos, lo que estás haciendo es iniciar bash en sudo y luego enviar esos dos comandos siguientes a bash , no al shell original. (el signo es que necesita exit dos veces)

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

No es tan elegante como la solución AppleScript, pero si va a hacer esto como un 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 necesitamos la redirección de io (el bit >> ), podríamos simplemente llamar al comando directamente a través de sudo sin necesitar el truco sudo sh -c . (y tenga en cuenta que tuve que citar el argumento a sh -c para evitar que ejecute el eco como root, pero que el archivo se agregue como el usuario original).

funcionará como un archivo .command desde el Finder, pero abrirá una ventana de terminal, le pedirá su contraseña y, si se ingresa correctamente, ejecutará los comandos. (asumiendo que no se haya autenticado recientemente para sudo ... si lo ha hecho, se ejecutará sin avisar)

    
respondido por el Joe 27.04.2012 - 12:51

Lea otras preguntas en las etiquetas