Neni bezpecnost jako bezpecnost (was Re: Linux a bezpecnost)
Pavel Machek
pavel na elf.ucw.cz
Sobota Březen 21 14:00:09 CET 1998
Hi!
> > Linux (uz z toho duvodu ze je to Unix) neni 'bezpecny' system. Je to
> > system ve kterem se kouka na bezpecnost. Ale zkuste jako user joe
> > pustit program (dostali jste ode me binarku) tak aby vam nemohla neco
> > seskodit. Nepo se pokuste jako joe dat prava k souboru prave jen
> > uzivateli matylda. Pak taky muzete zkusit dat uzivateli joe pravo na
> > ping a nikomu jinymu (aha, a rozume, bez suid wrapperu).
> >
> > Tohle je pravdepodobne to co chtel puvodni autor rict.
>
> Ach jo, podjdme vymyslet sytem, kde setuid programy budou setuid programy,
> /tmp adresar /tmp adresar a mali chlupati tvorove z Alpha Centauri budou
> mali chlupati tvorove z Alpha Centauri.. Docela by mne zajimalo, jak tohle
> resi sytemy, ktere udajne bezpecne jsou (VMS). Pry tam existuji podobne
> problemy jako u Unixu se suid programy..
Tak v tom pripade je VMS udelan spatne ;-).
Mam neco na /tmp. Je to hnusny hack, ale rad bych slysel nazor
konference (kdyz uz jste to nakousli).
Pavel
/*
* Ok, we'll close some of those nasty /tmp races.
*
* Copyright 1998 Pavel Machek <pavel na ucw.cz>,
* distribute under General Public License, version 2
*
* To use: gcc safetmp.c -shared -o libsafetmp.so
* then either export LD_PRELOAD=/full_path/libsafetmp.so
* or if you are root and *DARING*
* echo "/full_path/libsafetmp.so" > /etc/ld.so.preload
*
*/
#include <stdarg.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <syslog.h>
int
open( const char *pathname, int flags, ... )
{
int ret;
const char *s;
mode_t mode = 0;
va_list ap;
va_start( ap, flags );
if (flags & O_CREAT)
mode = va_arg( ap, mode_t );
s = pathname;
if (*s == '/') {
while( *s == '/' )
s++;
if ((!strncmp( s, "tmp/", 4)) &&
((flags & (O_CREAT|O_TRUNC)) == (O_CREAT|O_TRUNC))) {
syslog( LOG_INFO, "Unsecure open: %d tries to open(%s,%d,%d)\n", getpid(), pathname, flags, mode );
unlink( pathname );
flags |= O_EXCL;
}
}
return __open( pathname, flags, mode );
va_end( ap );
return ret;
}
--
I'm really pavel na atrey.karlin.mff.cuni.cz. Pavel
Look at http://atrey.karlin.mff.cuni.cz/~pavel/ ;-).
Další informace o konferenci Linux