Datenspeicherung als root

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
Ubuntuxer
User
Beiträge: 42
Registriert: Donnerstag 17. April 2008, 15:49

Montag 23. Juni 2008, 17:09

Hi Leute,
Ich habe eine Frage zur Datenspeicherung in Python. Gibt es die Möglichkeit das file-Objekt als root zu benutzen, sodass aber nur diese eine Aktion mit root Rechten bearbeitet wird. Ich möchte das Daemon Cron verwenden, weshalb ich in die Datei /etc/crontab bearbeiten muss. Diese Datei lässt sich aber nur mit root Rechten beschreiben.
Notlösung:
Anderes Pythonscript mit os.system als root öffnen, welche dann die Datei bearbeiten soll.

Ich hoffe ihr könnt mir helfen. :)
nummer9
User
Beiträge: 6
Registriert: Montag 23. Juni 2008, 12:19

Montag 23. Juni 2008, 17:17

Es ist möglich, aber sehr sehr unsauber. afair geht das nur via os.system()

Da ist diese Lösung sauberer: Änder die Rechte der datei so, dass auch der Benutzer, der sie ausführt, zugriff drauf hat. (entweder mit chown oder mit chmod, oder chgrp)

Ich verstehe nicht, warum du die crontab mit einem pyscript bearbeiten willst. Wenn es sich um ein admin-programm handelt, solltest du den script eh als root ausführen.

Grüße
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Montag 23. Juni 2008, 18:10

Ubuntuxer hat geschrieben:Ich möchte das Daemon Cron verwenden, weshalb ich in die Datei /etc/crontab bearbeiten muss.
Hallo Ubuntuxer!

Jeder Benutzer kann auch seine eigene Crontab haben. Diese befinden sich normalerweise unter */var/spool/cron/crontabs* und werden mit dem Befehl ``crontab -u <benutzer> -e`` editiert.

Siehe ``man cron``.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Ubuntuxer
User
Beiträge: 42
Registriert: Donnerstag 17. April 2008, 15:49

Montag 23. Juni 2008, 21:45

Da ist diese Lösung sauberer: Änder die Rechte der datei so, dass auch der Benutzer, der sie ausführt, zugriff drauf hat. (entweder mit chown oder mit chmod, oder chgrp)
greift ins System ein und könnte es vielleicht unsicher machen?
Jeder Benutzer kann auch seine eigene Crontab haben. Diese befinden sich normalerweise unter */var/spool/cron/crontabs* und werden mit dem Befehl ``crontab -u <benutzer> -e`` editiert.
Wenn ich crontab -e ausführe, öffnet sich bei mir im Terminal direkt der Editor Nano; ich weiß aber nicht wie ich mit Python die Eingabe und das speichern machen kann. :(
Deshalb wollte ich direkt die crontab Datei verändern. doch aus irgendeinem Grund kann ich auch die Datei /var/spool/cron/crontabs/johannes nicht ohne root Rechte ändern. obwohl ich als Benutzer johannes angemeldet bin. (Hardy Heron)
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

Montag 23. Juni 2008, 22:18

Man kann sich die crontab ja vorher ausgeben lassen (``crontab -l``), ändern und dann wieder setzen (``crontab $datei`` (oder eben stdin oder whatever)). Und ``crontab -e`` startet den Editor, der in der EDITOR-Umgebungsvariable angegeben ist.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Dienstag 24. Juni 2008, 08:47

Ubuntuxer hat geschrieben:Wenn ich crontab -e ausführe, öffnet sich bei mir im Terminal direkt der Editor Nano
Hallo Ubuntuxer!

Dieser Befehl

Code: Alles auswählen

echo "10 10 * * * uuu" | crontab -u gerold -
erstellt eine neue Crontab für den Benutzer "gerold" oder überschreibt seine Crontab mit der Ausgabe des echo-Befehls.

Du kannst dir das in Python zu nutze machen. Nimm ``subprocess`` um eine Verbindung zu ``crontab -u gerold -`` ("gerold" ist der Benutzername; der Bindestrich ist wichtig) aufzunehmen. Dann kannst du über STDIN des Progrogramms den neuen Inhalt der Crontab bestimmen.

Der Befehl ``crontab -u gerold -l`` gibt den Inhalt einer evt. existierenden crontab für den Benutzer "gerold" aus.

Die Parameter "-u" und der Benutzername können und sollen natürlich weggelassen werden, wenn der Befehl nicht als root ausgeführt wird.

Ein Beispiel:

Code: Alles auswählen

#!/usr/bin/env python

import subprocess

# Alte Eintraege holen
args = ["crontab", "-u", "gerold", "-l"]
proc = subprocess.Popen(args, stdout = subprocess.PIPE)
items = proc.stdout.readlines()
proc.stdout.close()

# Neuen Eintrag hinzufuegen
items.append("20 20 * * * xxxxxxxx\n")

# Alte und neue Eintraege schreiben
args = ["crontab", "-u", "gerold", "-"]
proc = subprocess.Popen(args, stdin = subprocess.PIPE)
proc.stdin.writelines(items)
proc.stdin.close()
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Ubuntuxer
User
Beiträge: 42
Registriert: Donnerstag 17. April 2008, 15:49

Dienstag 24. Juni 2008, 14:21

Ooh danke Gerold, gleich die Komplettlösung;
funktioniert super, :)
Ubuntuxer
User
Beiträge: 42
Registriert: Donnerstag 17. April 2008, 15:49

Donnerstag 26. Juni 2008, 18:11

Ich habe das Programm anacron gefunden, Scheint eine gute Alternative zu cron sein, welche auch funktioniert wenn der PC ausgeschaltet ist.
Doch ich habe noch zwei Fragen:
1) Wenn ich in eine crontab @daily schreibe, funktioniert das dann, wie bei anacron, also auch wenn der PC zwischendurch aus ist?
2) Kann man einen anacrontab auch ohne sudo Rechte anlegen?

PS: Das ganze soll eine Art Update Funktion werden.
lunar

Donnerstag 26. Juni 2008, 21:34

Ubuntuxer hat geschrieben:Ich habe das Programm anacron gefunden, Scheint eine gute Alternative zu cron sein, welche auch funktioniert wenn der PC ausgeschaltet ist.
Das ist keine Alternative, dass ist eine Ergänzung. Anacron ist für das Zusammenspiel mit vixie-cron entwickelt worden, um ihn eben um diese Funktionalität zu erweitern. Eine echte Alternative wäre beispielsweise "fcron".
Antworten