Hola,
No hagas un link al fichero, sino a un script PHP que devuelva el contenido del fichero, via un readfile() (
www.php.net/readfile). En el script validas que el usuario esta identificado. Los ficheros de verdad los ocultas fuera del directorio raiz del sitio, o en una carpeta configurada en el servidor web de forma que su contenido no sea accesible via HTTP, solo via sistema operativo.
Saludos.
PD: Busca en el foro, se ha comentado muchas veces.