GID eines LAUFENDEN prozesses ändern?
GID eines LAUFENDEN prozesses ändern?
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.
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.
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.
- 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?
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.
Volk ist Opium für eine Religion.
Re: GID eines LAUFENDEN prozesses ändern?
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.
Es geht nicht darum, dass ein selbst geschriebenes Programm seine eigene GID ändert, sondern die eines anderen, bzw. des Elternprozesses.
- 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?
kBachsau hat geschrieben:Das ist C, oder? Lies nochmal die Frage.
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;
}
Volk ist Opium für eine Religion.
- 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?
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.
Re: GID eines LAUFENDEN prozesses ändern?
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?
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?
- 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?
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.
Re: GID eines LAUFENDEN prozesses ändern?
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.
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.
- 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?
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.
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.
Re: GID eines LAUFENDEN prozesses ändern?
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.