Hallo Ratti, * Ratti schrieb am 02.Apr.2002:
Ratti:
ich möchte auf meinem apache einige cgi-scripte verwenden, die tief ins System eingreifen und daher root-Rechte benötigen.
Bernd Brodesser:
man sudo man sudoers man su1
Na, wie geschrieben: Das langt nicht... Siehe unten.
Das SUID und auch das SGID Bit funktioniert nicht bei Skripten, sondern nur bei Programmen.
SCH.... Gibt es eine Möglichkeit, das zu umgehen? Weil:
Übrigens wird "sudo" mein Problem nicht lösen. Wieso nicht? sudo muß natürlich im Skript stehen.
Das dürfte nicht langen.
Die cgis, die ich installieren will, sind für die Rechneradministration gedacht, enthalten komplette Webmailsystem usw...
Der root-Zugriff wird nicht nur benötigt, indem man mal eben das Starten von $BEFEHL per sudoers.conf erlaubt. Es muss auch, beispielsweise, mit open-Befehlen auf die Postfächer aller User zugegriffen werden können und dergleichen. Also echter, voller, unbeschränkter rootzugriff.
Was verstehst Du unter open-Befehle? Ich kenne open nur als ein Systemaufruf. Oder bei perl. Wenn Du vor jedem Befehl ein sudo setzt, dann müßte es meiner Meinung nach doch gut sein, oder etwa nicht?
Das ist mit sudo&Co. doch nicht möglich, wenn ich das richtig begriffen habe. Da lassen sich nur einzelne Befehle freigeben.
Du kanst an geeigneter Stelle auch einen * setzen, dann darfst Du alle Befehle verwenden. Den Befehl führst Du als root aus. Wenn ich es richtig sehe, dann setzt sudo sogar den realen User als root, während ein SUID-Bit nur den effektiven User auf root setzt, den realen aber beibehält. Ich wüßte nicht, was da nicht funktionieren sollte.
Wer hat sich diese beknackte Beschränkung der Skripte ausgedacht?
Erst einmal ist es kompliziert es einem Skript auch zu gestatten. Nun ja, nicht sonderlich, aber man muß da Arbeit für investieren. Die bash selber, die das Skript interpretiert müßte das SUID-Bit gesetzt haben, und dann müßte die bash das abfragen, ob das SUID-Bit gesetzt ist und dann müßte es sich selber zu den Besitzer des Skriptes machen, dafür müßte es vorher root sein, daher braucht es selber das SUID-Bit.
Für normale Kommandozeile könnte ich ja noch ein kurzes C-Gerüst davor hängen, dann wäre es ein Binary, das einen Shell-Befehl absetzt. Aber für ein cgi kommt ja die ganze Ausgabeumleitung dazu.
Wäre in C auch nicht so kompliziert. Bernd