Very Secure FTP en Debian

Very Secure FTP Daemon es un servidor FTP. Está disponible en practicamente todas las distribuciones de linux y puede ser instalado muy fácilmente.

Este Howto está basado en una versión para Ubuntu que publiqué en PreguntasLinux.

Vamos a instalarlo y configurarlo utilizando dos equipos.
Probaremos algunas configuraciones básicas y realizaremos algunas pruebas para cotejar y aprender el mecanismo del ftp y poder brindar posibles soluciones sin comprometer la seguridad de nuestro servidor.

Notas preliminares
Para claridad del texto el servidor se llamará awqalli y tendrá IP 192.168.1.1, el cliente se llamará tankar y tendrá IP 192.168.1.2
También para diferenciar comandos de textos y entradas de teclado y salidas de sistema, usaré el color rojo para aquel texto que deba escribirse en el editor de textos vi; y usaré el color azul para toda la “charla” ftp.

Instalación del Servicio

En el servidor awqalli vamos a instalar el servicio.

root@awqalli:~# aptitude install vsftpd

Configuración para usuarios locales

Vamos a parar el servicio y a preservar la configuración por defecto, luego configuramos lo indispensable:

root@awqalli:~# /etc/init.d/vsftpd stop
root@awqalli:~# mv /etc/vsftpd.conf /etc/vsftpd.conf.ori
root@awqalli:~# sudo vi /etc/vsftpd.conf
#Configuración General
write_enable=YES
dirmessage_enable=YES
ftpd_banner=Bienvenido a FTP, por favor no rompa nada!
connect_from_port_20=YES
idle_session_timeout=600
data_connection_timeout=120
pasv_enable=YES
pam_service_name=vsftp
listen=YES
max_clients=5
max_per_ip=3
pasv_min_port=40000
pasv_max_port=40020

#Acceso para usuarios locales
local_enable=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list

#Log Settings
xferlog_enable=YES
vsftpd_log_file=/var/log/vsftpd.log
log_ftp_protocol=YES

Notemos que hemos indicado el parámetro chroot_list_file con valor /etc/vsftpd.chroot_list con lo cual deberemos crear este archivo para agregar aquellos usuarios que tendrán acceso FTP.

root@awqalli:~# vi /etc/vsftpd.chroot_list
jinetedeldragon

Prueba de conexión con usuario local

Arrancamos el servicio en awqalli

root@awqalli:~# /etc/init.d/vsftpd start

Luego nos logueamos en el cliente tankar y creamos algunos archivos para probar nuestra conexión

jinetedeldragon@tankar~$ touch hola.txt
jinetedeldragon@tankar~$ ftp awqalli
Connected to awqalli.quechua.
220 Bienvenido al FTP - Awqalli Server
Name (awqalli : jinetedeldragon): jinetedeldragon
331 Please specify the password.
Password: *********
230 Login successful
Remote system type is UNIX
Using binary mode to transfer files.
ftp> put hola.txt
local: hola.txt remote: hola.txt
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 File receive OK.ftp> ls200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-rw-------    1 1000     1000             0 Aug 26 23:54 hola.txt
drwxr-xr-x    2 1000     1000          4096 Aug 21 02:08 pub
226 Directory send OK.
ftp> 221 Goodbye.

Acceso anónimo sólo descarga

Ahora realizaremos la configuración para poder acceder únicamente de forma anónima. Paramos el servicio y realizamos las siguientes modificaciones

root@awqalli:~# /etc/init.d/vsftpd stop
root@awqalli:~# cd /var/run/vsftpd
root@awqalli:/var/run/vsftpd# mkdir anonimo
root@awqalli:/var/run/vsftpd# chmod 755 anonimo
root@awqalli:/var/run/vsftpd# chown root:root anonimo
root@awqalli:/var/run/vsftpd# touch anonimo/prueba.txt
root@awqalli:~# vi /etc/vsftpd.conf
# Habilitamos el acceso anonimo agregando esta sección
anonymous_enable=YES
anon_root=/var/run/vsftpd/anonimo
anon_world_readable_only=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_max_rate=2048
# impedimos el acceso de usuarios locales modificando
local_enable=NO
root@awqalli:~# /etc/init.d/vsftpd start

En el cliente realizamos la prueba

jinetedeldragon@tankar:~$ ftp awqalli
Connected to awqalli.quechua.
220 Bienvenido al FTP - Awqalli Server
Name (awqalli : jinetedeldragon): anonymous
331 Please specify the password.
Password:
230 Login successful
Remote system type is UNIX
Using binary mode to transfer files.
ftp> put hola.txt
local: hola2.txt remote: hola2.txt
200 PORT command successful. Consider using PASV.
550 Permission denied.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-rw-r--r--    1 0       0             27 Aug 26 22:49 prueba.txt
226 Directory send OK.
ftp> get prueba.txt
local: prueba.txt remote: prueba.txt
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for prueba.txt (27 bytes).
226 File send OK.
27 bytes received in 0.02 secs (1.3 kB/s)
ftp> 221 Goodbye.

