Wenn root dem nicht zugestimmt hätte, hätte die Datei kein SUID-root-Flag.
Beweis?
Beweis, dass dein Privilegierungsservice nicht manipuliert wurde?
Spätestens wenn jemand physischen Zugang zum Computer hat und nen USB-Stick anschließen kann oder wenn das Dateisystem per LAN gemountet wird oder wenn bei einem Micro-Kernel-OS ein beliebiges Programm selber ein Dateisystem (das nur die eigene Executable um SUID-root-Flag bereichert enthält) anbietet und dem VFS-Service unterschiebt (in Linux gibt es FUSE) oder .....
Wenn jemand physisch vom USB-Stick bootet, hast du verloren. Das SUID-Flag kannst du nur als Root setzen, via LAN wird es ebenfalls nicht exportiert (höchstens bei NFS, aber da ist normalerweise root==nobody, geht also auch nicht). Und es gibt Mountoptionen wie z.B. nosuid oder noexec, die nicht vertrauenswürdige Dateisysteme vor SUID-Root-Dateien schützen.
Konkret musst du als Administrator dafür sorgen, dass bestimmte Dateisysteme vertrauenswürdig immer sind (da ist schließlich das System drin), das musst du bei deiner Lösung aber auch. Alle anderen Dateisysteme (USB-Sticks, CDs, ...) müssen immun sein. Und da sonst keiner am Flag rumspielen kann, ist die Angriffsfläche nicht besonders groß - der Nutzen aber sehr groß bei simplem System.
Ich halte dieses Konzept immer noch für einen Designfehler. Mir ist klar das typische Computer zu der Zeit als POSIX erdacht wurde noch in einem extra Raum standen und die normalen User nur per Terminal ran konnten.
Wie willst du dein OS denn schützen? Mit einem ersetzbaren Trusted-Computing-Server, am besten noch "exec" mittels TPM-Modul an das System binden?
Bisher wurde jedes System geknackt.
Der Vorteil eines permanent laufenden Services ist der das man dafür keinen Mechanismus benötigt der es ermöglicht einen Kind-Prozess mit root-Rechten zu erstellen obwohl man selber keine root-Rechte hat und auch root dem nicht explizit zugestimmt hat.
Ich finde den Gedanken, jeden Pups in einen Service auszulagern falsch. Auch mit modernen Ideen wie Start/Stop "on demand" oder sowas. Sowas ist Ressourcenvergeudung und treibt den Aufwand hoch. Insbesondere Basisfunktionalität, die du speziell ausschließlich einem einzigen Service zur Verfügung stellen müsstest ist da m.M.n. falsch aufgehoben.
Die Idee, das im Dateisystem zu regeln, finde ich garnicht so verkehrt.
Ich schon, das Dateisystem ist IMHO dafür da die Daten zuverlässig zu speichern und nicht dafür Rechte durch zu setzen.
Och, so rechte wie "lesbar", "schreibbar", Eigentümer gehören schon an die Dateien gebunden. Oder möchtest du für jeden Nutzer ein eigenes Dateisystem (Container) benutzen?
Ich bin mir nicht sicher ob mein Lösungsansatz besser ist aber der Weg über das Dateisystem bereitet mir einfach etwas subjektives Bauchweh.
Er ist aufwändiger und tut im Endeffekt das gleiche.
Du hast nur einen Angriffspunkt mehr: Den Privilegienservice. Ansonsten kann man trotzdem die privilegierten Anwendungen angreifen, das ändert also nix.
PS: Hab gestern nacht ständig einen HTTP 503 bekommen...
Gruß,
Svenska