Verwenden Sie den sudo-Befehl im Shell-Skript in der Automator-App?

Ich plane, eine kleine Automator-App zu erstellen, um diese Befehle zu etwas zu machen, das ich regelmäßig ausführen kann:

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/*

Da es sich um sudo handelt, was meiner Meinung nach ein gefährlicher Befehl ist, wird dies jemandem empfohlen, der neu bei Automator ist, und es wird den Mac nicht beschädigen?

Ich habe den bei iMac vorgeschlagenen Befehl ausprobiert, der seit dem Upgrade auf OS X 10.11, El Capitan, nicht heruntergefahren wurde, um Probleme mit dem Herunterfahren meines Mac zu beheben (es ist MacOS Sierra 10.12.6 auf einem alten Mac Mini).

Ich würde mich über Ratschläge dazu freuen, da ich die Grundlagen von Automator kenne, nur ob es empfehlenswert ist, dies mit sudo-Befehlen als Automator-App zu tun.

Erstellen Sie stattdessen ein Shell-Skript, das auch y/n fragt, bevor es etwas tut?

Antworten (2)

Sudo ist (an und für sich) nicht gefährlich. Sudo entfernt lediglich Schutzbeschränkungen und legt Ihnen die Last auf, sicheren Code auszuführen, anstatt Sie hinter den Kulissen zu schützen. Sudo kann gefährlich sein, wenn zum Beispiel:

  • Sie machen einen Codierungsfehler, der unbeabsichtigte Folgen hat: z. B. wenn Sie beabsichtigen, Folgendes auszuführen:

    • sudo rm -Rf /Users/yourname/something/something/

      aber stattdessen tippst du:

    • sudo rm -Rf /Users/yourname/ something/something/

      (mit einem versehentlichen Leerzeichen nach „Ihr Name“)

    Das zweite Skript (mit dem fehlerhaften Leerzeichen) löscht alle Daten für den Benutzer „Ihr Name“ ohne Warnung.

  • Sie führen den Code einer anderen Person aus, der zufällig bösartig ist. Bösartiger Code, der ohne sudo ausgeführt wird, kann einigen Schaden anrichten, aber bösartiger Code, der mit sudo ausgeführt wird, kann Ihr System vollständig gefährden.

Solange Sie vorsichtig sind, ist sudo sicher genug. Seien Sie sich nur der Schadenspotenziale bewusst.

Ich würde argumentieren, was Sie beschrieben haben, ist "gefährlich". Auf einer Klippe zu stehen ist „gefährlich“, aber das bedeutet nicht, dass es „schädlich“ ist – es bedeutet nur, dass Sie Vorsicht walten lassen müssen. Und wenn Sie vorsichtig sind, sollten Sie sich nicht von der Gefahr abhalten lassen, die Aussicht zu genießen.
@Wowfunhappy – Eh, tomayto-tomahto. Ich verstehe Ihren Standpunkt, obwohl es wie bloße Semantik erscheint.

sudoGefährlich sein

Es gibt per se keine gefährlichen Befehle. Was Sie mit ihnen machen, kann Probleme verursachen. Zum Beispiel kann der harmlose Befehl yes, der eine Zeichenfolge wiederholt ausgibt, bis Sie ihn beenden, auf schändliche Weise verwendet werden, um eine Maschine zum Kriechen zu bringen:

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

Nichts darin ist gefährlich. Es ist, wie es verwendet wird, was das Problem verursacht.

sudoerteilt oder entfernt keine Berechtigungen/Einschränkungen für Ihr Konto. Es ermöglicht Ihnen, einen Befehl als ein anderer Benutzer auszuführen. Dies ist normalerweise der Superuser (alias root), daher der Befehl - su "do" ( su= Substitute User Identity )

Der Schlüssel, den Sie sich merken sollten, ist, dass Sie, wenn Sie einen Befehl mit dem Präfix „ausgeben“, sudoihn als root und nicht als „Sie“ ausführen.

Korrigieren Sie Ihr Skript

Hier sind einige Tipps...

  • Führen Sie das Skript selbst (nicht die einzelnen Befehle) mit aus sudo.
  • Bevor Sie das „Fleisch“ des Skripts ausführen, überprüfen Sie zuerst die Root-Rechte:

    # Validates that user is root; exits if not
    echo "Checking Root Priviliges"
    if [ $(id -u) -ne 0 ]
    then 
      echo "User is not root"
      exit 1;
    else 
      echo "User is root.  Continuing";
    fi
    
  • Verwenden Sie keine Tilde-Erweiterung (~) für Ihren Pfad. Verwenden Sie stattdessen den gesamten Pfad. Dadurch wird sichergestellt, dass Sie das gewünschte Verzeichnis beeinflussen. Das Home-Verzeichnis für Sie unterscheidet sich stark vom Root-Home-Verzeichnis.

    rm -rf ~/Library/Caches/*                  ← Don't do this!!!
    rm -rf /Users/FooBarUser/Library/Caches/*  ← Do this instead!
    
  • Wenn Sie vorhaben, dies zu automatisieren (es klingt so, als würden Sie es tun), müssen Sie es als Skript (bash oder zsh) speichern, und dann schlage ich vor, launchddafür und nicht Automator zu verwenden. Einzelheiten dazu, wie Sie dies bewerkstelligen können, finden Sie im Post- Launchd-Plist-Format zum Ausführen eines Befehls zu einer bestimmten Zeit an einem Wochentag .