[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: gets() en Lenguaje C.



> > Bueno, pues eso. Me ha quedado lo de comentar que la opción "a+" del
> > fopen es pelin peligrosa, si no se verifica que el fichero a abrir no es
> > un enlace simbólico a, por ejemplo a /etc/passwd ( si lo ejecuta como
> > root puede ser divertido... )
>
> Para nada. Este fallito si es de bulto. El kernel no es tonto.
> Los permisos de lectura escritura y ejecucion serán los de /etc/passwd.
>
> ============8<----------(pru_passwd.c)-----------------------------
> (...)
> ============8<----------(pru_passwd.c)-----------------------------
> Permiso denegado
>
> Lo he probado con un link simbólico a una copia de /etc/passwd con
> idéntico contenido y permisos.
>
> lrwxrwxrwx    1 droid    droid          12 ene 15 12:35 link_s_a_passwd -> /etc/passwd2
>
> ll /etc/passwd*
> -rw-r--r--    1 root     root         1434 dic  9 19:47 /etc/passwd
> -rw-r--r--    1 root     root         1434 ene 15 12:30 /etc/passwd2
>
> Los links sibólicos tienen permisos 'lrwxrwxrwx ' porque no se aplican
> nunca.

Pero volviendo a lo que motivó a este hilo - Si estás corriendo esto desde
un programa SUID root, todo permiso vale queso. Y de todos modos, una
pequeña pruebita nunca está de más. En Perl, para confiar en que un
archivo no es una liga bastaría cambiar el


open(FILE,'<archivo') or die 'No pude abrirlo';

por un

if(-l 'archivo') {
    open(FILE,'<archivo') or die 'No pude abrirlo';
} else {
    die 'El archivo es una liga! No quiero problemas...'
}

Saludos,

--
Gunnar Wolf - gwolf@campus.iztacala.unam.mx - (+52-55)5623-1118



Reply to: