GID eines LAUFENDEN prozesses ändern?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Bachsau
Beiträge: 64
Registriert: 06.05.2011 02:48:13

GID eines LAUFENDEN prozesses ändern?

Beitrag von Bachsau » 09.05.2011 05:03:28

Also bei mir ist folgendes Sache: Ich habe einen vServer auf Basis von OpenVZ gebucht. Wird dieser gestartet, ruft es den init-Prozess mit GID 501 auf. :roll:
Das vererbt sich natürlich auf alles was danach kommt, und so tauchen immer wieder Dateien mit dieser GID im System auf. Einzig wenn man das Ding dann über "reboot" in der Konsole noch einmal neu startet, bekommt man GID 0. Was ich schon versucht habe ist, setgid auf /sbin/init zu legen. Leider wird das wohl überschrieben.

Natürlich laufen die Scripte dennoch als root. Und da root ja bekanntlich alles darf, hab ich mir gedacht, könnte man vielleicht ein init-script reinsetzen, was die GID ändert, bevor weitere Prozesse gestartet werden. Nur wie mach ich das? Google fällt da nicht wirklich was zu ein. :(

Okay, ich gebs zu... Probleme hatte ich durch dieses Verhalten noch keine. Aber es stört mich irgendwie. ;)

Edit: Habe jetzt zumindest mal eine Gruppe mit der ID im System angelegt, damit sie belegt ist, und nicht irgendwann von einem Dämon registriert wird, der dann mehr darf als vorgesehen.
Zuletzt geändert von Bachsau am 09.05.2011 21:51:17, insgesamt 1-mal geändert.

Benutzeravatar
MustrumRidcully
Beiträge: 124
Registriert: 16.06.2005 04:11:24
Lizenz eigener Beiträge: GNU General Public License
Wohnort: berlin

Re: GID eines LAUFENDEN prozesses ändern?

Beitrag von MustrumRidcully » 09.05.2011 13:42:21

Code: Alles auswählen

SETGID(2)                                                         Linux Programmer's Manual                                                        SETGID(2)

NAME
       setgid - set group identity

SYNOPSIS
       #include <sys/types.h>
       #include <unistd.h>

       int setgid(gid_t gid);

DESCRIPTION
       setgid() sets the effective group ID of the calling process.  If the caller is the superuser, the real GID and saved set-group-ID are also set.
so where's your problem?
Volk ist Opium für eine Religion.

Benutzeravatar
Bachsau
Beiträge: 64
Registriert: 06.05.2011 02:48:13

Re: GID eines LAUFENDEN prozesses ändern?

Beitrag von Bachsau » 09.05.2011 19:15:16

Das ist C, oder? Lies nochmal die Frage. ;)

Es geht nicht darum, dass ein selbst geschriebenes Programm seine eigene GID ändert, sondern die eines anderen, bzw. des Elternprozesses.

Benutzeravatar
MustrumRidcully
Beiträge: 124
Registriert: 16.06.2005 04:11:24
Lizenz eigener Beiträge: GNU General Public License
Wohnort: berlin

Re: GID eines LAUFENDEN prozesses ändern?

Beitrag von MustrumRidcully » 09.05.2011 21:33:43

Bachsau hat geschrieben:Das ist C, oder? Lies nochmal die Frage. ;)
k 8)
das macht's ein bisschen komplizierter, aber auch nicht viel. was du brauchst, ist ein wrapper, der erst seine eigene gid manipuliert und dann den serverprozess startet. falls das nicht mit dem aktuellen prozess funktioniert, hilft ein beherztes forken. in etwa so:

Code: Alles auswählen

#!/usr/bin/perl -w
use strict;
use POSIX;

if (fork) {                # d.h. wir sind im elternprozess
    sleep 1;               # warte auf das ende von exec()
}
else {                      # d.h. wir sind im kindprozess
    setgid 0;               # gid setzen
    exec /path/to/openvz_binary;
}
das würde ich so nur nicht auf nem production-rechner einsetzen, da braucht es etwas sensibleres als sleep().
Volk ist Opium für eine Religion.

Benutzeravatar
whisper
Beiträge: 3379
Registriert: 23.09.2002 14:32:21
Lizenz eigener Beiträge: GNU Free Documentation License
Kontaktdaten:

Re: GID eines LAUFENDEN prozesses ändern?

Beitrag von whisper » 09.05.2011 21:47:09

sleep sollte, -- und ist -- so realisiert, das zwischendurch in der Warteschleife durch wait() jederzeit Rechenzeit an andere Prozesse abgeben werden kann. Auch auf einem P System sollte es zu keinen Problemen kommen.
Alter ist übrigens keine Ausrede, nur Erfahrung, die sich stapelt. 😉

Benutzeravatar
Bachsau
Beiträge: 64
Registriert: 06.05.2011 02:48:13

Re: GID eines LAUFENDEN prozesses ändern?

Beitrag von Bachsau » 09.05.2011 21:49:56

Wahrscheinlich hat Google Recht, und es geht einfach nicht. ;)

Wenn so eine VM startet, ruft er /sbin/init auf. Ich kann also frühestens in /etc/rcS.d/S00x was machen. Von da aus müsste ich die GID von init ändern. Was willste da forken?

Benutzeravatar
MustrumRidcully
Beiträge: 124
Registriert: 16.06.2005 04:11:24
Lizenz eigener Beiträge: GNU General Public License
Wohnort: berlin

Re: GID eines LAUFENDEN prozesses ändern?

Beitrag von MustrumRidcully » 09.05.2011 22:06:47

naja, du forkst, gibst dem kindprozess die gid 0 und startest mit dieser gid die vm. dann kriegt die vm die gid des kindprozesses.
Volk ist Opium für eine Religion.

Benutzeravatar
Bachsau
Beiträge: 64
Registriert: 06.05.2011 02:48:13

Re: GID eines LAUFENDEN prozesses ändern?

Beitrag von Bachsau » 09.05.2011 22:24:00

Wenn ich Zugriff auf den Host hätte, hätte ich das Problem wohl nicht. Ich bin bloß Kunde bei 'nem Hoster der diese OpenVZ-Container als VPS vermietet. Auf dem Host fork ich gar nix. ;)

Du kannst dir so eine OpenVZ-Büchse wie eine chroot-Umgebung vorstellen, nur dass noch sehr viel mehr abgetrennt wird: Speicher, Prozesse, Variablen, usw.
Zuletzt geändert von Bachsau am 09.05.2011 22:34:28, insgesamt 1-mal geändert.

Benutzeravatar
MustrumRidcully
Beiträge: 124
Registriert: 16.06.2005 04:11:24
Lizenz eigener Beiträge: GNU General Public License
Wohnort: berlin

Re: GID eines LAUFENDEN prozesses ändern?

Beitrag von MustrumRidcully » 09.05.2011 22:30:13

jo, da isser dann gefallen, mein groschen. ^^
da sehe ich auch keine andere lösung als auf /etc zu jonglieren. aber vielleicht fragste einfach mal den hoster, was das mit der 501 auf sich hat. vielleicht haben die sich was dabei gedacht. ;)
Volk ist Opium für eine Religion.

Benutzeravatar
Bachsau
Beiträge: 64
Registriert: 06.05.2011 02:48:13

Re: GID eines LAUFENDEN prozesses ändern?

Beitrag von Bachsau » 09.05.2011 23:01:30

Hat wohl was mit dem Control Panel, aber okay. Die GID zu vergeben sollte zumindest reichen, dass kein anderer Prozess sie für irgendetwas verwendet.

Antworten