🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: de.comp.os.linux
2 messages
2 total messages Started by Martin Schulze Sun, 13 Aug 1995 09:57
[Q] fopen verhindert sete[ug]id - Warum?
#9
Author: Martin Schulze
Date: Sun, 13 Aug 1995 09:57
55 lines
2428 bytes
Hallo Leutz!

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.

Jetzt die Frage: Was passiert an der Stelle, das die Sache kaputt
machen kann? Koennte das ein Fehler im Kernel sein? Ich habe 1.2.11,
libc 4.6.27.

Die "Datei' wird uebrigens auch wieder geschlossen:

  ----------------------------- happs 8<------------------------------
  FILE *f;

  f=fopen("/proc/self/cmdline","r");
  if (!f) {
    fprintf(stderr, "check_pid: Cannot open /proc/self/cmdline, huh?\n");
    return 0;
  }
  fscanf(f,"%s", &mycmdln);
  fclose(f);
  ----------------------------- happs 8<------------------------------

Vielen Dank fuer die zahlreichen Vorschlaege,

       Joey
-- 
   / Martin Schulze  *  joey@infodrom.north.de  *  26129 Oldenburg /
  / +49-441-777884  *  Login&Passwd: nuucp  *  Index: ~/ls-lR.gz  /
 /                                     http://home.pages.de/~joey/
/ The only stupid question is the unasked one                   /
----------------------------------------------------------------
12.8.95: Oldenburger Usenet(ter)-Treffen in Wildeshausen
Re: [Q] fopen verhindert sete[ug]id - Warum?
#10
Author: 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/      ....................(_)/ (_)
~^~~~~~~~^~~~~^~~~~<~^~^~~~^|
--                          | 
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads