FTP (File Transfer Protocol, Protocolo de Transferencia de Archivos) es un protocolo de red que permite transferir archivos de forma rápida y sencilla entre ordenadores. Se utiliza para compartir archivos y directorios, pudiendo establecer autentificación de usuarios (con nombre y contraseña) y permisos sobre los elementos compartidos. Los servidores FTP se usan principalmente para tres cosas:
- subir las páginas web al hosting.
- como servidor de archivos de libre acceso (denominado FTP anónimo). Los FTP anónimos son servidores FTP a los que puede conectarse cualquiera empleando como usuario anonymous y como password cualquier dirección de correo (servirá cualquier secuencia de caracteres que incluya "@").
- hacer backup (copia de seguridad).
Este protocolo se implementa con arquitectura cliente-servidor, por lo que necesita:
- un servidor FTP que se esté ejecutando en la máquina remota, y que por defecto, estará escuchando en los puertos 20 y 21 TCP (el puerto 20 se utiliza para la transmisión de datos y el puerto 21 para los comandos de control).
- un cliente FTP para conectarnos al servidor.
Un problema del protocolo FTP es que no cifra los datos, por lo que es vulnerable a la captura de la información transmitida, especialmente las contraseñas de acceso. Si necesitamos conexiones FTP seguras disponemos de servidores FTP encriptados, como SFTP (FTP sobre SSH) o FTPS (FTP sobre SSL).
En Linux hay muchos servidores FTP, vamos a ver un par de ellos:
- VS-FTPd: ligero y fácil de configurar, es considerado el servidor FTP más rápido y seguro.
- ProFTPd: muy configurable y bien documentado.
Equivalencias en Windows: MS-FTP.
Servidor FTP VS-FTPd
VS-FTPd (Very Secure FTP Daemon, vsftpd.beasts.org, paquete vsftpd), ligero y fácil de configurar, es considerado el servidor FTP más rápido y seguro.
El archivo de configuración de VS-FTPd es /etc/vsftpd.conf. Veamos algunas de sus principales directivas, por ejemplo, para el caso de un servidor web que da hosting a varios sitios web:
- no permitir acceso anónimo al servidor:
anonymous_enable=NO
- permitimos acceso a los usuarios locales (excepto los que figuren en /etc/ftpusers):
local_enable=YES
- damos permisos de escritura a los usuarios:
write_enable=YES
- impedimos a los usuarios locales salir de su directorio personal:
chroot_local_user=YES
Grabamos los cambios y reiniciamos el demonio vsftpd:
# /etc/init.d/vsftpd restart |
Por último, tenemos que crear y securizar los usuarios que usarán el servidor FTP para que tengan los mínimos permisos. En nuestro ejemplo los usuarios son los webmaster de los sitios web alojados:
- crearemos el grupo ftp al cual asociaremos los usuarios del servidor FTP:
# groupadd ftp
- creamos los usuarios del servidor FTP (el shell /bin/false debe existir y figurar
en /etc/shells):
# useradd -g ftp -d /var/www/domain1 -c user1 -s /bin/false user1
- y asignamos password a los usuarios:
# passwd user1
Probaremos a conectarnos desde un cliente FTP (por ejemplo con un navegador, con ftp://<IP_del_servidor>). Introduciremos el usuario y su contraseña y comprobaremos que nos redirige al directorio de su web, que podemos subir y bajar archivos al servidor y que no podemos subir de nivel en el árbol de directorios.
Servidor FTP ProFTPd
ProFTPd (proftpd.org, paquete proftpd), es uno de los servidores más utilizados en Linux, es muy configurable y está bien documentado.
Durante la instalación nos preguntará si queremos ejecutar ProFTPd como demonio independiente o mediante inetd (escogeremos standalone) y se creará el usuario ftp, con directorio personal /home/ftp, shell /bin/false y sin contraseña. El directorio /home/ftp sólo contiene el archivo welcome.msg, cuyo contenido se muestra al conectarse.
El archivo de configuración de ProFTPd es /etc/proftpd/proftpd.conf. Veamos algunas de sus principales directivas:
- directorio al que entrará el usuario (por defecto es su directorio
personal "~"):
DefaultChdir ~
- directorio donde se encierra el servidor, de modo que no se pueda
acceder a directorios superiores. Esto equivale a chrootear el server. Nunca
debemos poner el directorio raíz ("/"), ya que los usuarios
tendrán acceso a todo el sistema.
DefaultRoot ~
- mostrar o no los links (off/on).
ShowSymlinks off
- si queremos aplicar directivas sólo a un directorio, las pondremos dentro de
un bloque Directory:
<Directory [directorio]> directivas... </Directory>
- para indicarle a ProFTPd que un directorio debe ser tratado como un directorio
de acceso anónimo y aplicarle directivas específicas, usaremos:
<Anonymous [directorio]> directivas... </Anonymous>
- podemos especificar quién puede hacer qué:
<Limit [LOGIN] [READ] [WRITE] [STOR] [ALL]> quien... </Limit>
- para limitar el acceso usaremos:
<Limit LOGIN> quien... </Limit>
Grabamos los cambios y reiniciamos el demonio proftpd:
# /etc/init.d/proftpd restart |
Para probar el servidor nos conectaremos con un cliente FTP (ftp://<IP_del_servidor>), nos loguearemos con usuario y contraseña y comprobaremos que accedemos a la carpeta personal, que podemos subir y bajar archivos al servidor y que no podemos escalar en el árbol de directorios.
Comandos de ProFTPd
ProFTPd proporciona varios comandos útiles.
- El comando ftpwho nos permite ver qué usuarios están conectados en un
momento dado, qué están haciendo y desde cuándo están conectados:
$ ftpwho standalone FTP daemon [2178], up for 2 hrs 22 min 2420 francis [2m 36s] 2m 01s idle Service class - 1 user
- El comando ftptop monitoriza ProFTPd en tiempo real:
$ ftptop
- Para expulsar a un usuario del servidor FTP, miraremos el ID de su proceso
con cualquiera de los dos comandos anteriores (ftpwho o ftptop)
y mataremos el proceso. Por ejemplo, para tirar al usuario francis, cuyo ID
es 2420, haremos:
# kill -9 2420
Frontales gráficos para configurar ProFTPd
- GProFTPd (gadmintools.org, paquete gproftpd): frontal para configurar ProFTPd escrito en GTK.
estupendo tutorial. Gracias
Hola, quisiera saber como puedo listar varios directorios que se encuentran en discos diferents, probe hacer un enlace y no funciono, si me pudieras decir o indicar como agregar varios directorios estaria muy agradecido.
hola como estan!!!
alquien me podria decir como hacer que un servidor aqui en mi empresa fuera un ftp servidor y que las maquinas que estan en la red puedan copiar del servidor archivos a su maquina ???
el sistema operativo es linux red hat
gracias
Hola amigos quiero ayuda para una pratica, tengo que crear un servidor de archivos y no se que SO utilizar para ello por favor alguno que me pueda ayudar para solucionar esto, de ante mano agradezco la ayuda.
estas son caracteristicas del pc que tengo
modelo: OptiPlex GX240
Procesador: Intel(R) Pentium(R) 4 CPU 1.50GHz
Velocidad reloj: 1500 MHz
Fabricante del procesador: Intel
Fabricante de la BIOS: Dell Computer Corporation
Versión de la BIOS: A01
Número de serie de la BIOS: D27Y111
Fecha de instalación de la BIOS: 08/27/2001
Fabricante de la placa base: Dell Computer Corporation
Modelo de placa base: OptiPlex GX240
Ranura de memoria 0: DIMM_A
Capacidad: 256 Mb
adaptador de red
Adaptador de red 1: Controlador Fast Ethernet integrado 3Com 3C920 (compatible 3C905C-TX) – Minipuerto del administrador de paquetes
Tipo de adaptador: Ethernet
Almacenamiento
Disco físico 1: WDC WD2500BB-98GUA0
Capacidad: 232.89 Gb
otros
Teclado: Mejorado (clave 101 o clave 102)
Tarjeta de sonido 1: Controlador de audio de Intel(r) 82801BA/BAM AC’97
Puntero 1: Mouse compatible PS/2
Interfaz USB 1: Controladora de host universal USB Intel(R) 82801BA/BAM – 2442
Interfaz USB 2: Controladora de host universal USB Intel (R) 82801BA/BAM – 2444
[email protected]
Perdona pero creo que los enlaces están cruzados, el de proftpd apunta a vs-ftpd y viceversa.
Gracias por el post, un saludo.
Thanks, @Francisco Rodriguez. Update!