[comp.unix.wizards] Unix network security

phil@delta.eecs.nwu.edu (William LeFebvre) (08/17/89)

Now that the CERT has made the problem known, I can put forth an idea
that might help prevent similar "breaches" in the future....

I have an idea for protecting Internet sites from breakins such as the
one that was at the root of the problem just described by CERT.  I
have had this idea for quite some time, and I really can't see
anything seriously wrong with it.

When /bin/login knows it is processing a remote login, why can't it
check the hostname against a list of "allowed" hosts?  If the host is
not in the list, make the login fail in the usual way (encrypt the
password and fail the login) no matter *what* the password is.  Each
user can have his/her own list of "allowed" hosts, just like we do
with ".rhosts".  This file could contain not only host names, but also
a limited form of wildcarding, such as "*.nwu.edu" (which would allow
any host in the "nwu.edu" domain).

What this prevents: random user from random Internet site repeatedly
trying different passwords to try to log into an account over the net.
As I understand it, the person in this most recent rash of invasions
would first find a username (very easy to do) and try obvious
passwords for that name.  Login's 60 second limit is pretty much
unimportant on the Internet:  just type "!!" and keep trying (my
apologies to "sh" users).  Since this is done by /bin/login, ALL forms
of network access are limited, be they rlogin, telnet, or whathaveyou.

How this interferes: as a legitimate user, you can't log in from just
anywhere.  But how often does that happen?  How often do you sit down
at a random Internet site and log in to your primary computer?  If you
know you are about to make a trip to some other location, then plan
ahead and put that location's domain in the list of allowed hosts
before you leave.  But just in case there are some people who really
need the current openness, there should probably be a way for an
individual user to disable the checking for his/her account, such as
adding the line "*" to the list of allowed hosts.

Let's face it: for 99% of the Internet hosts, you don't want a remote
login from that host into your account to succeed.  So why not have a
mechanism in place for disallowing them?  As a concerned sysadmin and
user, I certainly want this kind of protection for my own account, and
especially for my "root" account!

And it's not like this is all that hard to do......

What think you all?



		William LeFebvre
		Department of Electrical Engineering and Computer Science
		Northwestern University
		<phil@eecs.nwu.edu>

roy@phri.UUCP (Roy Smith) (08/18/89)

In <1064@accuvax.nwu.edu> phil@delta.eecs.nwu.edu (William LeFebvre) writes:
> When /bin/login knows it is processing a remote login, why can't it
> check the hostname against a list of "allowed" hosts?

	I can't find any problems with William's suggestion, but would add
one more idea.  Before allowing a shot at a username/password, require a
network access password.  The same thing could be done for dial-up access,
but this is less of a problem.  This password would be picked by the system
administrator, (theoretically) ensuring that it wasn't an obvious one, like
lusers tend to pick.  This is not a new idea, but seems to be implemented
only in very security concious sites; perhaps it should be the default way
vendors ship their systems.  Multiple failures to get the network access
password right should be logged in the system security log.

	Actually, I can find one problem with William's suggestion.  Just
like people tend to pick poor passwords, I suspect many people would put
"*" in their .netaccess files, effectively defeating the whole idea.
-- 
Roy Smith, Public Health Research Institute
455 First Avenue, New York, NY 10016
{att,philabs,cmcl2,rutgers,hombre}!phri!roy -or- roy@alanine.phri.nyu.edu
"The connector is the network"

sms@WLV.IMSD.CONTEL.COM (Steven M. Schultz) (08/18/89)

In article <3942@phri.UUCP> roy@phri.UUCP (Roy Smith) writes:
>In <1064@accuvax.nwu.edu> phil@delta.eecs.nwu.edu (William LeFebvre) writes:
>> When /bin/login knows it is processing a remote login, why can't it
>> check the hostname against a list of "allowed" hosts?
>
>	Actually, I can find one problem with William's suggestion.  Just
>like people tend to pick poor passwords, I suspect many people would put
>"*" in their .netaccess files, effectively defeating the whole idea.

	How about inverting the meaning of ".netaccess"?  By this i
	mean making it a list of hosts/addresses to be rejected.  There
	have been times when it would be desireable to let connections
	from all systems except a list of bad/undesireables.

	Steven M. Schultz
	sms@wlv.imsd.contel.com

mike@thor.acc.stolaf.edu (Mike Haertel) (08/18/89)

