Seite 1 von 1

Verwendung von sudo

Verfasst: Dienstag 18. Februar 2020, 16:19
von maksimilian
Hallo Ihr,

wie ist es möglich in einem Python-Skript ein Shell-Kommando mit sudo aufzurufen (subprocess ?), ohne dass das Passwort im Skript stehen muss ?

Ich verwende Python in einem aktuellen Mint-System.

maksimilian

Re: Verwendung von sudo

Verfasst: Dienstag 18. Februar 2020, 16:24
von sparrow
Indem es der Benutzer eingibt und du es dann an den den sudo-Aufruf pipst.
Das Passwort steht dann nicht im Script.

Re: Verwendung von sudo

Verfasst: Dienstag 18. Februar 2020, 16:24
von paddie
Das hat eher wenig mit python zu tun, sondern eher mit der Konfiguration von sudo.

hier wird eigentlich recht gut beschrieben wie du das konfigurieren kannst:

https://kofler.info/sudo-ohne-passwort/

Re: Verwendung von sudo

Verfasst: Dienstag 18. Februar 2020, 18:10
von maksimilian
Danke für die Antworten. Ich hatte vergessen zu erwähnen, dass das Skript als Dämon im Hintergrund laufen und keine Eingaben erfordern soll. Ich versuche es mal mit sudoers.

Re: Verwendung von sudo

Verfasst: Dienstag 18. Februar 2020, 18:20
von __deets__
Achtung, wenn du das so machst, dann kann ggf. ein wenig privilegierter Nutzer sich zu umfassende Rechte schaffen. Es kann ggf. besser sein, *mehrere* Daemonen zu schreiben, die dann miteinander kommunizieren. Und einer darf dann die privilegierte Aktion taetigen. Damit kann dann zumindest "nur" das getan werden (exploits mal aussen vor, die gelten aber ja immer).

Re: Verwendung von sudo

Verfasst: Dienstag 18. Februar 2020, 18:25
von Sirius3
Wenn man unbedingt mit sudo arbeiten will. Das ist doch ein typischer Fall für das SUID-Bit.

Re: Verwendung von sudo

Verfasst: Dienstag 18. Februar 2020, 18:26
von __deets__
Auch wahr, ja. Beides Delegation, und IMHO vorzuziehen.

Re: Verwendung von sudo

Verfasst: Dienstag 18. Februar 2020, 19:32
von maksimilian
Meint Ihr, dem Skript den Eigentümer root geben und das Setuid-Bit setzen ?

Re: Verwendung von sudo

Verfasst: Dienstag 18. Februar 2020, 19:38
von __blackjack__
Also ich würde ja die Finger vom Setuid-Bit lassen und das über sudoers lösen das der Benutzer der den Daemon ausführt den einen Befehl mit `sudo` ausführen kann. Und der Benutzer sollte möglichst auch nur den Daemon ausführen.

Noch besser wäre natürlich wenn der überhaupt keine root-Rechte bräuchte.

Re: Verwendung von sudo

Verfasst: Dienstag 18. Februar 2020, 19:48
von Sirius3
Keiner weiß hier, was Du machen willst, also, welches Shell-Kommando hier ausführen willst, und warum das welche Rechte braucht. Wenn Du hier Hilfe willst, solltest Du mal mit der Sprache rausrücken.

Re: Verwendung von sudo

Verfasst: Mittwoch 19. Februar 2020, 08:26
von paddie
Was mir noch eingefallen ist.
Ich hatte mal ein kleines Python-Programm was mir die fetchmailrc nach Änderungen in einer DB neu erstellt hat. Ich hatte das so gelöst, dass ich die neue fetchmailrc in /tmp erstellt habe...zusätzlich ist ein cronjob gelaufen, der alle, glaube, 2 Minuten geguckt hat ob eine neue Datei vorhanden ist und diese dann nach /etc kopiert den Daemon neu gestartet und die Datei dann in /tmp gelöscht hat.

Als ich dann alles fertig hatte bin ich dann auf inotify gestossen ... ;-).

Re: Verwendung von sudo

Verfasst: Mittwoch 19. Februar 2020, 19:58
von maksimilian
Meine Frage ist allgemein gestellt und bezieht sich auf kein spezielles Kommando. Ich bin dem sudoer-Vorschlag gefolgt. Eintrag für den Benutzer, unter welchem das Skript läuft mit NOPASSWD und Eintrag des Kommandos, welches verwendet wird (in meinem Fall mount).

Danke für Eure Anregungen.

Re: Verwendung von sudo

Verfasst: Mittwoch 19. Februar 2020, 20:08
von Sirius3
Gerade bei mount sollt man die Mittel nutzen, die mount eh schon anbietet, um unterpriveligierten Nutzern das Mounten bestimmter Medien zu erlauben. Bei einem unkontrollierten mount kannst Du gleich root-Zugriff komplett frei geben.

Re: Verwendung von sudo

Verfasst: Mittwoch 19. Februar 2020, 20:30
von __deets__
Es gibt auch pmount.

Re: Verwendung von sudo

Verfasst: Mittwoch 19. Februar 2020, 22:14
von nezzcarth
maksimilian hat geschrieben: Mittwoch 19. Februar 2020, 19:58 Eintrag für den Benutzer, unter welchem das Skript läuft mit NOPASSWD und Eintrag des Kommandos, welches verwendet wird (in meinem Fall mount).
Auch beim Freischalten einzelner Befehle über sudo muss man sehr vorsichtig sein, da man sehr schnell Hintertüren öffnet, an die man nicht denkt. Sirius3 hat das schon für mount angesprochen, aber das betrifft auch diverse andere Befehle. Als generische Lösung (wenn es keine bessere spezifischere gibt) bietet es sich daher meiner Meinung nach an, die auszuführenden Befehle mitsamt aller Parameter so gut es geht zu kapseln, etwa in kurzen Shell-Skripten (die natürlich nur root bearbeiten darf), und dann nur diese zuzulassen.
paddie hat geschrieben: Mittwoch 19. Februar 2020, 08:26 Als ich dann alles fertig hatte bin ich dann auf inotify gestossen ... ;-).
Unter systemd-basierten Systemen kann man dafür auch Path-Units verwenden.

Re: Verwendung von sudo

Verfasst: Donnerstag 20. Februar 2020, 18:37
von maksimilian
__deets__ hat geschrieben: Mittwoch 19. Februar 2020, 20:30 Es gibt auch pmount.
Gilt wohl nur für Block-Devices und damit auch nicht für cifs.

Re: Verwendung von sudo

Verfasst: Donnerstag 20. Februar 2020, 18:43
von maksimilian
paddie hat geschrieben: Mittwoch 19. Februar 2020, 08:26 Als ich dann alles fertig hatte bin ich dann auf inotify gestossen ... ;-).
Guter Tipp ! Das werde ich mir genauer anschauen. inotify könnte nützlich sein für Watchdog-Funktionen. Wäre toll, wenn das auch netzweit im LAN funktionieren würde.

Re: Verwendung von sudo

Verfasst: Donnerstag 20. Februar 2020, 18:46
von Sirius3
@maksimilian: Da Du ja immer noch sehr geheimnisvoll tust, was Du eigentlich machen willst, kann man Dir halt auch nicht zielgerichtet helfen.