*BSD News Article 7817


Return to BSD News archive

Newsgroups: comp.unix.bsd
Path: sserve!manuel.anu.edu.au!munnari.oz.au!spool.mu.edu!uunet!mdisea!uw-coco!nwnexus!wjones
From: wjones@halcyon.com (Warren Jones)
Subject: [386BSD] Running Kermit SUID
Message-ID: <1992Nov17.062542.12140@nwnexus.WA.COM>
Summary: Fix allows Kermit to run SUID, comments solicited.
Keywords: Kermit 386BSD SUID
Sender: sso@nwnexus.WA.COM (System Security Officer)
Organization: Northwest Nexus Inc. (206) 455-3505
Date: Tue, 17 Nov 1992 06:25:42 GMT
Lines: 64

Has anyone else tried to make Kermit run SUID uucp under 386BSD ?
Here's a fix I had to make to get it working the way I wanted.
I'm using the newly released version 5A(186) from watsun.cc.columbia.edu.
(You can find it in /kermit/bin/cku186.tar.Z.)

This is what seems like the proper setup to me:

    chown uucp kermit           # uucp owns kermit ...
    chown uucp /dev/com*        #  ... and the serial ports ...
    chown uucp /var/spool/uucp  #  ... and the lock directory.
    chmod u+s  kermit           # Kermit runs SUID uucp

However, I found that on startup, Kermit trys to open /dev/tty
to get the tty modes, and the open() fails when the EUID is uucp.
This happens even though /dev/tty is world read and writeable:

    crw-rw-rw- 1 root  wheel  1, 0 Nov 16 16:25 /dev/tty

Everything seems to work OK if we make Kermit defer opening
/dev/tty until it's made the EUID the same as the real UID.

A patch follows.  Comments are welcome.
In particular, I'm hoping someone can tell me whether this
behavior of 386BSD is a bug or a feature.

BTW, I'm running 386BSD 0.1.24, and haven't installed any
kernel patches.

-------------------------- cut here ----------------------------------
*** Save/ckutio.c	Tue Nov  3 10:48:06 1992
--- ckutio.c	Mon Nov 16 17:47:05 1992
***************
*** 917,923 ****
--- 917,929 ----
      int x;
  
      conbgt(0);				/* See if we're in the background */
+ #ifndef __386BSD__
+ /* 386BSD doesn't allow us to open /dev/tty in congm() if the */
+ /* EUID == uucp.  It's not clear whether this is a bug or a feature */
+ /* but it seems to work if we defer the call to congm() until */
+ /* after the call to priv_ini() ... see below. */
      congm();				/* Get console modes */
+ #endif
      signal(SIGALRM,SIG_IGN);		/* Ignore alarms */
  
  #ifdef ultrix
***************
*** 939,944 ****
--- 945,955 ----
  	if (x | 4) fprintf(stderr,"Fatal: C-Kermit setuid to root!\n");
  	exit(1);
      }
+ #ifdef __386BSD__
+ /* If running SUID uucp under 386BSD, we can't open /dev/tty */
+ /* in congm() until after the call to priv_ini(). */
+     congm();				/* Get console modes */
+ #endif
      return(0);
  }
  
-- 
Warren Jones
<wjones@halcyon.com>