🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: de.comp.os.linux
Article #10

Re: [Q] fopen verhindert sete[ug]id - Warum?

#10
From: Kai Thoene
Date: Mon, 14 Aug 1995 15:14
64 lines
2954 bytes
In article <40kib6$7cn@finlandia.infodrom.north.de>, 
joey@finlandia.infodrom.north.de says...
>
>Ich habe ein Problem mit einem Programm, das als root gestartet wird
>und dann seine uid/gid aendern soll.
>
>Diese Anweisung
>
>  ------------------------- happs 8<--------------------------
>  f=fopen("/proc/self/cmdline","r");
>  ------------------------- happs 8<--------------------------
>
> hat zu einem spaeteren Zeitpunkt zur Folge, dass Fehler auftreten:
>
>  ------------------------- happs 8<--------------------------
>  if (seteuid(RUN_UID)) fprintf (stderr, "uid: errno %d\n", errno);
>  if (setegid(RUN_GID)) fprintf (stderr, "gid: errno %d\n", errno);
>  ------------------------- happs 8<--------------------------
>
>seteuid laeuft ohne Fehler durch. In der Prozesstabelle (/proc und ps)
>laeuft das Programm aber immer noch als root und nicht als RUN_UID.
>
>Das setegid produziert einen Fehler, errno=1 (EPERM /* Operation not
>permitted */).
>
>Wenn ich das fopen weglasse bzw. vorher aus der Funktion returniere,
>habe ich an der sete[ug]id Stelle kein Problem.
>

1. [Prozesstabelle] ps zeigt die *real* user id, die natuerlich mit
   setuid() geaendert werden sollte.

2. [Fehler: setegid] setegid() sollte auf jeden Fall vor (!) seteuid()
   aufgerufen werden, da sich der Prozess evtl. selbst die Erlaubnis
   fuer ein nachfolgendes setegid() nimmt.

   if( setgid(RUN_GID) ) ...;    /* real group id */
   if( setuid(RUN_UID) ) ...;    /* real user id */
   if( setegid(RUN_GID) ) ...;   /* effective group id */
   if( seteuid(RUN_UID) ) ...;   /* effective user id */

  --
     EPERM     For setuid() and seteuid() the effective  user  of
               the calling process is not super-user, and the uid
               parameter does not match either the real or  saved
               user  IDs.   For setgid() and setegid() the effec-
               tive user  of  the  calling  process  is  not  the
               super-user,  and  the gid parameter does not match
               either the real or saved group IDs.
  --

Zu der Sache mit dem Datei-handle faellt mir z.Zt. nichts ein.

Gruss,
  Kai.

-- 
  Kai Thoene                email: Kai.Thoene@Materna.DE
  Dr. Materna GmbH, Vosskuhle 37, 44141 Dortmund
  (From: ... see above - may be incorrect!)        __o
                                                 _`\<,_
                  __o/      ....................(_)/ (_)
~^~~~~~~~^~~~~^~~~~<~^~^~~~^|
--                          | 
Technical Details
Message-ID: <40np93$287@peanuts.Materna.DE>
Path: arc1-ca.pugleaf.net!Materna.DE!root
References: <40kib6$7cn@finlandia.infodrom.north.de>

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!Materna.DE!root
From: Kai.Thoene@Materna.DE (Kai Thoene)
Newsgroups: de.comp.os.linux,de.comp.lang.c
Subject: Re: [Q] fopen verhindert sete[ug]id - Warum?
Date: 14 Aug 1995 15:14:43 GMT
Organization: Dr. Materna GmbH
Message-ID: <40np93$287@peanuts.Materna.DE>
References: <40kib6$7cn@finlandia.infodrom.north.de>
NNTP-Posting-Host: is_es46.materna.de
Mime-Version: 1.0
X-Newsreader: WinVN 0.93.14