In article <3942@phri.UUCP> roy@phri.UUCP (Roy Smith) writes:
>In <1064@accuvax.nwu.edu> phil@delta.eecs.nwu.edu (William LeFebvre) writes:
>> When /bin/login knows it is processing a remote login, why can't it
>> check the hostname against a list of "allowed" hosts?
>
> [ . . . ]
>
>	Actually, I can find one problem with William's suggestion.  Just
>like people tend to pick poor passwords, I suspect many people would put
>"*" in their .netaccess files, effectively defeating the whole idea.

If many people would put "*" in their hypothetical .netaccess files
(and I am certainly among those who would) then attempting to restrict
network logins in such a way is not a good idea to begin with.  Clearly,
systems should be designed to facilitate peoples' preferred ways of
working.  It is better to have to occasionally find and deal with a bad
guy than to cripple everyone just on the offhand chance that a bad guy
might cause trouble.
-- 
Mike Haertel <mike@stolaf.edu>
``There's nothing remarkable about it.  All one has to do is hit the right
  keys at the right time and the instrument plays itself.'' -- J. S. Bach

evans@testmax.ZK3.DEC.COM (Marc Evans Ultrix Q/A) (08/18/89)

> check the hostname against a list of "allowed" hosts?

Chances are that if I were smart enough to modify something like telnet to
trace lognames/passwords, it wouldn't be too hard for me to also know what
the hostnames are, that were communicating. I could also probably know the
internet address and maybe even the hardware address. Assuming that I can
get this information, then it probably isn't too hard for me to set up my
host to mimic the environment used by the authorized user(s).

I am not trying to say that the idea isn't a bad one. It would probably
make it more difficult for people to gain unauthorized access. What I am
saying is that you will probably never remove all possible access means
as long as machines are networked together, and people have access to
either the console or the super users account at some point in time.

==========================================================================
Marc Evans - WB1GRH - evans@decvax.DEC.COM  | Synergytics    (603)893-8481
     Unix/X-window Software Contractor      | 3 Koper Ln, Pelham, NH 03076
==========================================================================

randall@uvaarpa.virginia.edu (Randall Atkinson) (08/18/89)

In article <4614@thor.acc.stolaf.edu>,
	mike@thor.stolaf.edu (Mike Haertel) writes:

>If many people would put "*" in their hypothetical .netaccess files
>(and I am certainly among those who would) then attempting to restrict
>network logins in such a way is not a good idea to begin with.  Clearly,
>systems should be designed to facilitate peoples' preferred ways of
>working.  It is better to have to occasionally find and deal with a bad
>guy than to cripple everyone just on the offhand chance that a bad guy
>might cause trouble.

In short, you are saying that since you won't use a method of
improving security yourself that no one should use that method.

I disagree strongly.  If there were such a mechanism to restrict the
origin of telnet sessions to my accounts, I would use it.  Your
non-use of the mechanism is not sufficient grounds to say that
such a mechanism shouldn't exist.  On the other hand, if you
have an idea for a better mechanism, many of us would like
to hear about it.

scott@zorch.SF-Bay.ORG (Scott Hazen Mueller) (08/18/89)

In article <3942@phri.UUCP> roy@phri.UUCP (Roy Smith) writes:
>Before allowing a shot at a username/password, require a network access
>password.  The same thing could be done for dial-up access, but this is
>less of a problem.

I know that this would pull "features" from both BSD and SysV, but I think
that it would be trivial to do.  If I understand things right, an incoming
remote login (rlogin, telnet) is associated with one of a set of ttyp/pty
devices.  System V provides a "dialup password" facility that could provide
the protection mechanism that Roy suggests, simply by specifying all of
the pseudo-terminals in /etc/dialups and putting the appropriate shell
entries in /etc/d_passwd.  To see if your version of /bin/login has these
features, simply use strings and grep to look for the filenames.
-- 
Scott Hazen Mueller| scott@zorch.SF-Bay.ORG (ames|pyramid|vsi1)!zorch!scott
685 Balfour Drive  | (408) 298-6213   |Mail to fusion-request@zorch.SF-Bay.ORG
San Jose, CA 95111 |No room for quote.|for sci.physics.fusion digests via email

phil@delta.eecs.nwu.edu (William LeFebvre) (08/19/89)

