Verwendung von sudo

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
maksimilian
User
Beiträge: 86
Registriert: Freitag 2. November 2018, 20:59

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
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Indem es der Benutzer eingibt und du es dann an den den sudo-Aufruf pipst.
Das Passwort steht dann nicht im Script.
paddie
User
Beiträge: 103
Registriert: Donnerstag 11. Oktober 2018, 18:09

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/
maksimilian
User
Beiträge: 86
Registriert: Freitag 2. November 2018, 20:59

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.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

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).
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Wenn man unbedingt mit sudo arbeiten will. Das ist doch ein typischer Fall für das SUID-Bit.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Auch wahr, ja. Beides Delegation, und IMHO vorzuziehen.
maksimilian
User
Beiträge: 86
Registriert: Freitag 2. November 2018, 20:59

Meint Ihr, dem Skript den Eigentümer root geben und das Setuid-Bit setzen ?
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

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.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
paddie
User
Beiträge: 103
Registriert: Donnerstag 11. Oktober 2018, 18:09

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 ... ;-).
maksimilian
User
Beiträge: 86
Registriert: Freitag 2. November 2018, 20:59

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.
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Es gibt auch pmount.
nezzcarth
User
Beiträge: 1764
Registriert: Samstag 16. April 2011, 12:47

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.
maksimilian
User
Beiträge: 86
Registriert: Freitag 2. November 2018, 20:59

__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.
maksimilian
User
Beiträge: 86
Registriert: Freitag 2. November 2018, 20:59

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.
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

@maksimilian: Da Du ja immer noch sehr geheimnisvoll tust, was Du eigentlich machen willst, kann man Dir halt auch nicht zielgerichtet helfen.
Antworten