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