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
Verwendung von sudo
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/
hier wird eigentlich recht gut beschrieben wie du das konfigurieren kannst:
https://kofler.info/sudo-ohne-passwort/
-
- 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.
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).
-
- 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 ?
- __blackjack__
- User
- Beiträge: 14051
- 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.
Noch besser wäre natürlich wenn der überhaupt keine root-Rechte bräuchte.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
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 ...
.
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 ...

-
- 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.
Danke für Eure Anregungen.
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.
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.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).
Unter systemd-basierten Systemen kann man dafür auch Path-Units verwenden.paddie hat geschrieben: Mittwoch 19. Februar 2020, 08:26 Als ich dann alles fertig hatte bin ich dann auf inotify gestossen ....
-
- User
- Beiträge: 86
- Registriert: Freitag 2. November 2018, 20:59
Gilt wohl nur für Block-Devices und damit auch nicht für cifs.
-
- User
- Beiträge: 86
- Registriert: Freitag 2. November 2018, 20:59
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.paddie hat geschrieben: Mittwoch 19. Februar 2020, 08:26 Als ich dann alles fertig hatte bin ich dann auf inotify gestossen ....