Anterior Siguiente Indice

10. Accesos.

Podemos configurar los accesos: en primer lugar, es posible especificar un número máximo de intentos de conexión (logins) fallidos permitidos por el servidor como seguridad, aunque en el caso del ftp anónimo no sería fundamental. Para ello escribiremos la línea siguiente en el archivo ftpaccess:

        
loginfails X

Donde X es el número de intentos.

Por otro lado podemos restringir el dominio de acceso, que puede ser local a la máquina, remoto a la máquina o los dos. Se indica bajo unas líneas de este tipo:

class  local   real,guest,anonymous *.my.domain 192.168.0.0
class  remote  real,guest,anonymous *
class   all    real,guest,anonymous *

  1. La primera permite un acceso local para los usuarios reales, invitados y anónimos para el dominio indicado, en este caso *.my.domain 192.168.0.0.
  2. La segunda permite un acceso remoto para toda la red (*) para los usuarios reales de la máquina servidora, los invitados y el anónimo.
  3. La tercera permite un acceso total para los mismos usuarios y para toda la red.

Podemos restringir también el número máximo de usuarios que pueden acceder simultáneamente. Esto es necesario para no sobrecargar la máquina, la línea telefónica, la red,... Tenemos una restricción para cada tipo de acceso, un ejemplo sería:

limit  local   20      Any   /etc/wu-ftpd-academ/msg.toomany
limit  remote  100     Any   /etc/wu-ftpd-academ/msg.toomany
limit   all    10      Any   /etc/wu-ftpd-academ/msg.toomany

Así limitamos el acceso local a 20 usuarios, el remoto a 100 y el total a 10, hay que tener en cuenta que las líneas local y remota estaban comentadas. Si por algún motivo intenta entrar un usuario más al sistema y sobrepasa este valor, se le mostrará el mensaje escrito en nuestro caso en /etc/wu-ftpd-academ/msg.toomany. Como el lector supondrá, todo esto es modificable.

10.1 Modificación de archivos.

Un tema importante es permitir o no la modificación de las propiedades de los archivos. Por ello el archivo ftpaccess dispone de unas líneas para ello:

#accion       yes/no     usuario
#--------------------------------
rename          no      anonymous    # rename permission?
delete          no      anonymous    # delete permission?
overwrite       no      anonymous    # overwrite permission?
chmod           no      anonymous    # chmod permission?
umask           no      anonymous    # umask permission?

En este caso, todos los permisos para el usuario anonymous están desactivadas.

10.2 Archivos no bajables.

