1 votes

Utilisation de la commande sudo dans un script shell dans l'application Automator?

Je prévois de créer une petite application Automator pour transformer ces commandes en quelque chose que je peux exécuter régulièrement :

rm -rf ~/Library/Caches/*
rm -rf ~/Library/Saved\ Application\ State/*
sudo rm -rf /Library/Caches/*
sudo rm -rf /System/Library/Caches/*
atsutil databases -removeUser
sudo atsutil databases -remove
sudo atsutil server -shutdown
sudo atsutil server -ping
sudo rm -rf /var/folders/*

Étant donné qu'il implique sudo, qui est une commande dangereuse, est-ce recommandé pour quelqu'un de nouveau dans Automator, et cela ne nuira pas au Mac ?

J'ai essayé la commande suggérée sur iMac not shutting down since upgrading to OS X 10.11, El Capitan pour résoudre les problèmes de mise en veille de mon Mac (c'est MacOS Sierra 10.12.6 sur un ancien Mac Mini).

Je serais reconnaissant pour tout conseil à ce sujet, car je connais les bases d'Automator, simplement je ne sais pas s'il est recommandé de le faire avec des commandes sudo en tant qu'application Automator.

1voto

Ted Wrigley Points 725

Sudo n'est pas (en soi) dangereux. Sudo se contente de lever les restrictions de protection, mettant sur vous la responsabilité d'exécuter un code sûr, plutôt que de vous protéger en arrière-plan. Sudo peut être dangereux lorsque, par exemple:

  • Vous faites une erreur de codage qui a des conséquences non voulues: par exemple, si vous avez l'intention d'exécuter:

    • sudo rm -Rf /Utilisateurs/votre_nom/quelque_chose/quelque_chose/

      mais au lieu de cela vous tapez:

    • sudo rm -Rf /Utilisateurs/votre_nom/ quelque_chose/quelque_chose/

      (avec un espace accidentel après 'votre_nom')

    le deuxième script (avec l'espace erroné) supprimera toutes les données de l'utilisateur 'votre_nom' sans avertissement.

  • Vous exécutez le code de quelqu'un d'autre qui s'avère être malveillant. Un code malveillant exécuté sans sudo peut faire des dégâts, mais un code malveillant exécuté avec sudo peut compromettre entièrement votre système.

Si vous êtes prudent, sudo est suffisamment sûr. Soyez simplement conscient des risques potentiels.

1voto

Douglas Points 10417

sudo Être dangereux

Il n'y a pas de commandes dangereuses en soi. C'est ce que vous en faites qui peut poser problème. Par exemple, la commande inoffensive yes, qui produira une chaîne en boucle jusqu'à ce que vous l'arrêtiez, peut être utilisée de manière néfaste pour ralentir une machine :

echo "Spawning 1000 yesses"
for i in {1..1000} ;
do
  ( /usr/bin/yes & )
; done

Rien de cela n'est dangereux. C'est la façon dont c'est utilisé qui pose problème.

sudo ne donne pas ou ne supprime pas les permissions/restrictions de votre compte. Cela vous permet d'exécuter une commande en tant qu'un autre utilisateur. Il s'agit généralement du super utilisateur (alias root), d'où le commande - su "do" (su = Remplacer l'identité utilisateur)

La clé à retenir est que lorsque vous émettez une commande préfixée avec sudo vous l'exécutez en tant que root et non en tant que "vous".

Réparer votre script

Voici quelques conseils...

  • Exécutez le script lui-même (pas les commandes individuelles) avec sudo.

  • Avant d'exécuter le "coeur" du script, vérifiez d'abord les privilèges root :

    # Vérifie que l'utilisateur est root; quitte si ce n'est pas le cas
    echo "Vérification des privilèges root"
    if [ $(id -u) -ne 0 ]
    then 
      echo "L'utilisateur n'est pas root"
      exit 1;
    else 
      echo "L'utilisateur est root.  Continuation";
    fi
  • N'utilisez pas l'expansion tilde (~) pour votre chemin. Utilisez le chemin complet à la place. Cela garantira que vous affectez le répertoire que vous souhaitez affecter. Le répertoire de votre maison est très différent du répertoire de la maison root.

    rm -rf ~/Library/Caches/*                   Ne faites pas cela!!!
    rm -rf /Users/FooBarUser/Library/Caches/*   Faites plutôt cela!
  • Si vous prévoyez d'automatiser cela (il semble que oui), vous devrez enregistrer cela en tant que script (bash ou zsh) et je suggère d'utiliser launchd et non Automator pour cela. Voir l'article format plist de launchd pour exécuter une commande à un horaire spécifique un jour de la semaine pour plus de détails sur la façon d'y parvenir.

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