Initscript: Binary als anderer Nutzer ausführen

Bash, Shell, PHP, Python, Perl, CGI
sticki
Posts: 11
Joined: 2003-03-13 00:11

Initscript: Binary als anderer Nutzer ausführen

Post by sticki »

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
User avatar
daemotron
Administrator
Administrator
Posts: 2639
Joined: 2004-01-21 17:44

Re: Initscript: Binary als anderer Nutzer ausführen

Post by daemotron »

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. :)
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.

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

Post by Roger Wilco »

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.
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. ;)

Details unter http://www.linux-magazin.de/layout/set/ ... full/21868
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!).
Außer `su` könnten auch `sudo` (je nach Geschmack) oder `start-stop-daemon` nützlich sein.
sticki
Posts: 11
Joined: 2003-03-13 00:11

Re: Initscript: Binary als anderer Nutzer ausführen

Post by sticki »

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