Hallo,
ich bin gerade dabei, ein Initscript zu schreiben und stehe dabei vor dem Problem, dass die Binary nicht als Root laufen soll. Eine Möglichkeit wäre z.B. SUID zu verwenden, was ja auch prima klappt. Allerdings würde mich auch interessieren, wie es normale, andere Anwendungen lösen? z.B. beim Apache konnte ich im Initscript keinen Benutzerwechsel o.ä. erkennen und bei der Binary ist auch nicht das SUID-Bit gesetzt. Trotzdem läuft Apache nicht als root. Es ist mir ein kleines Rätsel. :)
Grüße
Initscript: Binary als anderer Nutzer ausführen
Re: Initscript: Binary als anderer Nutzer ausführen
Das Rätsel lüftet sich, wenn man in den Quellcode einer solchen Applikation reinschaut. Am Beispiel von Lighttpd sieht man recht schön, dass die Applikation mit setuid() bzw. setgid() zu einem niedriger privilegiertem User wechselt (Zeilen 752ff in server.c). Bei einem Webserver ist dieses Vorgehen übrigens unumgänglich, da sich ein Prozess nur an Ports < 1024 binden kann, wenn er unter UID 0 läuft. Lighty und Apache allokieren also erst den Socket und geben dann ihre root-Rechte ab.sticki wrote:beim Apache konnte ich im Initscript keinen Benutzerwechsel o.ä. erkennen und bei der Binary ist auch nicht das SUID-Bit gesetzt. Trotzdem läuft Apache nicht als root. Es ist mir ein kleines Rätsel. :)
Wenn man es im Init-Skript tun muss, weil der zu startende Dienst einen solchen Mechanismus nicht implementiert hat (=> Drecksdienst!), dann ist su -c Dein Freund (aber vorsicht, auf richtiges Quoting achten!).
“Some humans would do anything to see if it was possible to do it. If you put a large switch in some cave somewhere, with a sign on it saying 'End-of-the-World Switch. PLEASE DO NOT TOUCH', the paint wouldn't even have time to dry.” — Terry Pratchett, Thief of Time
-
Roger Wilco
- Posts: 5923
- Joined: 2004-05-23 12:53
Re: Initscript: Binary als anderer Nutzer ausführen
Mit POSIX Capabilities (-> `man 7 capabilities`) bzw. konkret CAP_NET_BIND_SERVICE stimmt das Gott sei dank nur noch eingeschränkt. Wenn man dem Webserver Binary die entsprechene Capability mit `setcap` gibt, geht es auch komplett ohne Root-Rechte. ;)jfreund wrote:Bei einem Webserver ist dieses Vorgehen übrigens unumgänglich, da sich ein Prozess nur an Ports < 1024 binden kann, wenn er unter UID 0 läuft.
Details unter http://www.linux-magazin.de/layout/set/ ... full/21868
Außer `su` könnten auch `sudo` (je nach Geschmack) oder `start-stop-daemon` nützlich sein.jfreund wrote:Wenn man es im Init-Skript tun muss, weil der zu startende Dienst einen solchen Mechanismus nicht implementiert hat (=> Drecksdienst!), dann ist su -c Dein Freund (aber vorsicht, auf richtiges Quoting achten!).
Re: Initscript: Binary als anderer Nutzer ausführen
ok, es wird also über den quellcode gelöst, danke.
Ich werde es wohl mit su -c probieren, bei ersten Tests hat das ganz gut funktioniert.
Grüße
Ich werde es wohl mit su -c probieren, bei ersten Tests hat das ganz gut funktioniert.
Grüße
