[linux-l] /etc/group neu einlesen

olafBuddenhagen at gmx.net olafBuddenhagen at gmx.net
Mo Jan 7 04:21:58 CET 2008


Hallo,

On Sun, Jan 06, 2008 at 03:01:46AM +0100, Steffen Dettmer wrote:
> * olafBuddenhagen at gmx.net wrote on Thu, Jan 03, 2008 at 21:39 +0100:

> > Unter klassischen UNIX-Systemen (einschlieszlich Linux) ist es
> > naemlich meines Wissens nicht moeglich, einem laufenden Prozess
> > zusaetzliche Berechtigungen zu geben. 
> 
> Aber sowas (zusätzliche Rechte) geht doch mit Linux zumindestens über
> seteuid() und setguid(), oder? Obwohl das und capabilities natürlich
> eine Sonderform von zusätzlichen Rechten sind, da sie ja schonmal bzw.
> potentiell ständig verfügbar sind.

Eben, die Rechte sind von Anfang an vorhanden. Man muss nur ein wenig
tricksen um sie anwenden zu koennen, da man unter UNIX immer nur eine
UID benutzen kann.

Tatsachlich neue Rechte zu vergeben, ist etwas voellig anderes.

> > Das kann auf verschiedenen Wegen geschehen. Wenn ein Prozess zum
> > Beispiel das Passwort eines anderen Users bekommt, kann er die ID
> > dieses Nutzers annehmen -- so kann man zum Beispiel "su" ohne suid
> > implementieren, oder einen ssh-Server.
> 
> Ja, ich könnte mir eine Art capability vorstellen, dann müssten Sachen
> wie login nicht mit root-Rechten gestartet werden.

Der Punkt ist, dass man fuer login eigentlich *gar keine* speziellen
Rechte braeuchte -- weder volle root, noch durch "Capabilities"
aufgespaltene.

> > Eine andere Moeglichkeit ist, dass ein Prozess, der die
> > zusaetzlichen Berechtigungen bereits hat, sie an andere Prozesse
> > weitergeben kann. In dem hier Beschriebenen Fall zum Beispiel
> > koennte man allen laufenden KDE-Prozessen die neue Gruppe geben.
> 
> Klingt aber ziemlich gefährlich (und nicht nur wegen dem KDE ;)).
> Irgendwie fehlt dem die Eleganz der Schlichtheit. Obwohl es vielleicht
> Probleme/Aufgaben gibt, wo so ein Feature viel spart...

Im Gegenteil: Das ist, im Gegensatz zum UNIX-Modell, ausgesprochen
schlicht und elegant -- zumindest werden Dir das Jonathan Shapiro und
andere Verfechter von Capability-Systemen erklaeren... :-) (Achtung: Das
was bei Linux als "Capabilities" bezeichnet wird, hat mit "echten"
Capabilities kaum was zu tun!)

Zur Erklaerung: Hurd ist kein reines Capability-System, aber die
UNIX-Mechanismen werden weitgehend auf einem Capability-Unterbau
implementiert. Dadurch besteht unter anderem die Moeglichkeit, im
laufenden Betrieb zusaetzliche UIDs zu verpassen.

Ich bin nicht so bewandert in der Theorie von Capabilities; aber nach
meinem Verstaendnis ist es kein Problem, dass man laufenden Prozessen
beliebige zusaetzliche Capabilities verpassen kann. Die einzige denkbare
Gefahr waere, dass man (als Angreifer) Kontrolle ueber zwei Prozesse
besitzt, die einzeln harmlos sind, aber mehr anrichten koennen, wenn sie
ihre Capabilities austauschen. Das ist aber nicht wirklich ein Problem,
denn fuer einen Capability-Austausch muss bereits irgendein
Kommunikationskanal zwischen beiden bestehen -- und sobald das der Fall
ist, kann einer auch einfach als Proxy fuer den anderen auftreten, was
den gleichen Effekt hat wie eine Weitergabe der Capabilities...

> > (Disclaimer: Ich habe nicht ausprobiert, wie gut das in der Praxis
> > funktioniert; hatte bisher keinen Anlass dazu... Oder vielleicht
> > haette ich sogar Anlass gehabt, habe aber nicht daran gedacht, dass
> > es die Moeglichkeit gibt :-) )
> 
> Du meinst, so eine Art chown auf laufende Prozesse zu probieren? Wo
> wäre sowas nützlich?

Verstehe Deine Frage nicht... Das Anwendungsbeispiel war doch Thema des
Threads: Allen Prozessen der laufenden Session die neue Gruppe zu
verpassen.

-Olaf-



Mehr Informationen über die Mailingliste linux-l