Date: Fri, 22 Jan 2010 17:14:47 +0000 From: Matthew Seaman <m.seaman@infracaninophile.co.uk> To: DAve <dave.list@pixelhammer.com> Cc: 'User Questions' <freebsd-questions@freebsd.org> Subject: Re: Securing cgi scripts Message-ID: <4B59DD07.6020505@infracaninophile.co.uk> In-Reply-To: <4B59BC65.3040905@pixelhammer.com> References: <4B59BC65.3040905@pixelhammer.com>
next in thread | previous in thread | raw e-mail | index | archive | help
This is an OpenPGP/MIME signed message (RFC 2440 and 3156)
--------------enigD92050B13EBD01CF22853909
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: quoted-printable
DAve wrote:
> Good morning all,
>=20
> I have been working on an issue here where I am being asked if we can
> support letting clients install and run their own CGI scripts on a
> shared vhost. I have tried sbox and cgiwrap, both which worked, but the=
y
> cannot stop the one test of reading the /etc/passwd file.
>=20
> Forgive my ignorance here, but I thought CGIs were gone long ago and
> have not messed with them in over ten years. If a client really needs a=
> specfic CGI script hosted, I check it out thoroughly and install it
> where they cannot reach it. Those instances are very very rare.
>=20
> It looks to me like the only way to keep a client contained is to run
> their CGIs chrooted. Would this be correct?
CGI programs run in the OS filesystem context, so there's generally nothi=
ng
to stop them reading /etc/passwd. They are essentially the same level of=
risk as an unprivileged user login account. =20
Mind you, pretty exactly the same thing applies if you let your customers=
supply their own PHP or perl or other programs which run using an interpr=
eter
embedded in the apache process: they can access anything accessible to th=
e
web server process. =20
I should point out that unprivileged users are *meant* to be able to
read /etc/passwd -- it's /etc/master.passwd that has the sensitive stuff
in it.
In fact, the bigger problem with running CGI programs from a shared
webserver is that they generally all run using the same security
credentials; those of the web server (www:www by default) -- which
potentially lets all your different customers tread on each others toes. =
suexec(8) is the stock solution to that problem.
If you really want to keep your customers properly separated, then send
them to jail(8). While giving them each a separate jail with a full=20
install of apache etc. certainly does work, it implies dedicating at leas=
t
an IP per customer. You could avoid that by still keeping a single apach=
e=20
instance but use something like an fCGI process per customer running each=
in=20
separate jails hanging off the loopback i/f.
Cheers,
Matthew
--=20
Dr Matthew J Seaman MA, D.Phil. 7 Priory Courtyard
Flat 3
PGP: http://www.infracaninophile.co.uk/pgpkey Ramsgate
Kent, CT11 9PW
--------------enigD92050B13EBD01CF22853909
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="signature.asc"
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.14 (FreeBSD)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
iEYEAREIAAYFAktZ3Q0ACgkQ8Mjk52CukIzsLgCeLK7hxMFppZDBH7KLGxrZJGYF
1ysAn1FO6VVXMjDeHhIohK/vyY9XiwFw
=5a2X
-----END PGP SIGNATURE-----
--------------enigD92050B13EBD01CF22853909--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4B59DD07.6020505>