In article <35131@wlbr.IMSD.CONTEL.COM> sms@WLV.IMSD.CONTEL.COM.UUCP (Steven M. Schultz) writes:
>	How about inverting the meaning of ".netaccess"?  By this i
>	mean making it a list of hosts/addresses to be rejected.

I was thinking of having two files, along the lines of the new "cron":
".login.allow" and ".login.deny".  There should probably also be a
provision for a system-wide default, so that for example the sysadmin
could set up all accounts to allow remote logins for "*.eecs.nwu.edu".

You realy don't want just a list of "bad guys".  In my thinking,
anyone I can't explicitly name is suspect.  Not because of the
sysadmin or the users at that particular site (after all, they are
just as susceptible to breakins as I am), but more because it is
easier and quicker for me to name those sites I want to log in from
than those I never want to log in from.

		William LeFebvre
		Department of Electrical Engineering and Computer Science
		Northwestern University
		<phil@eecs.nwu.edu>

phil@delta.eecs.nwu.edu (William LeFebvre) (08/19/89)

In article <4614@thor.acc.stolaf.edu> mike@thor.stolaf.edu (Mike Haertel) writes:
>Clearly,
>systems should be designed to facilitate peoples' preferred ways of
>working.

They should also be designed to insure a certain amount of security to
help guarantee their integrity for the legitimate users.

>It is better to have to occasionally find and deal with a bad
>guy than to cripple everyone just on the offhand chance that a bad guy
>might cause trouble.

The problem with that thinking is that by the time you find out the
bad guy is being bad, it's too late.  We were REAL lucky that Morris's
worm wasn't designed to do any harm, removing files at random for
example.  If it had, then the results would have been absolutely
catastrophic.

What you're saying is: I don't want this lock on my door, because it's
better to catch the burglar after he has broken in and stolen/destroyed
everything than to force myself to lock and unlock the house every day
just on the offhand chance that a bad guy might cause trouble.


		William LeFebvre
		Department of Electrical Engineering and Computer Science
		Northwestern University
		<phil@eecs.nwu.edu>

mike@thor.acc.stolaf.edu (Mike Haertel) (08/19/89)

In article <328@uvaarpa.virginia.edu> randall@uvaarpa.Virginia.EDU (Randall Atkinson) writes:
>In article <4614@thor.acc.stolaf.edu>,
>	mike@thor.stolaf.edu (Mike Haertel) writes:
>
>>If many people would put "*" in their hypothetical .netaccess files
>>(and I am certainly among those who would) then attempting to restrict
>>network logins in such a way is not a good idea to begin with.
>
>In short, you are saying that since you won't use a method of
>improving security yourself that no one should use that method.

That is not at all what I said; learn to read English.  I did not
say "Since I would ... it is not a good idea", I said "If many people
... it is not a good idea."

If a sufficient number of people disabled host name access checking for
their accounts, it would be as if there were no access checking at
all.  If you had access checking turned on, but some other user on your
machine didn't for their account, then your account would be nearly as
exposed as theirs, as a bad guy logged into their account would be
about 95% of the way to yours.  Occasionally for my own amusement I
will attempt to invent a new way to become the superuser; over the past
few years I have found a surprising number of methods.  I am convinced
that if an interloper has access to any one `normal' account on your
machine, that is as good as having access to all, if the interloper is
reasonably talented.  Fortunately most malicious people are more
interested in being nasty than in learning the subtle aspects of the
system.

>I disagree strongly.  If there were such a mechanism to restrict the
>origin of telnet sessions to my accounts, I would use it.

You can easily restrict telnet sessions to your own account; just
write a short login shell that checks the remote host before execing
your real shell.  But if you have a reasonably `secure' password
there is really no reason to waste the effort.
-- 
Mike Haertel <mike@stolaf.edu>
``There's nothing remarkable about it.  All one has to do is hit the right
  keys at the right time and the instrument plays itself.'' -- J. S. Bach

rackow@skeeve.mcs.anl.gov (08/19/89)

I do not think that any of the suggestions at ".netaccess" would have
helped in the most recent version of security breaches.  Since what my
understanding of the problem was/is had to do with legitimate usage
being "taped/bugged" by a bogus telnet program it would do you little good
to have a ".netaccess" file.  I guess it would help from random crackers
at random hosts trying to break passwords.  But in this case- since the
real user wanted access from what proved to be a "untrustworthy" machine
to get to another machine he had (or would have) put the "untrustworthy"
host into the list.  If the cracker was carefully monitoring the log
from his bugus telnet, he could have quickly logged into the remote host
as the user and examined the dot files to see where else he could come from. 
If you were alerted to the problem, you could remove the original bad host,
but would that be enough???

