Subject: Re: Advice on setting up a shell server
To: None <netbsd-help@netbsd.org>
From: Kevin Brunelle <kruptos@mlinux.org>
List: netbsd-help
Date: 01/16/2007 21:40:47
On Tuesday 16 January 2007 19:51, James K. Lowden wrote:
> Isaac Wagner-Muns wrote:
> > I'm trying to set up a small shell account server for students at my
> > school, and it seems to be quite a vast undertaking, mostly because
> > of the security issues brought up by letting semi-anonymous people
> > access my machine.

I run a machine like this for 6-9 remote users... all who I know, in passing, 
and I trust, for the most part.  You will want some way to verify the users 
setting up accounts (although you could automate it).  The important thing is 
to make sure that you have conservative limits set in login.conf for those 
users.  And to patch religiously.  Also, install audit-ports and never EVER 
install a package with a vulnerability.  And patch your packages as soon as 
you know of a problem.

This doesn't make you immune... but it does reduce the risk.  Keep tabs on any 
users who are using a lot of resources or are going things you don't expect 
with your system.

Mount /tmp and /var as "noexec and nosuid" and /usr as "read-only".  And /home 
needs to be mounted "nosuid" just in case (mount it noexec if you don't want 
them having easy to use shell scripts -- they can still create them).  Yes, 
make all these partitions.  And do obey these recommendations because they 
stop a lot of problems in their tracks.

Make all the compilers "chmod o-x" and either change their group for people 
who need to use them or leave it as wheel and don't let any remote users 
compile things.  And if you need to let a user compile something... change 
the group and then add them to the new group.  It makes it a lot harder for 
them to do nasty things... not impossible but harder. 

Then make sure you get a secure copy of the files in /etc/mtree... on another 
system... so you have at least a sha1 to compare if you think a file might 
have changed.  You may also want to do other checksums for all the files on 
the system (before you add any users) and keep it in a secure spot.  Just as 
a way to verify.

Hmm, that's all I can think of off the top of my head.  Also, as soon as you 
patch or upgrade... make sure you also get a fresh copy of the new mtree 
files and other checksums if you keep them.

This method isn't 100% secure but it's a strong step in the right direction 
and certainly stops most amateurs.

>
> > Is having publicly runnable shell scripts insecure?
>
> Not as such.  Shell scripts ship with NetBSD in /usr/bin.  What you want
> to avoid is shell scripts that are setuid and owned by root.  That's known
> to be unsecurable.

This is also the reason they don't run as root, even when setuid root.  Test 
it... shell scripts can't be setuid.  If you want a shell script to run as 
root (or whatever other user) all the time, you need to go out of your way to 
create a setuid wrapper program for it.  I've had the need before (for a 
non-root account) and know that it's not a trivial task.

-Kevin