Existirán archivos que no deseamos que sean obtenibles, como pudieran ser /etc/passwd y /etc/group, del directorio del ftp (en nuestro caso (/home/ftp/etc/passwd y /home/ftp/etc/group). Para ello tendríamos la siguiente línea en el archivo ftpaccess:

# estos ficheros no son bajables
noretrieve /etc/passwd /etc/group
noretrieve core

La primera línea es un comentario, la segunda hace lo explicado anteriormente, mientras que la tercera no permite la bajada de archivos core del ftp. Esto es debido a que los core son volcados de memoria y pueden contener información valiosa.

10.3 Subidas al servidor.

Antes se ha indicado como preparar un directorio para las subidas al servidor de ftp (directorio incoming). Pero en este archivo vamos a poner unas líneas muy especiales:

upload  /home/ftp   *               no
upload  /home/ftp   /pub/incoming   yes     ftp     daemon  0666 nodirs

La primera línea indica que las subidas a /home/ftp, en cualquiera de sus directorios, no están permitidas.

La segunda indica específicamente que las subidas a /home/ftp/pub/incoming están permitidas, pero no se pueden crear directorios y el permiso de los ficheros será 0666 (modo 0666).

El directorio incoming puede ser un problema muy grande, en muchos sitios se recomienda un sistema de archivos propio, puesto que si se llena el del sistema por exceso de uploads de ftp, tendríamos grandes problemas.

Con todo esto, todo el ftp estará perfectamente configurado, pero aun así, existen más opciones, como indicar alias escribiendo :

        alias   incoming:       /pub/incoming

El usuario al poner cd incoming pasara automáticamente a /pub/incoming, pero básicamente este archivo ya estaría perfecto.

10.4 El archivo ftpconversions.

Este archivo es muy útil para bajar archivos que no están comprimidos o empaquetados. En casos como el wu-ftpd es muy conveniente poner comandos como gzip, gnutar, compress,... compilados y enlazados de forma estática, en el directorio /home/ftp/bin con los permisos correspondientes (111) para permitir bajadas de archivos a la vez que los comprimimos. Su aspecto es el siguiente:

 :.Z:  :  :/bin/compress -d -c %s:T_REG|T_ASCII:O_UNCOMPRESS:UNCOMPRESS
 :   : :.Z:/bin/compress -c %s:T_REG:O_COMPRESS:COMPRESS
 :.gz: :  :/bin/gzip -cd %s:T_REG|T_ASCII:O_UNCOMPRESS:GUNZIP
 :   : :.gz:/bin/gzip -9 -c %s:T_REG:O_COMPRESS:GZIP
 :   : :.tar:/bin/tar -c -h -f - %s:T_REG|T_DIR:O_TAR:TAR
 :   : :.tar.Z:/bin/tar -c -h -Z -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+COMPRE
 :   : :.tar.gz:/bin/tar -c -h -z -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+GZIP
 :   : :.tgz:/bin/tar -c -h -z -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+GZIP
 :   : :.ltar:/bin/tar -c -f - %s:T_REG|T_DIR:O_TAR:TAR
 :   : :.ltar.Z:/bin/tar -c -Z -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+COMPRESS
 :   : :.ltar.gz:/bin/tar -c -z -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+GZIP

Ejemplo:

        
-r--r--r--   1 root     root       795509 Jan 20  1998 tel2308a
-r--r--r--   1 root     root       797901 Jan 20  1998 tel2308b

Son los ficheros a bajar del servidor. Como se ve, no están en forma comprimida ni empaquetada, pero queremos bajarlo como tar.Z. Esto a priori se presenta como un problema, puesto que son dos comandos en uno, por ello podemos usar un programa que nos permita pipes (|) en nuestro ftpd. Con el siguiente, copiado al directorio bin de nuestro ftp, después de compilarlo, el problema esta casi resuelto:

     /* pipe.c: ejecuta dos comandos en una pipe */
     /* codigo escrito por Gary Mills */

     #define NULL (char *)0
     #define MAXA 16

     main(argc, argv) int argc; char *argv[]; {
     char *av1[MAXA], *av2[MAXA];
     int i, n, p[2], cpid;

     i = 0; n = 0;
     while ( ++i < argc && n < MAXA ) {
     if ( *argv[i] == '|' && *(argv[i]+1) == '\0' ) break;
     av1[n++] = argv[i];
     }
     if ( n == 0 ) uexit();
     av1[n] = NULL;
     n = 0;
     while ( ++i < argc && n < MAXA )
     av2[n++] = argv[i];
     if ( n == 0 ) uexit();
     av2[n] = NULL;
     if ( pipe(p) != 0 ) exit(1);
     if ( ( cpid = fork() ) == (-1) ) exit(1);
     else if ( cpid == 0 ) {
     (void)close(p[0]);
     (void)close(1);
     (void)dup(p[1]);
     (void)close(p[1]);
     (void)execv(av1[0], av1);
     _exit(127);
     }
     else {
     (void)close(p[1]);
     (void)close(0);
     (void)dup(p[0]);
     (void)close(p[0]);
     (void)execv(av2[0], av2);
     _exit(127);
     }
     /*NOTREACHED*/
     }
     uexit() {
     (void)write(2, "Modo de uso: pipe  | \n", 34);
     exit(1);
     }

El programa lo tenemos, el problema es indicarle al ftpd que lo use. Para ello pondremos esta línea en el archivo ftpconversions:

        
 :  :  :.tar.Z:/bin/pipe /bin/tar cf - %s | /bin/compress -c:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+COMPRESS

ATENCION: La línea puede estar partida !!! Espero que se entienda, si hay dudas, por favor indíquemelas.

De esta forma, el comando para obtener un .tar.Z es llamando a bin/pipe que a su vez llama a bin/tar y a bin/compress (con sus opciones correspondientes). Este comando se puede ampliar para otros comandos como pueden ser gzip o zip junto con el tar.

La variedad solo tiene límite con las combinaciones de compresores.


Anterior Siguiente Indice