I believe in having minimal amounts of hassle in getting from placce
to place and the greater need and benifits of an "open" network so
take the following and pipe to all flames to /dev/null. ;-)

----Start of paranoid security state------
A possibility for the security paranoid and those with large human
memories would be to make the netaccess file include passwords (or
shadow passwords with the location of the shadow file hidden from the
user as well).  Now you can have a "*" to allow all hosts with a 
password.  When you login from a new host, it forces you to pick a
new "generic" password and adds the new host to the access list and requires
a new password for that host as well.  The passwords can not be duplicated
for any host in the list with all the crazy rules of non-word mixed case
etc., etc....  (Like I said--large human memory.)  You probably would want to
put the access into "syslogd" as well so the admin can keep track of where the
users are and be alerted of possible breaches.  This would make it easier
to knock the bad host out of the list, but the cracker could still have been 
playing havoc with your login for some time.  Of course I never want to
see this implemented, because my memory is not that large.
----End of paranoid security state------

Maybe the real solution would be the little personal crypt boxes that
when you attempt to login give you a string you enter into your box. Your
reply to that string is the output from your little box.  I do not know
how secure these things are, or if you can use one box for more than 
one host, but sometime in the next millenium this problem will probably
be solved and we'll be dealing with a whole new set of problems. ;-)

   Gene Rackow                    email: rackow@mcs.anl.gov
   Math & Computer Science        voice: 312-972-7126
   Argonne National Labs          FAX:   312-972-5986
   9700 S. Cass Ave.
   Argonne, IL  60439

jfh@rpp386.Dallas.TX.US (John F. Haugh II) (08/20/89)

In article <35131@wlbr.IMSD.CONTEL.COM> sms@WLV.IMSD.CONTEL.COM.UUCP (Steven M. Schultz) writes:
>	How about inverting the meaning of ".netaccess"?  By this i
>	mean making it a list of hosts/addresses to be rejected.  There
>	have been times when it would be desireable to let connections
>	from all systems except a list of bad/undesireables.

This could work both ways like netnews sys files are with newsgroups.
The '*' operator could function like an 'all' wildcard, with BANG
being used for negation.  Paranoid, Inc. sites would go

*.paranoid.com
!*

and everyone else could go

!*.paranoid.com
*

;-)

The rule would be to run the .netaccess file until there is a match,
and permit or deny access based on the presence or lack of a '!'.
This implies that Paranoid, Inc. doesn't need the !* at the end
except to feel warm and cozy ;-)
-- 
John F. Haugh II                        +-Quote of the month club: ------------
VoiceNet: (512) 832-8832   Data: -8835  | "Chocolate Teddy Grahams are just
InterNet: jfh@rpp386.cactus.org         |  reincarnated Space Food Sticks."
UUCPNet:  {texbell|bigtex}!rpp386!jfh   +------------     -- Richard Sexton ---

jfh@rpp386.Dallas.TX.US (John F. Haugh II) (08/20/89)

In article <823@zorch.SF-Bay.ORG> scott@zorch.SF-Bay.ORG (Scott Hazen Mueller) writes:
>I know that this would pull "features" from both BSD and SysV, but I think
>that it would be trivial to do.  If I understand things right, an incoming
>remote login (rlogin, telnet) is associated with one of a set of ttyp/pty
>devices.  System V provides a "dialup password" facility that could provide
>the protection mechanism that Roy suggests, simply by specifying all of
>the pseudo-terminals in /etc/dialups and putting the appropriate shell
>entries in /etc/d_passwd.  To see if your version of /bin/login has these
>features, simply use strings and grep to look for the filenames.

The dialup feature is old enough that it should be present in the bowels
of BSD login.

At any rate, the login I wrote last year should be adaptable [ hear that
Dave? ] to BSD with little effort and it has dialups and every other known
feature, useful or not ;-).  Look under 'shadow2' or something like that
in the comp.sources.misc archives near you.
-- 
John F. Haugh II                        +-Quote of the month club: ------------
VoiceNet: (512) 832-8832   Data: -8835  | "Chocolate Teddy Grahams are just
InterNet: jfh@rpp386.cactus.org         |  reincarnated Space Food Sticks."
UUCPNet:  {texbell|bigtex}!rpp386!jfh   +------------     -- Richard Sexton ---

bzs@bu-cs.BU.EDU (Barry Shein) (08/21/89)

Rather than a list of hosts you can log in from (that makes me
uncomfortable, except for root and other priv'd accounts) why not
extend the rlogin .rhosts idea to three levels: No Password, Normal
login, Paranoid login.

By Paranoid login I mean implementing one of these various ideas using
challenges or secondary passwords etc. At least it can be used to
throw some more obstacles in the way.

The problem, ultimately, is that the crackers generally get in via
trap-doors, either out and out bugs or subtleties no one had thought
of before. Including non-computer attacks (like looking through
printouts.)

In addition, whatever you do just challenges the cracker to try a
different solution. Only allowing me to log into your system from
certain sites challenges me to fool your computer into thinking that
I'm coming from one of those sites (which is usually not very hard to
guess if I know anything about the topology of your network or even
just scan mailing lists and/or newsgroups for lists of machines you
seem use, or just finger around, or send mail to yourname@various and
see if I get an error return.)

The security biz is subtle, you have to pick your trade-offs
carefully.

-- 
	-Barry Shein

Software Tool & Die, Purveyors to the Trade
1330 Beacon Street, Brookline, MA 02146, (617) 739-0202
Internet: bzs@skuld.std.com
UUCP:     encore!xylogics!skuld!bzs or uunet!skuld!bzs

jfh@rpp386.Dallas.TX.US (John F. Haugh II) (08/21/89)

In article <36813@bu-cs.BU.EDU> bzs@bu-cs.BU.EDU (Barry Shein) writes:
>The security biz is subtle, you have to pick your trade-offs
>carefully.

The security biz is just downright HARD.  You have to pick your
everything correctly.
-- 
John F. Haugh II                        +-Quote of the month club: ------------
VoiceNet: (512) 832-8832   Data: -8835  |  Speaking of Netnews Administration:
InterNet: jfh@rpp386.cactus.org         |  "If Bill Vajk can do it, anyone can"
UUCPNet:  {texbell|bigtex}!rpp386!jfh   +---------     -- Patricia O Tuama-----

guy@auspex.auspex.com (Guy Harris) (08/22/89)

>The dialup feature is old enough that it should be present in the bowels
>of BSD login.

No, it's not.  It doesn't date back to V7, and the BSD "login" is based
on the V7 one.  The BSD "login" does not have a dialup password feature.

grandi@noao.edu (Steve Grandi) (08/23/89)

In article <3942@phri.UUCP> roy@phri.UUCP (Roy Smith) writes:
>one more idea.  Before allowing a shot at a username/password, require a
>network access password.  The same thing could be done for dial-up access,
>but this is less of a problem.  This password would be picked by the system
>administrator, (theoretically) ensuring that it wasn't an obvious one, like
>lusers tend to pick.  This is not a new idea, but seems to be implemented
>only in very security concious sites; perhaps it should be the default way
>vendors ship their systems.  Multiple failures to get the network access
>password right should be logged in the system security log.
>

Here are patches to the 4.3BSD login.c program implementing a site password
for dialup and network logins.  The feature is activated by putting in a
user named "site" in /etc/passwd.  Hosts listed in /etc/hosts.equiv are not
asked for the site password, nor are UUCP logins.  I have also added better
logging of network and dialup logins and login attempts.


*** login.c.ORIG	Sat Apr 12 16:51:15 1986
--- login.c	Mon Jan  9 09:27:08 1989
***************
*** 39,42 ****
--- 39,43 ----
  #include <grp.h>
  
+ #define UUCICO		"/usr/lib/uucp/uucico"	/* UUCP login shell */
  #define TTYGRPNAME	"tty"		/* name of group to own ttys */
  #define TTYGID(gid)	tty_gid(gid)	/* gid that owns all ttys */
***************
*** 51,54 ****
--- 52,56 ----
  #define	TRUE	-1
  
+ char	site[]	=	"site";
  char	nolog[] =	"/etc/nologin";
  char	qlog[]  =	".hushlogin";
***************
*** 218,222 ****
--- 220,310 ----
  				invalid = TRUE;
  		}
