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 *
*.my.domain 192.168.0.0
.
*
) para
los usuarios reales de la máquina servidora, los invitados y el anónimo.
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.
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.
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.
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.
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.