Autologout of unused terminals

Robert C. White Jr. rwhite at nusdhub.UUCP
Fri Dec 9 11:11:57 AEST 1988


in article <17885 at glacier.STANFORD.EDU>, jbn at glacier.STANFORD.EDU (John B. Nagle) says:
> 
> 
>       The solution used in some high-security environments is to build a
> physical fence around the terminal and its user.  Opening the gate in
> the fence forces an immediate logout.

But every time your boss comes to visit you have to explain why you
arn't even loggend in ;-)

>       This is more than most sites would want.  However, it might not
> be unreasonable in some installations to protect priviledged terminals
> in this way.

There is a shell-over-login aproach which I have deduced, but not
tried.  you move "/bin/login" to "/bin/login2" and make the following
program into "/bin/login":  (general description, not code fragment I
leave the actual code as an excersize to the reader)


static	int	loginpid;

void	killsession()
{
/* kill loginpid and MAKE SHURE it's DEAD depend on Death-of-parent
for exit */
	while (0 == 0) {
	kill(loginpid,9);
	sleep(3);
	}
}

void	watcher()
{
	/* get current time in seconds
	   fstat stdin */
	/* if stdin_time - current_time > allowable then killsession
*/
}

main(argc,argv)
int	argc;
char	*argv[];
{
	if (fork()==0) {
		loginpid = getppid();
/*	SET SIGNAL TO CALL Killsession on any significant signaling
	event to prevent user from killing processes and voiding the
	intent of this file.  Death-of-parent should not be trapped
	to allow abortive exit.  			*/
	watcher();
		}
	else	{
		execv("/bin/login",argv);
		exit(-1);
		}
}

WHY THIS WORKS:  After the fork the PARENT process is exec(ed) to
login which fufills login's requirement that its parent be init.
The child process is set to be ended when the parent dies for any
reason, so the program needs no exit state.  If the child process
receives any kind of signal it will kill the login process/first
shell/primary environment/whatever which was it's parent.  If fstat
reveals that the communication port has not been read-from or
written-to within an acceptable time (via fstat of stdin, do not use
stat on /dev/tty as this is often updated by many people) the
login/etc. process is killed; and the child process is signaled to
death in the process.

Warning:  MAKE SHURE YOU HAVE one (or more) terminal logged in as root, and
another one on which to preform the test of the installation.  If you
don't do this you could end up not logged in as anything, and have no
working /bin/login to let you in al all.  THIS CAN BE A REAL
NIGHTMARE!

Disclaimer:  I didn't write the program, I only came up with the idea.
IF it dosn't work, or it damages your system, don't look at me!  I
DIDN'T WRITE IT and I'm not in the habbit of taking the blame for
things I didn't do.

Rob.



More information about the Comp.unix.wizards mailing list