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: