3 votes

Équivalent de "with administrator privileges" en AppleScript dans shell

Récemment, j'ai dû apporter quelques modifications à mon Macbook qui m'ont demandé non seulement des privilèges sudo, mais aussi des privilèges root. Lorsque j'ai cherché comment faire cela, la réponse qui me semblait la plus appropriée était d'exécuter les commandes que je devais exécuter avec des privilèges root en AppleScript en utilisant "with administrator privileges" après le script shell que je voulais exécuter. Cela a accompli ce dont j'avais besoin de faire, mais en général j'aimerais éviter d'avoir à utiliser AppleScript lorsque je veux exécuter quelques commandes dans le terminal.

Par conséquent, je me demandais quelle était la version shell de "with administrator privileges" qui fonctionnerait sur mon Mac. Je recherche quelque chose qui me fournirait non seulement des privilèges sudo, mais aussi des privilèges root. J'aimerais pouvoir le faire d'une manière "sh-compatible" pour que cela fonctionne sur zsh, bash, etc. Mais, je serais également prêt à accepter une solution qui ne fonctionne qu'avec zsh (mon shell interactif de choix) s'il n'y a pas de bonne solution "sh-compatible" pour moi.

Je comprends que je peux exécuter des AppleScripts dans le terminal en utilisant osascript de manière similaire à la solution fournie dans Comment ouvrir un script shell dans une nouvelle fenêtre Terminal et l'exécuter avec des privilèges administrateur mais j'espérais une solution plus "pure sh" si possible.

2voto

Gordon Davisson Points 30215

sudo est l'équivalent en ligne de commande de with administrator privileges d'AppleScript. C'est-à-dire que lorsque vous exécutez sudo somecommand, alors somecommand s'exécutera en tant que root. Voici une démo rapide:

$ sudo whoami
Mot de passe : [J'ai entré mon mot de passe ici]
root

Une chose dont vous devez être conscient, cependant, est que sudo exécute uniquement la commande réelle en tant que root, pas des choses comme les redirections. Donc si vous utilisez quelque chose comme ceci:

sudo somecommand outputfile

...l'ouverture de inputfile et outputfile sera faite par votre shell actuel, en tant qu'utilisateur actuel, avant l'exécution de sudo et de la commande. Il existe des façons standard de contourner cela, comme l'exécution d'un shell root pour effectuer les redirections et exécuter la commande:

sudo sh -c 'somecommand outputfile'

(Attention : si la commande que vous voulez exécuter contient des guillemets simples et/ou des variables de shell, les choses sont plus compliquées.) Une autre astuce standard est d'utiliser sudo cat pour lire les fichiers en tant que root et/ou sudo tee pour écrire des fichiers en tant que root:

sudo cat inputfile | somecommand | sudo tee outputfile >/dev/null

(Notez que dans cet exemple, cat et tee sont exécutés en tant que root, mais somecommand s'exécute en tant qu'utilisateur normal.)

Vous pouvez également utiliser sudo -s pour ouvrir un shell root interactif, et ensuite exécuter plusieurs commandes en tant que root (et ensuite utiliser exit pour fermer ce shell et revenir à la normale). Mais faites attention lorsque vous exécutez en tant que root; il est assez facile de faire un vrai bazar si vous ne savez pas exactement ce que vous faites.

1voto

Oskar Points 1242

Apple n'a jamais eu le modèle de sécurité Windows des scripts administratifs, donc il y a moins d'efficacité de la commande similaire dans mon expérience. Votre recherche était bonne, mais l'effet est décevant.

Étant donné que la défense Unix et Apple est en couches et repose davantage sur les listes de contrôle d'accès, vous devrez peut-être attaquer chaque problème spécifique et appliquer l'utilisateur approprié ou les modifications nécessaires. Au lieu de la stratégie de groupe et de "en tant qu'administrateur", Apple a mis en œuvre des commandes MDM et le concept d'un système géré.

Cependant, si vous avez de la chance, votre problème pourrait être compatible avec "en tant qu'administrateur". La documentation officielle la plus claire n'est plus une documentation maintenue sur l'exécution d'un script shell en tant qu'administrateur.

  • do shell script "command" with administrator privileges

    do shell script "command" with administrator privileges

Pour une expérience shell pure, sudo dans toute sa gloire est la voie à suivre car cela fonctionne avec tous les shells. Le seul inconvénient serait les liaisons Objective-C et la capacité native de script GUI qu'Automator et AppleScript permettent.

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