Ftp Anónimo COMO <author>Rodolfo García Peñas, <tt><htmlurl url="mailto:kix@mad.servicom.es" name="kix@mad.servicom.es"></tt> <date>v1.0-Sayaka, 1 Septiembre 1998 <abstract> Este COMO describe cómo instalar, configurar y mantener un servidor ftp de una manera fácil y rápida. </abstract> <toc> <sect>Editor. <label id="Editor"> <p> La idea inicial de escribir este documento ha sido sin duda el irc. Hay mucha gente que entra y dice que quiere poner un servidor ftp corriendo en su sistema y claro está que eso no se hace en 10 minutos. <sect1>Copyright y cosas de esas.<label id="Copyright"> <p> Este como ha sido escrito por <it>Rodolfo García</it> (anda!! si soy yo!!), pero simplemente para mantener una misma línea de trabajo me gustaría que si hay que hacer modificaciones de algo, se me indique y yo muy gustosamente lo haría. Esto permitirá que dentro de 2 años nos encontremos con 16 Cacho-A-Ftp-Anonimo-HowTo incompletos y se tenga que perder un tiempo para organizarlo. Por otro lado no me hago responsable de los posibles problemas, pérdidas, ... de datos o de seguridad por seguir este Como. <sect1>Dedicatorias ;-).<label id="Dedicatorias"> <p> Pues si, este ftp va dedicado a todo el mundo del canal <tt>#linux</tt> de irc-hispano, a los que trabajan por Linux en España, en especial a <it/Ismael Olea/, <it/Paco Pepe/ <tt/Pukka/ :-) (ehh y a su preciosa <it/Viki/ :-P), a <it>Juan José Amor Iglesias</it> y a <it/Ramón/ Gutiérrez/, <tt/CamuS/ :-). A <it/Sayaka/, una gran amiga de la cual no creo pueda nunca olvidarme, por ello este como lleva su nombre en el principio (v1.0-Sayaka). Por otro lado quiero saludar a mis compañeros y amigos de universidad (<tt><htmlurl url="http://www.upco.es" name="http://www.upco.es"></tt>). <sect1>Colaboraciones.<label id="Colaboraciones"> <p> En especial, quiero dar las gracias a Ignacio Arenaza, que me permitió hacer unos ajustes a este COMO y a Francisco José Montilla, el cual me corrigió dos errores muy gordos. <sect1>Realización. <label id="Realizacion"> <p> Para editar este COMO, no he seguido nada, lo he escrito desde el principio con lo que sabía, con mi poca experiencia y mirando manuales y demás. Una vez escrito, lo he complementado, ajustado,... con la <it/FAQ/ sobre ftp anónimo que ha escrito Christophe R. Klaus (<tt><htmlurl url="mailto:cklaus@iss.net" name="cklaus@iss.net"></tt>). <sect>Requisitos. <label id="Requisitos"> <p> <enum> <item>Tener instalado Linux, con un kernel 2.0.x (al menos), pero no he probado con menos, se aceptan reclamaciones. <item>Tener un paquete de ftp apropiado, en mi caso instalaré <tt/wu-ftp/ en Debian, aunque lo explicaré para todas las distribuciones. </enum> <sect>Instalación. <label id="Instalacion"> <p> La instalación en las distintas distribuciones es muy variable, pero todas se basan en lo mismo. Por ello empezaré en Debian que es la que yo uso, y pasaré a RedHat y SlackWare hasta donde vea que puedo. En Debian es muy fácil, buscamos donde tenemos el paquete, y ejecutamos lo siguiente: <tscreen><verb> dpkg -i "nombre de paquete" </verb></tscreen> En mi caso, sería: <tscreen><verb> dpkg -i wu-ftpd-academ_2.4.2.16-9.deb </verb></tscreen> Una vez realizado esto, se nos preguntarán unas cuestiones. <tscreen><verb> Do you want to set up or update an anonymous FTP account now? [n] </verb></tscreen> Esta pregunta nos indica si queremos crear una cuenta de ftp anónimo en este momento. Nosotros indicaremos que sí, puesto que queremos una configuración de este tipo, pero si no la deseamos decimos que no y no ocurre nada más. Al decir que sí, nos pregunta de nuevo: <tscreen><verb> Enter the name of the FTP home directory: [/home/ftp] </verb></tscreen> Debemos indicar dónde situaremos el directorio por defecto del ftp, por defecto <tt>/home/ftp</tt> , donde nosotros lo dejaremos. <tscreen><verb> /home/ftp does already exist, should I use it? [n] </verb></tscreen> Diremos que sí para crear el directorio raíz del ftp. La siguiente pregunta, será si deseamos crear un directorio para permitir que nos suban cosas, nosotros diremos que sí, aunque luego se explicará cómo configurarlo para activar o desactivar esta cuestión. Con todo esto, tendríamos instalado el ftp, pero queda configurarlo. Para comprobar que está correcto, realizaremos lo siguiente: <tscreen><verb> <kix@hell>$ ftp 127.0.0.1 Connected to 127.0.0.1. 220-Welcome, archive user [unknown]@localhost ! 220- 220-The local time is: Mon Jul 27 22:04:24 1998 220- 220-This is an experimental FTP server. If have any unusual problems, 220-please report them via e-mail to <root@hell.darkness.org>. 220- 220-If you do have problems, please try using a dash (-) as the first 220-character of your password -- this will turn off the continuation 220-messages that may be confusing your ftp client. 220- 220 hell.darkness.org FTP server (Version wu-2.4.2-academ[BETA-16](1) Sat May 23 19:56:02 CEST 1998) ready. Name (127.0.0.1:root): </verb></tscreen> Si está usando RedHat, Slackware o cualquier otra distribución, no se preocupe, posteriormente se indicará cómo configurar todo a mano. Aun así, indicare como se instala: <tscreen><verb> rpm -i "nombre_del_paquete_ftpd.rpm" rpm -i "nombre_del_paquete_anon-ftp.rpm" </verb></tscreen> Esto es debido a que son dos paquetes, el del ftp anónimo, que en RedHat 5 se llama <tt/anonftp-2.5-1.i386.rpm/ y el del demonio avanzado de ftp, para nosotros el wu-ftpd, <tt/wu-ftpd-2.4.2b16-4.i386.rpm/. SlackWare: <tscreen><verb> tar -xvzf "nombre_del_paquete.tgz" </verb></tscreen> <sect>Configuración. <label id="Configuracion"> <p> La configuración de un ftp es cosa fácil, pero debemos estar atentos por la seguridad del sistema. <sect1>Cuenta de usuario. <label id="CuentaUser"> <p> Lo primero será añadir el usuario <tt/ftp/, que en Debian se ha creado; pero deberíamos repasar como está, en RedHat también aparece, pero en SlackWare no se crea. Para ello editaremos el archivo <tt>/etc/passwd</tt> y miraremos si tenemos una línea parecida a esta: <tscreen><verb> ftp:*:100:101::/home/ftp:/bin/false </verb></tscreen> Si no fuera así, la crearíamos. <enum> <item><tt/ftp/: sería el nombre de usuario. (Fíjese que siempre es <tt/ftp/, sin distinción del nombre del servidor de ftp --- wu-ftpd en nuestro caso --- ). <item><tt/*/: Anulamos la capacidad de acceso shell al sistema del usuario <tt/ftp/. Como el demonio ftp necesita una, le pondremos una falsa, de este modo el acceso al sistema como usuario ftp queda estrictamente limitada a la función de ejecutar el demonio. <item><tt/100/: UID de usuario, puede variar. <item><tt/101/: Grupo del usuario, que es variable también. <item><tt>/home/ftp</tt>: Este es el directorio raíz del ftp para el usuario <tt/anonymous/. Si en este campo apareciera "<tt>/</tt>" compartiríamos todo nuestro linux, <bf/muy inseguro/. En el caso de usuarios del sistema, el directorio <tt/home/ sería el del usuario en cuestión. <item><tt>/bin/false</tt>: Este será el nombre del shell a ejecutar. Como queremos limitar el acceso shell del usuario <tt/ftp/, pero el demonio ftp necesita una shell que <it/exista/ ponemos <tt>/bin/false</tt>, asegurándonos de que exista. Si no es así, la creamos: <tscreen><verb> #!/bin/sh exit 1 </verb></tscreen> Los permisos recomendables para este fichero son <tt/rwxr-xr-x/. Además, esta <it/shell/ ha de aparecer listada en el fichero <tt>/etc/shells</tt>, por lo que la habremos de añadir si no lo está. </enum> <sect1><tt>/etc/ftpusers</tt> <label id="etcftpusers"> <p> Lo segundo es restringir los nombres de usuario que nunca deben entrar al ftp. Para ello editaremos el archivo <tt>/etc/ftpusers</tt> e introduciremos los que queramos: <tscreen><verb> # /etc/ftpusers: list of users disallowed ftp access. See ftpusers(5). root daemon bin sys ..... </verb></tscreen> Con esto cuando un usuario incluido en este archivo intente entrar, el acceso le será denegado. Si mantenemos un servidor para distintos usuarios, cuando se introduzca un nombre y un password válido, el usuario aparecerá en su directorio <tt/$HOME/, y podrá acceder a aquellas partes del sistema a las que tendría acceso por shell. Si no queremos que acceda al servidor por ftp, añadiremos su nombre de usuario a este archivo. <sect>La shell.<label id="Shell"> <p> El shell de usuario debe aparecer en <tt>/etc/shells</tt> pero si no aparece no ocurre nada y además deberá tener en cuenta que la restricción de no ponerlo no aumenta la seguridad. <sect>El directorio del ftp. <label id="directorioftp"> <p> El directorio <tt>/home/ftp</tt> en nuestro caso debe cumplir lo siguiente, para que sea seguro: <sect1><tt>/home/ftp</tt> <label id="homeftp"> <p> El directorio raíz del ftp (<tt>/home/ftp</tt>) debe ser propiedad del usuario root y con acceso de escritura prohibido al resto de usuarios, pero sí de ejecución para todos (<tt/chmod 555/) Como ejemplo: <tscreen><verb> dr-xr-xr-x 6 root root 1024 Jul 19 21:16 ftp </verb></tscreen> Es importante saber que algunas revistas, y manuales sobre ftp recomiendan que el usuario propietario de <tt>/home/ftp</tt> sea ftp, pero esto es un error enorme si queremos tener un servidor seguro. <sect1><tt>/home/ftp/bin</tt> <label id="homeftpbin"> <p> El directorio <tt>/home/ftp/bin</tt> debe ser propiedad del root y sin acceso de escritura al resto de los usuarios. Como ejemplo: <tscreen><verb> d--x--x--x 2 root root 1024 Jul 27 21:48 bin </verb></tscreen> Dentro de este directorio, los archivos que tendremos serán todos los ejecutables, en mi caso son: <tscreen><verb> ---x--x--x 1 root root 15204 Oct 24 1997 compress ---x--x--x 1 root root 46324 Nov 6 1997 cpio ---x--x--x 1 root root 45660 Jul 27 21:48 gzip ---x--x--x 1 root root 29404 Jul 27 21:48 ls ---x--x--x 1 root root 62692 Oct 20 1997 sh ---x--x--x 1 root root 103968 Jul 27 21:48 tar </verb></tscreen> Como se puede ver todos ellos son pertenecientes a <tt/root/ y con permisos de sólo ejecución para todo el mundo (modo <tt/111/). Los comandos de este directorio son los mismos que usamos en nuestro sistema, por ejemplo "<tt/ls/", los copiamos aquí si no los tenemos y les aplicamos los permisos. <sect1><tt>/home/ftp/etc</tt> <label id="homeftpetc"> <p> El directorio <tt>/home/ftp/etc</tt> tendrá permiso de solo ejecución y será propiedad de <tt/root/: <tscreen><verb> d--x--x--x 2 root root 1024 Jul 27 23:42 etc </verb></tscreen> Los archivos siguientes son los que tendremos en este directorio: <tscreen><verb> -r--r--r-- 1 root root 18 Jul 27 21:48 group -r--r--r-- 1 root root 8376 Nov 6 1997 ld.so.cache -r--r--r-- 1 root root 44 Jul 27 21:48 passwd -r--r--r-- 1 root root 172 Jul 19 21:16 pathmsg </verb></tscreen> Todos los archivos deben ser de sólo lectura (modo <tt/111/). Tanto el archivo <tt/group/ como el archivo <tt/passwd/ de este directorio deben contener la información mínima posible. Un ejemplo claro sería: <tt/passwd/: <tscreen><verb> root:*:0:0:root:: ftp:*:10::Anonymous FTP:: </verb></tscreen> <tt/group/: <tscreen><verb> root::0: staff::: </verb></tscreen> El archivo <tt/pathmsg/ es un archivo de información para el usuario cuando introduce algún carácter no valido. Es editable por nosotros para que ponga lo que queramos. <tt/pathmsg/ Original: <tscreen><verb> You used an illegal filename. The filenames for anonymous users must be made of only the characters A-Z, a-z, 0-9 and "._-+" and may not begin with a "." or a "-". </verb></tscreen> <tt/pathmsg/ mío actual: <tscreen><verb> Baby estas usando un nombre d'archivo erroneo. A ver zi te enteras ke solo puedes usar los caracteres A-Z, a-z, 0-9 y "._-+" pero sin empezar por "." o "-". </verb></tscreen> Fuera de las coñas y demás, es ``algo'' más inteligible que en inglés. El archivo <tt/ld.so.cache/ contiene los nombres de las librerías necesarias, recomiendo no tocarlo si no es necesario. <sect1><tt>/home/ftp/lib</tt><label id="homeftplib"> <p> El directorio <tt>/home/ftp/lib</tt> donde las librerías son contenidas, debe tener propiedades de solo ejecución (<tt/d--x--x--x/). En el interior encontraremos librerías y links a las mismas. Debemos tener en cuenta que deben tener permisos de sólo lectura, pero que los links tienen todos los permisos activados. Como ejemplo: <tscreen><verb> -r--r--r-- 1 root root 164803 Jul 27 21:48 ld-2.0.5.so lrwxrwxrwx 1 root root 11 Jul 14 02:23 ld-linux.so.2 -> ld-2.0.5.so </verb></tscreen> <sect1><tt>/home/ftp/pub</tt> <label id="homeftppub"> <p> El directorio <tt>/home/ftp/pub</tt> es donde se alojarán los archivos que queremos compartir. Su propietario debería ser <tt/ftp/, y los accesos serán de ejecución y lectura: <tscreen><verb> dr-xr-xr-x 21 ftp ftp 1024 Jul 26 20:04 pub </verb></tscreen> El permitir la escritura en este directorio no es una buena idea, puesto que los archivos deberían estar controlados, para ello usaremos un directorio concreto para las subidas. La recomendación es tener los permisos de todo lo que cuelga de este directorio (<tt/pub/) como <tt/555/. En otros sistemas como SunOS las propiedades de este directorio son <tt/2555/, de tal forma que se pueden crear nuevos archivos con el mismo grupo. <sect2><tt>/home/ftp/pub/incoming</tt><label id="homeftppubincoming"> <p> El directorio <tt>/home/ftp/pub/incoming</tt> es el directorio donde permitiremos la subida de ficheros a nuestra máquina. Por ello debe tener las siguientes propiedades: <tscreen><verb> drwxr-x-wx 2 root root 1024 Jul 19 21:16 incoming </verb></tscreen> Como se puede observar tiene permiso de ejecución (como es un directorio, realmente es permiso de <it/acceso/ al directorio) y de escritura, pero no de lectura. Esto se hace para que sólo personas autorizadas vean el contenido de este directorio. Si quisiéramos que fuera un directorio para compartir ficheros, solo tendríamos que añadir la propiedad de lectura. Por otro lado, tendremos que editar un archivo de configuración para que todo esté perfecto. Este archivo se verá en la parte de configuración avanzada. <sect>El arranque. <label id="arranque"> <p> En este momento el demonio de ftp estaría preparado para ser lanzado, los directorios con los permisos adecuados y todo a punto para arrancar el demonio. Quedan dos partes importantes, la forma de arrancarlo y los archivos a ofrecer. Para el arranque del demonio, lo mejor es dejar que <tt/inetd/ lo lance cuando sea necesario, para ello se lo especificamos en el archivo <tt>/etc/inetd.conf</tt>, en el cual tendremos que poner (si no existe) una línea como esta: <tscreen><verb> ftp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/ftpd </verb></tscreen> En algunos sistemas en lugar de <tt/fptd/ puede ser <tt/in.ftpd/. Ahora podemos lanzar un ftp sin archivos, pero funcional reiniciando el <tt/inetd/ con el comando <tt>"killall -HUP inetd"</tt> <sect>Los archivos a ofrecer. <label id="archivosofrecer"> <p> Los archivos a ofrecer los introduciremos en el directorio <tt/pub/ de nuestro ftp, pudiendo crear directorios, y teniendo en cuenta los permisos para que no sean modificables, borrables y demás. Un ejemplo sería: <tscreen><verb> -r--r--r-- 1 root root 640005 Jun 23 23:31 WindowMaker.gz dr-xr-xr-x 2 root root 2048 Jul 20 21:06 apps dr-xr-xr-x 2 root root 1024 Jul 20 21:06 themes </verb></tscreen> <sect>Configuración avanzada. <label id="configuracionavanzada"> <p> Hasta este punto tendríamos un ftp seguro y totalmente funcional, pero el ftp nos permite muchas mas cosas, me referiré al del <it/wu-ftpd/ en especial, los demás servidores son iguales o muy parecidos. Los archivos se alojan en <tt>/etc/</tt> o en <tt>/etc/directorio</tt> en el caso de <tt/wu-ftp-academ/ es <tt>/etc/wu-ftpd-academ</tt>. Para buscar los suyos lo mejor es: <tscreen><verb> find /etc -name *ftp* </verb></tscreen> <sect1>El archivo <tt>ftpaccess</tt>. <label id="ftpaccess"> <p> Este archivo es el que tiene toda la configuración del ftp, por lo cual si montamos el ftp desde cero tendremos que repasarlo a tope. <sect2>Mensajes.<label id="mensajes"> <p> Los mensajes son un punto importante de información. Podemos encontrarlos de tres tipos, pero todos se configuran en este archivo. El primero es el que recibimos nada más conectar con el servidor de ftp, que suele ser de tipo informativo. Es indicado por una línea como esta en el archivo <tt/ftpaccess/: <tscreen><verb> banner /etc/wu-ftpd-academ/welcome.msg </verb></tscreen> Teniendo en cuenta que el fichero <tt>/etc/wu-ftpd-academ/welcome.msg</tt> tiene un contenido deseado para nosotros. Otro tipo de mensaje es el que aparece nada más autorizarnos con el servidor, y va indicado por esta línea: <tscreen><verb> message /welcome.msg login </verb></tscreen> Teniendo en cuenta que la <tt>/</tt> indica el directorio raíz del ftp, en nuestro caso <tt>/home/ftp</tt>, puesto que hemos accedido ya. El otro tipo de mensajes es el que aparece al cambiar de directorio y que normalmente nos informa de lo que allí tenemos. Viene indicado por la línea siguiente: <tscreen><verb> message .message cwd=* </verb></tscreen> Como se puede ver, es un archivo llamado <tt/.message/ que aparece en cada cambio de directorio, y se muestra con el cwd. (<tt/cwd=*/). Podemos cambiar lo que queramos y añadir un tipo de mensaje para otras acciones deseadas. <sect2>Información del servidor de ftp. <label id="informacion"> <p> Es importante que los que accedan a nuestro servidor puedan indicarnos cualquier error. Para ello, debemos dejar una dirección de correo electrónico bajo una línea similar a esta: <tscreen><verb> # direccion email del administrador ftp, # puede utilizarse con la macro %E # en los ficheros de mensajes. email usuario@servidor_correo </verb></tscreen> <sect>Accesos.<label id="accesos"> <p> 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 <tt/ftpaccess/: <tscreen><verb> loginfails X </verb></tscreen> 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: <tscreen><verb> class local real,guest,anonymous *.my.domain 192.168.0.0 class remote real,guest,anonymous * class all real,guest,anonymous * </verb></tscreen> <enum> <item>La primera permite un acceso local para los usuarios reales, invitados y anónimos para el dominio indicado, en este caso <tt/*.my.domain 192.168.0.0/. <item>La segunda permite un acceso remoto para toda la red (<tt/*/) para los usuarios reales de la máquina servidora, los invitados y el anónimo. <item>La tercera permite un acceso total para los mismos usuarios y para toda la red. </enum> 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: <tscreen><verb> 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 </verb></tscreen> 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 <tt>/etc/wu-ftpd-academ/msg.toomany</tt>. Como el lector supondrá, todo esto es modificable. <sect1>Modificación de archivos.<label id="modificacionarchivos"> <p> Un tema importante es permitir o no la modificación de las propiedades de los archivos. Por ello el archivo <tt/ftpaccess/ dispone de unas líneas para ello: <tscreen><verb> #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? </verb></tscreen> En este caso, todos los permisos para el usuario anonymous están desactivadas. <sect1>Archivos no bajables.<label id="Archivosnobajables"> <p> Existirán archivos que no deseamos que sean obtenibles, como pudieran ser <tt>/etc/passwd</tt> y <tt>/etc/group</tt>, del directorio del ftp (en nuestro caso (<tt>/home/ftp/etc/passwd</tt> y <tt>/home/ftp/etc/group</tt>). Para ello tendríamos la siguiente línea en el archivo <tt/ftpaccess/: <tscreen><verb> # estos ficheros no son bajables noretrieve /etc/passwd /etc/group noretrieve core </verb></tscreen> La primera línea es un comentario, la segunda hace lo explicado anteriormente, mientras que la tercera no permite la bajada de archivos <tt>core</tt> del ftp. Esto es debido a que los <tt>core</tt> son volcados de memoria y pueden contener información valiosa. <sect1>Subidas al servidor.<label id="Subidasalservidor"> <p> Antes se ha indicado como preparar un directorio para las subidas al servidor de ftp (directorio <tt/incoming/). Pero en este archivo vamos a poner unas líneas muy especiales: <tscreen><verb> upload /home/ftp * no upload /home/ftp /pub/incoming yes ftp daemon 0666 nodirs </verb></tscreen> La primera línea indica que las subidas a <tt>/home/ftp</tt>, en cualquiera de sus directorios, no están permitidas. La segunda indica específicamente que las subidas a <tt>/home/ftp/pub/incoming</tt> están permitidas, pero no se pueden crear directorios y el permiso de los ficheros será <tt/0666/ (modo <tt/0666/). El directorio <tt/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 <it/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 : <tscreen><verb> alias incoming: /pub/incoming </verb></tscreen> El usuario al poner <tt/cd incoming/ pasara automáticamente a <tt>/pub/incoming</tt>, pero básicamente este archivo ya estaría perfecto. <sect1>El archivo <tt>ftpconversions</tt>.<label id="ftpconversions"> <p> Este archivo es muy útil para bajar archivos que no están comprimidos o empaquetados. En casos como el <it/wu-ftpd/ es muy conveniente poner comandos como <tt/gzip/, <tt/gnutar/, <tt/compress/,... compilados y enlazados de forma estática, en el directorio <tt>/home/ftp/bin</tt> con los permisos correspondientes (<tt/111/) para permitir bajadas de archivos a la vez que los comprimimos. Su aspecto es el siguiente: <tscreen><verb> :.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 </verb></tscreen> Ejemplo: <tscreen><verb> -r--r--r-- 1 root root 795509 Jan 20 1998 tel2308a -r--r--r-- 1 root root 797901 Jan 20 1998 tel2308b </verb></tscreen> Son los ficheros a bajar del servidor. Como se ve, no están en forma comprimida ni empaquetada, pero queremos bajarlo como <tt/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 (<tt/|/) en nuestro ftpd. Con el siguiente, copiado al directorio <tt/bin/ de nuestro ftp, después de compilarlo, el problema esta casi resuelto: <tscreen><verb> /* 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); } </verb></tscreen> El programa lo tenemos, el problema es indicarle al ftpd que lo use. Para ello pondremos esta línea en el archivo <tt/ftpconversions/: <tscreen><verb> : : :.tar.Z:/bin/pipe /bin/tar cf - %s | /bin/compress -c:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+COMPRESS </verb></tscreen> 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 <tt/.tar.Z/ es llamando a <tt>bin/pipe</tt> que a su vez llama a <tt>bin/tar</tt> y a <tt>bin/compress</tt> (con sus opciones correspondientes). Este comando se puede ampliar para otros comandos como pueden ser <tt/gzip/ o <tt/zip/ junto con el <tt/tar/. La variedad solo tiene límite con las combinaciones de compresores. <sect>Puntos clave a recordar. <label id="recordar"> <p> Si tiene un agujero de seguridad en su ftpd lo mejor es que lo cierre temporalmente, obtenga el último demonio de ftp sin errores o con errores parcheables, y sustituya el demonio anterior. Asegúrese de que los archivos tienen los permisos correspondientes, que el archivo <tt>/etc/passwd</tt> de su ftp es correcto, y ponga el seguimiento de su ftp de forma muy alta y que haga logs de las conexiones. Si aun así tiene problemas, simplemente rece. El ftp anónimo no es más que un servicio ofrecido a personas externas a nuestro sistema, por ello se crea el directorio <tt>/home/ftp</tt>, pero se puede tener un ftp para los usuarios del sistema pero no para los externos, por lo cual no es un servidor anónimo de ftp. Recuerde que el directorio home será por tanto el del usuario que acceda por ftp. Siguiendo este COMO le puede ayudar a configurarlo sea cual sea su caso. Si desea más seguridad debería compilar todo usted mismo, de forma estática. <sect>Archie.<label id="archie"> <p> El servicio Archie es un simple buscador de archivos sobre máquinas con ftp. Podemos buscar un archivo que necesitamos usando este servicio sobre cientos de máquinas de todo el mundo de una forma rápida y efectiva al 100%. Por otro lado podemos incluir nuestro servidor en un buscador Archie (sólo si se esta siempre conectado, es un poco absurdo para un acceso temporal de 30 minutos diarios), para ello debemos mandar un mail a la lista de buscadores Archie (<tt><htmlurl url="mailto:archie-updates@bunyip.com" name="archie-updates@bunyip.com"></tt>) para los siguientes servidores Archie: <tscreen><verb> archie.ac.il 132.65.20.254 (Israel) archie.ans.net 147.225.1.10 (ANS, NY (USA)) archie.au 139.130.4.6 (Australia) archie.doc.ic.ac.uk 146.169.11.3 (United Kingdom) archie.edvz.uni-linz.ac.at 140.78.3.8 (Austria) archie.funet.fi 128.214.6.102 (Finlandia) archie.internic.net 198.49.45.10 (ATT, NY (USA)) archie.kr 128.134.1.1 (Korea) archie.kuis.kyoto-u.ac.jp 130.54.20.1 (Japon) archie.luth.se 130.240.18.4 (Swedish) archie.ncu.edu.tw 140.115.19.24 (Taiwan) archie.nz 130.195.9.4 (Nueva Zelanda) archie.rediris.es 130.206.1.2 (Spain) (Este es el nuestro) archie.rutgers.edu 128.6.18.15 (Rutgers University (USA)) archie.sogang.ac.kr 163.239.1.11 (Korea) archie.sura.net 128.167.254.195 (SURAnet (USA)) archie.sura.net(1526) 128.167.254.195 (SURAnet alt. MD (USA)) archie.switch.ch 130.59.1.40 (Swiss Server) archie.th-darmstadt.de 130.83.22.60 (Alemania) archie.unipi.it 131.114.21.10 (Italia) archie.univie.ac.at 131.130.1.23 (Austria) archie.unl.edu 129.93.1.14 (U. of Nebraska, Lincoln (USA)) archie.univ-rennes1.fr (Francia) archie.uqam.ca 132.208.250.10 (Canada) archie.wide.ad.jp 133.4.3.6 (Japon) </verb></tscreen> <sect>Anexo: El INSFLUG <label id="Grupos"> <p> El <em/INSFLUG/ forma parte del grupo internacional <it/Linux Documentation Project/, encargándose de las traducciones al castellano de los Howtos (Comos), así como la producción de documentos originales en aquellos casos en los que no existe análogo en inglés. En el <bf/INSFLUG/ se orienta preferentemente a la traducción de documentos breves, como los <em/COMOs/ y <em/PUFs/ (<bf/P/reguntas de <bf/U/so <bf/F/recuente, las <it/FAQs/. <tt/:)/ ), etc. Diríjase a la sede del INSFLUG para más información al respecto. En la sede del INSFLUG encontrará siempre las <bf/últimas/ versiones de las traducciones: <tt><htmlurl url="http://www.insflug.org" name="www.insflug.org"></tt>. Asegúrese de comprobar cuál es la última versión disponible en el Insflug antes de bajar un documento de un servidor réplica. Se proporciona también una lista de los servidores réplica (<it/mirror/) del Insflug más cercanos a Vd., e información relativa a otros recursos en castellano. Francisco José Montilla, <tt><htmlurl url="mailto:pacopepe@insflug.org" name="pacopepe@insflug.org"></tt>. </article>