16 votes

Comment exécuter un bash script qui nécessite des privilèges Root ?

J'ai cette ligne script de mon FAI :

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

Cela fonctionne si je colle ligne par ligne dans le Terminal. Je veux créer un fichier *.command et l'exécuter en double-cliquant. Mais tout ce que j'obtiens est une demande de mot de passe, puis une fenêtre bash vide. Le fichier "options" résultant est vide.

J'ai essayé ça :

#!/bin/bash

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

J'ai compris :

/etc/ppp/options : Permission refusée

Je pense que je dois utiliser une commande pour obtenir les privilèges Root à partir de bash.

17voto

Aaron Lake Points 3622

Prenez le script que vous avez créé :

#!/bin/bash

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

Enregistrez-le dans votre répertoire personnel, ou dans un répertoire 'scripts' à l'intérieur de votre répertoire personnel, sous le nom de l2tp.sh. Permettez-lui d'être exécuté (écrivez cette commande dans le Terminal) :

chmod 700 ~/path/to/l2tp.sh

Pour exécuter le fichier en utilisant sudo (privilèges Root) :

Méthode n° 1. Dans le type de terminal :

$ sudo ~/path/to/l2tp.sh

Méthode n°2. Créez un fichier run_l2tp.command avec ce contenu :

sudo ~/path/to/l2tp.sh

Permettez-lui d'être exécuté :

chmod u+x run_l2tp.command

Lorsque vous double-cliquez sur run_l2tp.command et entrez le mot de passe, le fichier l2tp.sh sera exécuté avec les privilèges Root.

Quelques notes :

  • Sur les systèmes de type UNIX, ~ est l'abréviation de "mon répertoire personnel".
  • Chmod 700 rendra le fichier exécutable uniquement par vous. Pour plus d'informations : voir cette page Wikipedia .
  • Si vous tapez 'sudo' avant une commande, le programme sera exécuté avec les privilèges de Root. Faites attention lorsque vous faites cela, de mauvaises choses peuvent arriver si vous n'êtes pas sûr de ce que vous faites.
  • Vous pouvez évidemment omettre le /path/to si vous avez enregistré ce script directement dans votre répertoire personnel.

4voto

shsteimer Points 8749

Sauvez ça :

#!/bin/bash

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

sur votre bureau dans un fichier nommé script.sh .

Ouvrez une fenêtre Terminal et tapez :

sudo bash ~/Desktop/script.sh

Entrez votre mot de passe lorsque vous y êtes invité et toutes les commandes du fichier seront exécutées avec les privilèges de super utilisateur.

4voto

Daniel Points 32917

Si, pour des raisons de sécurité, vous ne voulez pas que n'importe quel utilisateur de votre système puisse exécuter le script, mais plutôt que l'on vous demande un mot de passe administratif, une autre solution serait d'enregistrer le shell script et d'utiliser ensuite le programme. Éditeur AppleScript pour créer un AppleScript.

L'AppleScript serait une ligne unique, disant do shell script «your script's name here» with administrator privileges . Enregistrez ce script comme une application. Ensuite, lorsque vous cliquez dessus, il vous demandera un mot de passe administrateur, puis exécutera le shell script avec des privilèges d'administrateur.

De toute évidence, il faut remplacer «your script's name here» avec le chemin vers votre script.

2voto

DarkAveril Points 433

Le problème est que lorsque vous le faites à partir de la ligne de commande, ce que vous faites est de démarrer bash sous sudo et ensuite envoyer ces deux commandes suivantes à bash et non la coquille originale. (le signe étant que vous devez exit deux fois)

Quand vous le faites dans un script, le bash ne sort jamais, donc les deux commandes suivantes ne sont jamais exécutées.

Ce n'est pas aussi élégant que la solution AppleScript, mais si vous voulez faire cela comme un script à partir de la ligne de commande, l'équivalent serait :

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

Si l'on n'avait pas besoin de la redirection io (l' >> ), nous pourrions simplement appeler la commande directement par l'intermédiaire de sudo sans avoir besoin de la sudo sh -c truc. (et notez que j'ai dû citer l'argument à sh -c pour éviter qu'il n'exécute l'écho en tant que Root, mais que le fichier s'ajoute en tant qu'utilisateur d'origine).

Il sera travailler en tant que .command depuis le Finder, mais il fera apparaître une fenêtre de terminal, vous demandant votre mot de passe, et si vous l'entrez correctement, il exécutera les commandes. (en supposant que vous ne vous soyez pas récemment authentifié pour sudo ... si vous l'avez fait, il s'exécutera sans demander)

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X