Applescript Rufen Sie einen bestimmten Benutzer und ein bestimmtes Kennwort auf

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?

Bitte stellen Sie sicher, dass Sie das zweite Update in meiner Antwort lesen

Antworten (1)

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.

Geben Sie hier die Bildbeschreibung ein

Versuchen Sie, die Datei main.scpt im Anwendungspaket zu öffnen:

Geben Sie hier die Bildbeschreibung ein

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.

Was ich in diesem Beispiel zeige, ist für meine ursprüngliche Frage völlig irrelevant. Ich bitte die Schüler, eine Reihe komplexer Befehle auszuführen, und keiner von ihnen hat Administratorzugriff (das Setup unterscheidet sich von dem, was ich oben habe). Dies war mein Testgelände, das ich beim Erstellen dieses Skripts verwendet habe.
OK. Ich habe das etwas deutlicher gemacht, damit nicht mehr Leute es lesen wie ich.
@ DanijelJ Ich habe meine Antwort aktualisiert
Exzellent! Das ist GENAU das, was ich versucht habe. Ich habe versucht, alle Dokumente zu durchsuchen, konnte keine zufriedenstellende Antwort finden und habe eine Vielzahl von Tests ausprobiert, um dies zum Laufen zu bringen. Danke schön! Und ja, ich bin mir bewusst, dass ich den Benutzernamen/Pass in einer App verwende, aber wenn diese Studenten eine Anwendung zurückentwickeln können, um das herauszuholen, werden wir sie sofort einstellen, um für unser Entwicklerteam auf dem Hauptcampus zu arbeiten.
Ich bin froh, dass die Antwort geholfen hat, aber lassen Sie sich nicht täuschen, dass es einige Mühe kosten wird, sie zu knacken. Es beinhaltet eher Querdenken als Reverse Engineering.
@ DanijelJ Ich weiß, dass Sie sich nicht allzu sehr darum kümmern, aber andere finden es vielleicht hilfreich. Ich habe jetzt eine Idee eingefügt, wie man es etwas schwieriger machen kann, das Passwort zu lesen, indem man es dekonstruiert. Die Methode kann noch komplexer werden, wenn Sie darüber nachdenken, aber in der aktuellen Form kann sie es tun.