Ich habe eine do shell script
, die ich in Applescript ausführen muss, aber sie muss als ein anderer Benutzer ausgeführt werden. Es soll als eigenständige Anwendung auf dem Netzlaufwerk des Schülers bereitgestellt werden, die die Schüler bei Bedarf ausführen können.
Der folgende Beispielcode dient nur zur Veranschaulichung. Dieser Code funktioniert, wenn ich angemeldet bin, da er meinen Benutzernamen (lokales Administratorkonto) auf dem Computer abruft und das angegebene Passwort verwendet (nicht das eigentliche Passwort).
do shell script "rm -rf /$HOME/Downloads/*" password "Password01" with administrator privileges
Ich habe versucht, einen Benutzernamen mit dem Code anzugeben, user "sdadmin"
und es funktioniert nicht, es gibt einen Fehler aus.
Gibt es eine Möglichkeit, AppleScript aufzufordern, einen Befehl mit einem bestimmten Benutzer und Kennwort auszuführen, die im Code wie oben angegeben sind?
Aktualisierte Antwort:
Es gibt ein Apple-Dokument , das die richtige Vorgehensweise zeigt. Du warst nah dran.
(Ich habe es nicht selbst ausprobiert)
führen Sie das Shell-Skript „rm -rf /$HOME/Downloads/*“ Benutzername „USERNAME“ Passwort „THEPASSWORD“ mit Administratorrechten aus
Aus dem Dokument :
Wie erhalte ich Administratorrechte für einen Befehl?
Verwenden Sie die Parameter Administratorrechte, Benutzername und Passwort wie folgt:
do Shell-Skript "command" Benutzername "me" Passwort "mypassword" mit Administratorrechten Benutzername und Passwort sind optional; wenn Sie den Benutzernamen weglassen, nimmt do Shell-Skript an, dass es sich um den aktuellen Benutzer handelt; Wenn Sie das Passwort weglassen, wird es beim Ausführen nach einem Passwort fragen. Sobald ein Skript korrekt authentifiziert wurde, wird es fünf Minuten lang nicht erneut zur Authentifizierung aufgefordert. Ab Mac OS X 10.4 erstreckt sich diese Nachfrist nicht auf andere Skripts oder den Rest des Systems; Der manuelle Aufruf von sudo -k ist nicht erforderlich.
Aus Sicherheitsgründen dürfen Sie keine andere Anwendung anweisen, Shell-Skripte mit Administratorrechten auszuführen. Platzieren Sie den Befehl außerhalb eines beliebigen Tell-Blocks oder innerhalb eines Tell-Me-Blocks.
Denken Sie daran, dass Sie mit Administratorrechten jede Datei überall im System ändern können. Sie können Ihr System mit ein paar gut platzierten Befehlen nicht mehr bootfähig machen oder sogar die gesamte Festplatte löschen, seien Sie also vorsichtig. Besser noch, verwenden Sie keine Administratorrechte, es sei denn, Sie müssen es unbedingt tun. Sofern Sie nicht auf Systemebene entwickeln, sollten Sie niemals etwas in /System ändern müssen – das Ändern von /Library sollte ausreichen.
Hinweis: Die Verwendung von sudo(8) mit Administratorrechten ist im Allgemeinen unnötig und erzeugt Sicherheitslücken; Entfernen Sie einfach das "sudo".
WICHTIGE UPDATE 2
*Sie können die App als "nur ausführen" speichern (speichern Sie zuerst eine bearbeitbare Kopie für sich selbst)
(Wenn Sie es nur als Nur ausführen speichern, können Sie es später nicht mehr öffnen und bearbeiten, nachdem Sie das Skriptfenster geschlossen haben.)
Verwenden Sie dann das Menü Datei-> Exportieren , das Ihnen im Speicherdialog die Option gibt, als "Nur ausführen" zu speichern.
Versuchen Sie, die Datei main.scpt im Anwendungspaket zu öffnen:
Nur Ausführen verhindert, dass jemand das in die Anwendung eingebettete Skript öffnet, indem er darauf doppelklickt, um es im Skripteditor zu öffnen und Ihr Passwort zu erfahren. Aber es gibt eine Möglichkeit, den Benutzernamen und das Passwort von einem Run Only zu finden, und es ist nicht so schwer, selbst für einen Gelegenheitsbenutzer herauszufinden.
ICH WÜRDE ZWEIMAL ÜBERLEGEN, IHREN BENUTZERNAMEN UND PASSWORT IN DIE APP EINZUGEBEN.
AKTUALISIERUNG 3
Eine kleine Idee, um zu helfen, wenn Sie dies tun müssen, besteht darin, den Passworttext aufzubrechen, indem Sie einen unsinnigen Variablennamen erstellen, um ihn zu speichern und sie durcheinander zu bringen.
Wenn der Code ausgeführt wird, werden sie in der richtigen Reihenfolge wieder zusammengesetzt.
Zum Beispiel.
wenn das Passwort 88>0TpFpax ist
Ich werde benützen:
set T to "Tp"
set Po to "88"
set TC to "Fpax"
set TEH to ">0"
do shell script "say blahbla" user name "markhunte" password (Po & TEH & T & TC as string) with administrator privileges
Beachten Sie, dass die Variable nicht nur nichts bedeutet oder irgendeinen Sinn für Ordnung zeigt, sondern dass auch die Bits des Passworts darin durcheinander geraten.
Alles, bis der Code ausgeführt wird.
Selbst wenn sie darüber stolpern, wie das zu tun ist, worüber ich spreche, wird das Passwort nicht in einer Reihenfolge zusammengestellt, in der es einfach verwendet werden kann.
Markhunte