Seite 1 von 1

stdout nach permission drop loggen

Verfasst: Dienstag 14. Oktober 2014, 09:58
von horko
Moin,

hab ein kleines Problem und nicht wirklich eine Lösung dafür parat.
Und zwar habe ich eine Logger Class die mir stdout loggt was auch klappt, allerdings
würde ich gerne die permissons droppen nachdem ich das script gestartet habe.
Denke mal dass das Problem ist das ich das script als root ausführe und dann die rechte droppe.

Code: Alles auswählen

import sys
import os

class Logger(object):
    def __init__(self, filename="Default.log"):
        self.terminal = sys.stdout
        self.log = open(filename, "a")
    
    def write(self, message):
        self.terminal.write(message)
        self.log.write(message)
try:
    sys.stdout = Logger('/tmp/event.logger')

def drop_permissions(uid_name='updateservice', gid_name='users'):
    import pwd
    import grp
    nonpriv_uid = pwd.getpwnam(uid_name).pw_uid
    nonpriv_gid = grp.getgrnam(gid_name).gr_gid
    os.setgroups([])
    os.setgid(nonpriv_gid)
    os.setuid(nonpriv_uid)
    del pwd
    del grp

    start_update()

def start_update():
    print 'test'

if __name__ == "__main__":
    drop_permissions()
Jemand ne Idee wie ich ihn dazu bringen kann den stdout zu loggen nachdem ich die permissions neu gesetzt habe?

Re: stdout nach permission drop loggen

Verfasst: Dienstag 14. Oktober 2014, 10:17
von Sirius3
@horko: Dein Programm hat Syntaxfehler (try ohne except), 'del' ist überflüssig und imports schreibt man normalerweise an den Anfang.
Die Rechte werden nur beim Öffnen der Datei geprüft, das heißt, ein Filehandle weiß nichts mehr davon, Du kannst also auch mit dem unprivilegierten User in eine Datei schreiben, die nur von root schreibbar ist.

Re: stdout nach permission drop loggen

Verfasst: Dienstag 14. Oktober 2014, 13:07
von horko
@Sirius3:

Danke für den Einwand, hab den except irgendwie vergessen beim abtippen des beispiels.
Allerdings ja hast recht jetzt gehts, vorhin hat er irgendwie nichts geloggt obgleich output auf stdout war, jetzt gehts, konfused.
Aber gut solange es jetzt läuft.
Warum ist der del überflüssig? Ich brauch pwd & grp nur an der einen Stelle und nachher läuft das ganze script via threading bis jemand die screen session beendet.
Daher dachte ich macht es keinen großen Sinn die drin zu behalten, was spricht gegen mein Vorgehen?

Re: stdout nach permission drop loggen

Verfasst: Dienstag 14. Oktober 2014, 14:26
von Sirius3
@horko: bei pwd und grp handelt es sich um ganz normale lokale Variablen, die sowieso wieder gelöscht werden, wenn die Funktion zu Ende ist.

Re: stdout nach permission drop loggen

Verfasst: Dienstag 14. Oktober 2014, 14:33
von BlackJack
@horko: Ergänzend: Die Module bleiben trotzdem geladen. Das heisst auch das importieren in der Funktion ändert da nichts dran. Also kann man sie auch wie man das erwarten würde am Anfang des Moduls importieren. Falls es Dir wirklich um das bisschen Speicherplatz dieser beiden Module gehen sollte, dann ist Python die falsche Sprache, denn da wird deutlich mehr Speicher ”verschwendet”.