Subject: Re: pcvt and TIOCCONS
To: None <perry@piermont.com>
From: Gordon W. Ross <gwr@mc.com>
List: current-users
Date: 04/11/1996 11:59:14
> Date: Wed, 10 Apr 1996 17:45:57 -0400
> From: "Perry E. Metzger" <perry@piermont.com>

> David Carrel writes:
> > Works fine for me.  Make sure you have read access to /dev/console.  (You
> > might need write access too.  It's been a while since I set this up.)
> > Under pcvt, you will log in on /dev/ttyv0 and only that will get chowned to
> > you.
> 
> Ah, that totally explains the problem -- no access to /dev/console
> because it isn't the login tty.
> 
> Anyone have any ideas how this should be done "right" if you are using
> pcvt? The problem is that you don't want to just change the
> permissions permanently on /dev/console; you want them to remain the
> same as the permissions on /dev/ttyv0. Under pccons this isn't an
> issue...
> 
> Perry

This is another manifestation of the "related devices" problem.
When one logs in on the "workstation" device i.e. /dev/ttyv0 on
the PC, or /dev/kd (keyboard/display) on the Sun3, getty will
set the login tty ownership to the login UID, but there are
related devices that also need their ownership set.  Examples:
	Sun3:
		ownership of /dev/kd implies ownership of:
		/dev/fb	(the frame-buffer device)
		/dev/kbd (raw keyboard interface for X)
		/dev/mouse (obviously)
	PC:
		ownership of /dev/ttyv0 implies ownership of
		/dev/mouse, ...

For both machines, if the login device is also where /dev/console
points, then /dev/console could be treated as a "related device"
also, but I'm not sure that is correct from a security standpoint.

CGD suggested that we implement something like the /etc/fbtab
feature from SunOS (but with more generality).  Here is how it
might work.  The file /etc/ttygroup (or whatever name you like)
would contain the following fields:

	login_tty	modes	related_device	#comments

Sample contents of this file for the Sun3 would be:

	/dev/kd  0600	/dev/kbd
	/dev/kd  0600	/dev/mouse
	/dev/kd  0620	/dev/fb
	/dev/kd  0620	/dev/bwtwo0
	/dev/kd  0620	/dev/bwtwo1
	/dev/kd  0620	/dev/cgtwo0
	/dev/kd  0620	/dev/cgthree0
	/dev/kd  0620	/dev/cgfour0
	/dev/kd  0622	/dev/console	#ONLY if console is on "kd"

The above file would be processed by login and getty as follows:

When login authenticates user $UID and has done a chown of the
login tty, it then scans the /etc/ttygroup file for lines with
a matching $login_tty field.   For each match, it should do
chown and chmod calls equivalent to:
	chown $UID   $related_device
	chmod $modes $related_device

Similarly, after a logout, when getty is started on a tty line,
it will scan /etc/ttygroup for lines match the login_tty and will
do chown and chmod calls equivalent to:
	chown 0600  $related_device
	chown root  $related_device
	(Maybe a revoke(2) call as well?)

So, that's how I think it should work.  Does this sound OK?
Are there any volunteers to make login and getty do this?

Gordon