+ 
  		/*
+ 		 * If login is from a dialup or network line then require a
+ 		 * site password.  Make sure it is not an uucp login!
+ 		 * We will explicitly look for trusted hosts here as well.
+ 		 */
+ 		{
+ 			char *ptr, *pp, *type, spass[100];
+ 			char *index();
+ 			struct passwd *spwd;
+ 			FILE *hostf;
+ 			int trusted = -1;
+ 			char ahost[MAXHOSTNAMELEN+1], rhost[MAXHOSTNAMELEN+1];
+ 
+ 			type = stypeof(tty);
+ 
+ 			if (strcmp(type, "network") == 0)
+ 			  {
+ 			  hostf = fopen("/etc/hosts.equiv", "r");
+ 			  /* get remote host name */
+ 			  strcpy(rhost, utmp.ut_host);
+ 			  if (ptr = index(rhost, '.'))	/* truncate name at dot */
+ 				*ptr = '\0';
+ 			  if (usererr != -1)
+ 				trusted = 1;
+ 			  else if ((hostf != NULL) && (hflag == 1  || rflag == 1))
+ 				{
+ 				/* cycle through hosts in /etc/hosts.equiv */
+ 				while (fgets(ahost, sizeof(ahost), hostf))
+ 				  {
+ 				  if (ptr = index(ahost, '\n'))	/* nuke newline */
+ 					*ptr = '\0';
+ 				  if (ptr = index(ahost, ' '))	/* only look at first entry */
+ 					*ptr = '\0';
+ 				  if (ptr = index(ahost, '.'))	/* truncate at dot */
+ 					*ptr = '\0';
+ 				  if (strcmp (ahost, rhost) == 0)
+ 					{
+ 					trusted = 1;
+ 					break;
+ 					}
+ 				  }
+ 				}
+ 			  if (hostf != NULL) fclose(hostf);
+ 			  if (trusted == -1)
+ 				syslog(LOG_INFO, "NETWORK %.*s@%.*s",
+ 				    NMAX,utmp.ut_name, HMAX,utmp.ut_host);
+ 			  }
+ 
+ 			/*
+ 			 * Lets see if this is a dialup or network line.
+ 			 */
+ 			if ((strcmp(type, "dialup") == 0 &&
+ 			  strcmp(pwd->pw_shell, UUCICO) != 0) ||
+ 			  (strcmp(type, "network") == 0 && trusted == -1))
+ 				{
+ 				/*
+ 				 * Check to see if an account by the name
+ 				 * of "site" exists and then if it has
+ 				 * a password.  Then we use the password
+ 				 * for that account.
+ 				 */
+ 				setpwent();
+ 				spwd = getpwnam(site);
+ 				endpwent();
+ 				if (spwd != NULL  && *spwd->pw_passwd != '\0') {
+ 					SCPYN(spass, spwd->pw_passwd);
+ 
+ 					setpriority(PRIO_PROCESS, 0, -4);
+ 					pp = getpass("Site Password:");
+ 					namep = crypt(pp, spass);
+ 					setpriority(PRIO_PROCESS, 0, 0);
+ 					if (strcmp(namep, spass))
+ 						invalid = TRUE;
+ 				}
+ 
+ 			/*see bugs in getpwent(3)*/
+ 			strncpy(lusername, utmp.ut_name, NMAX);
+ 			lusername[NMAX] = 0;
+ 			setpwent();
+ 			if ((pwd = getpwnam(lusername)) == NULL)
+ 				pwd = &nouser;
+ 			endpwent();
+ 			}
+ 		}
+ 
+ 		/*
  		 * If user not super-user, check for logins disabled.
  		 */
***************
*** 366,370 ****
  		namep++;
  	strcat(minusnam, namep);
! 	if (tty[sizeof("tty")-1] == 'd')
  		syslog(LOG_INFO, "DIALUP %s, %s", tty, pwd->pw_name);
  	if (pwd->pw_uid == 0)
--- 454,458 ----
  		namep++;
  	strcat(minusnam, namep);
! 	if (tty[sizeof("tty")-1] == 'd' && strcmp(pwd->pw_shell, UUCICO) != 0)
  		syslog(LOG_INFO, "DIALUP %s, %s", tty, pwd->pw_name);
  	if (pwd->pw_uid == 0)
-- 
Steve Grandi, National Optical Astronomy Observatories, Tucson AZ, 602-325-9228
UUCP: {arizona,decvax,ncar}!noao!grandi  or  uunet!noao.edu!grandi 
Internet: grandi@noao.edu             SPAN/HEPNET: NOAO::GRANDI (NOAO=5355)