Usuarios Virtuales

Un inconveniente que encontramos al utilizar el servicio de FTP es poder brindar un alojamiento de archivos para usuarios externos.
Esto implica habilitar un usuario de sistema para ftp con el peligro que eso conlleva. (logueo, ejecución de scripts, robo de información, etc)
O bien, podemos optar por utilizar un usuario virtual.

Vamos a crear un usuario uploader y vamos a impedir que otros usuarios de sistema utilicen el servicio de ftp.

root@awqalli:~# vi /etc/vsftpd.conf
#cambio esta linea de YES a NO para impedir acceso de usuario anonimo
anonymous_enable=NO
#modificamos nuevamente para permitir acceso local
local_enable=YES
# agrego estas líneas para impedir acceso de usuarios de sistema
userlist_enable=yes
userlist_file=/etc/vsftpd.deny_list
root@awqalli:~# vi /etc/vsftpd.deny_list
# Usuarios bloqueados para acceso ftp
jinetedeldragon
root
root@awqalli:~# groupadd ftpuser
root@awqalli:~# chmod 755 /home/ftp
root@awqalli:~# chown root:ftpuser /home/ftp
root@awqalli:~# useradd -g ftpuser -d /home/ftp -s /bin/false uploader
root@awqalli:~# passwd uploader
root@awqalli:~# vi /etc/vsftpd.user_list
#usuarios que podrán acceder ftp
uploader
root@awqalli:~# /etc/init.d/vsftpd restart

jinetedeldragon@tankar:~$ ftp awqalli
Connected to awqalli.quechua.
220 Bienvenido al FTP - Awqalli Server
Name (awqalli : jinetedeldragon): uploader
331 Please specify the password.
Password: *********
230 Login successful
Remote system type is UNIX
Using binary mode to transfer files.
ftp> put hola.txt
local: hola2.txt remote: hola2.txt
200 PORT command successful. Consider using PASV.
226 File receive OK.
ftp> get test.txt
local: test.txt remote: test.txt
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for test.txt (27 bytes).
226 File send OK.
27 bytes received in 0.02 secs (1.3 kB/s)
ftp> 221 Goodbye.

Probamos que no funcione el usuario anónimo y algún usuario de sistema.

jinetedeldragon@tankar:~$ ftp awqalli
Connected to awqalli.quechua.
220 Bienvenido al FTP - Awqalli Server
Name (awqalli : jinetedeldragon): anonymous
331 Please specify the password.
530 Login incorrect.
Login failed
jinetedeldragon@tankar:~$ ftp awqalli
Connected to awqalli.quechua.
220 Bienvenido al FTP - Awqalli Server
Name (awqalli : jinetedeldragon): jinetedeldragon
331 Please specify the password.
530 Login incorrect.
Login failed

Finalizando

Después de ver las distintas maneras de configurar un servidor FTP, vemos a las claras que es un servicio muy útil en ciertas circunstancias.

Compartir información con amigos, tener siempre a mano ese documento tan importante, o poder habilitar un espacio de almacenamiento para que tus amigos suban esas fotos de las últimas vacaciones.

En lo personal, prefiero mantener el servicio apagado y arrancarlo cuando lo necesite, pero ustedes pueden usarlo a discreción… (eso si, nunca pero nunca habiliten el usuario de sistema para acceder desde internet… usen usuarios virtuales)

Ojalá les sea de utilidad…

2 comentarios (+¿añadir los tuyos?)

  1. xavi.office@gmail.com
    Abr 18, 2012 @ 06:50:48

    Muy buen tutorial ¿cómo se puede hacer para que un usuario pueda tener acceso a todo el sistema desde ftp? Lo digo para el tema de servidor web y subir plantillas, plugins, etc a dicho servidor.
    Bueno sería más seguro si solamente tuviera acceso a la carpeta del servidor web. Es que he estado probando pero sólo tengo acceso a su carpeta de su usuario y no sale de ahí. Gracias

    Responder

    • jinetedeldragon
      Abr 18, 2012 @ 07:27:46

      Hola, si sólo tú estás accediendo a tu propio servidor y quieres acceso a todo el sistema, te recomiendo que uses SSH en lugar de FTP.
      Luego puedes usar SCP o SFTP para copiar archivos del equipo local al remoto o viceversa.

      Si aún asi quieres usar FTP y poder salir de la jaula de chroot, solo debes cambiar chroot_local_user a NO y reiniciar el servicio.

      Saludos

      Responder

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Archivos

diciembre 2009
D L M X J V S
« Nov   Feb »
 12345
6789101112
13141516171819
20212223242526
2728293031  
A %d blogueros les gusta esto: