Wie führe ich ein Programm als root ohne "sudo" aus?

10

Ich habe ein bestimmtes Binärprogramm unter OS X, das nur als Root ausgeführt werden kann.

Ich habe es satt, sudojedes Mal, wenn ich es aufrufe und das Passwort eingebe, ein Präfix vorzustellen , und möchte, dass es automatisch als root ausgeführt wird, wenn ich es regelmäßig aufrufe , ohne nach einem Passwort zu fragen.

Der Eigentümer des Programms ist root und seine Gruppe ist rad.

Ich habe versucht chmod ug+s, die Benutzer-ID und die Gruppen-ID bei der Ausführung auf root / radius zu setzen, aber wenn ich das Programm ohne sudo ausführe, beschwert es sich immer noch, dass es nur mit sudo oder als root ausgeführt werden kann.

UrEl
quelle
Kann es zu einem bestimmten Zeitpunkt oder zu einem bestimmten Zeitpunkt ausgeführt werden?
user151019
9
Alte Unix-Gurus aus alter Zeit würden vorschlagen, dass das regelmäßige Aufrufen einer Nur-Root-Operation von Hand bedeutet, dass Sie es falsch machen. Kann das automatisiert werden? Oder als Daemon laufen? Weitere Einzelheiten könnten Vorschläge für Lösungen anderer Art bringen.
dmckee --- Ex-Moderator Kätzchen
Ist das Programm tatsächlich im Besitz von root? Setuid / gid verwendet den Benutzer / die Gruppe der Datei.
Daniel Beck
2
… Wobei "mehr Details" auch Dinge wie die Frage enthält, ob sich die Binärdatei dieses Programms auf einem NFS-gemounteten Volume befindet und ob Sie die nosuidMount-Option verwenden ... zusätzlich dazu, warum Sie regelmäßig ein Programm als Superuser ausführen müssen.
JdeBP
@dmckee Viele Mac-Benutzer führen Serversoftware auf ihrer Workstation aus und es wird häufig so eingerichtet, dass Root für Dinge erforderlich ist, die es wirklich nicht benötigen sollten. Die Neukonfiguration eines LAMP-Stacks für die Ausführung ohne Root ist jedoch ein Problem. Auf der anderen Seite ist es auch ein Ärgernis, Apache 20 Mal am Tag neu zu starten und jedes Mal Sudo zu tippen. Dies ist eine einfache Lösung.
Abhi Beckert

Antworten:

2

Sind Sie sicher, dass das Programm, das Sie ausführen möchten, tatsächlich eine Binärdatei und kein Shell-Skript ist? Die meisten Shells ignorieren Suid-Skripte, weil sie wirklich sehr, sehr schwer sicher zu machen sind. Eine einfache Möglichkeit zur Überprüfung besteht darin, den fileBefehl im Programm zu verwenden.

KeithB
quelle
17

Eine halbe Lösung für Ihr Problem:

Fügen Sie in der sudoers-Datei Folgendes hinzu:

username ALL= NOPASSWD: /path/to/command

Dann können Sie über die Befehlszeile Folgendes eingeben:

sudo command

und es wird der Befehl ausgeführt, ohne nach Ihrem Passwort zu fragen. Dieser Befehl wird als root ausgeführt.

Beachten Sie, dass Sie den Benutzernamen durch Ihren tatsächlichen Benutzernamen ersetzen müssen.

Walter
quelle
Erstaunt, die beste Antwort unten zu finden. Vielen Dank!
CDR
Zu Ihrer Information, um die andere Hälfte zu lösen (ohne den Befehl sudo eingeben zu müssen), erstellen Sie einen Shell-Alias, der sudo im Befehl enthält (wie surm = sudo rm "$ @")
Walter
4

Wenn Sie es wirklich als Daemon aus irgendeinem Grund nicht aufrufen kann (diese Frage würde in diesem Fall relevant sein) , diese Methode kann zusammen gehackt werden, aber es ist ziemlich schmutzig, und haupt nicht sicher.

Das Konzept besteht darin, es mit einem AppleScript zu starten. Sie müssen zunächst wissen, wie Sie den Prozess über die Befehlszeile aufrufen (was bedeutet, dass Sie alle Einstellungen vornehmen müssen, wenn Sie sudo bereits verwenden). Sie starten diesen Prozess mit dem do shell scriptBefehl und anstatt sudo zu verwenden, schreiben Sie Ihre Anmeldeinformationen in das AppleScript:

do shell script "/path/to/your/executable/here" user name "me" password "mypassword" with administrator privileges

Ich wiederhole den Teil darüber, dass dies unsicher ist: Dies bedeutet, dass Ihre Administrator-Creds in einfachem Text gespeichert werden. Wenn möglich, sollten Sie einen Weg finden, dies als LaunchDaemon in den Hintergrund zu rücken.

NReilingh
quelle
Ein Weg zu "Runas" für Ihren Mac :) Danke
Vlueboy
2

Unter OSX befindet sich das Programm in / usr / local / bin / YourProgramName ... Um dieses Problem zu beheben, führen Sie den folgenden Befehl aus: So ändern Sie die Benutzer-ID / Gruppen-ID für in den Dateien verwurzelte Dateihierarchien anstelle nur der Dateien selbst .

sudo chown -R $(whoami) /usr/local/bin/

... rufen Sie dann im Terminal Ihren Programmnamen $ YourProgramName auf

Abdimuna
quelle
Mein Problem war, dass die installierten Programme ohne die richtigen Berechtigungen installiert wurden, also habe ich dies in den Verzeichnissen dieser Programme ausgeführt und jetzt laufen sie ohne sudo einwandfrei. Vielen Dank!
Atwixtor
0

Du kannst tun

sudo tcsh

das wird Sie in eine Wurzel-Shell setzen.

DTest
quelle
0

Es sieht so aus, als ob das Programm selbst prüft, ob es mit ID = 0 ausgeführt wird

Jet
quelle
1
… Was natürlich der Fall sein wird, wenn es sich um einen Set-UID-Superuser handelt (wobei die oben genannten Bedenken beiseite gelassen werden). Was Sie wahrscheinlich sagen wollen, ist, dass das Programm auf echte UID 0 prüft und nicht nur auf effektive UID 0.
JdeBP
-1

Du könntest sudo chown YOUR-USERNAME-HERE BINARY-NAME-HERE.

Trotzdem stimme ich dem Kommentar von dmckee voll und ganz zu.

dag729
quelle
Wie würde das etwas helfen? ⁠
Scott