FTP, (File Transfer Protocol) es un programa especial que se ejecuta en un servidor conectado normalmente en Internet (aunque puede estar conectado en otros tipos de redes, LAN, MAN, etc.). La función del mismo es permitir el desplazamiento de datos entre diferentes servidores / ordenadores.
En una imagen sería algo así:
Observamos que intervienen tres elementos:
* El servidor FTP, donde subiremos / descargaremos los archivos.
* Usuario 1, es el usuario que en este ejemplo, sube un archivo al servidor FTP.
* Usuario 2, es el usuario que en este ejemplo, se descarga el archivo subido por el usuario 1 y a continuación sube otro archivo.
http://servidorftp.es/
En esta ocasión vamos a instalar un par de Servidores FTP, con distintas variantes y tipos de funcionamiento.
Empezaremos por uno de los más utilizados, Proftpd
ProFTPd es un servidor FTP bajo licencia GPL y multiplataforma, aunque no está para Microsoft Windows. ProFTPd puede ser fácilmente configurable, siendo sus archivos de configuración muy parecidos a los de Apache. Puede ser enjaulado independientemente del sistema de archivos sobre el que trabaje y soporta IPv6.
Lo primero, la instalación:
apt-get install proftpd
Listo, muy difícil de instalarlo hasta ahora eh ..
Ahora pasemos a la configuración..
nano /etc/proftpd/proftpd.conf
Al final del archivo vamos a agregar estas dos líneas:
AccessGrantMsg "¡Bienvenido al Servidor FTP! "
AccessDenyMsg "¡Acceso denegado!"
Claramente serán las líneas de bienvenida y de "no" bienvenida a los usuarios que se conecten.
Seguimos con nuestra instalación, ahora vamos a crear una shell falsa para los usuarios.
Creamos el primer usuario:
Creamos primeramente su home..
mkdir /home/dysloke
Y luego sí, su usuario:
useradd -d /home/dysloke -s /bin/false dysloke
Ahora lo hacemos dueño y amo de su home:
chown -R dysloke /home/dysloke
Le asignamos un password al usuario "dysloke"
passwd dysloke
(repetir 2 veces la clave)
Listo, ya tenemos creado el primer usuario, repetimos los pasos y creamos otro usuario, ej: "dke"
Cuando tengamos los dos usuarios creados vamos a volver al archivo de configuración del proftpd.
nano /etc/proftpd/proftpd.conf
Y nuevamente al final del archivo añadiremos estas líneas:
<Limit LOGIN>
AllowUser dysloke
DenyAll
</Limit>
RequireValidShell off
De esta manera sólo permitiremos el acceso al usuario "dysloke".
Reiniciamos el servicio:
/etc/init.d/proftpd restart
Y nos conectamos con cualquier cliente FTP como Filezilla o Fireftp para Firefox
Listo, ya lo tenemos funcionando. !
ProFTPd seguro con TLS
Ahora vamos a pasar a una cosa un poquito más segura, como muchos sabrán los datos hasta ahora se pasan en texto plano con la peligrosidad de poder ser sniffeados o robados.
Qué vamos a hacer? Vamos a utilizar un protocolo seguro para nuestro Proftpd (TLS)
Empecemos como si no hubíeramos instalado absolutamente nada..
Instalamos entonces ProFTPd y OpenSSL:
apt-get install protftpd openssl
Editamos el archivo de configuración del ProFTPd:
nano /etc/proftpd/proftpd.conf
Agregamos al final éstas líneas:
DefaultRoot ~
IdentLookups off
ServerIdent on "FTP listo."
Ahora vamos a crear el certificado SSL, para ello crearemos un directorio llamado ssl dentro de la carpeta del ProFTPd:
mkdir /etc/proftpd/ssl
Y luego sí, creamos el certificado con el siguiente comando:
openssl req -new -x509 -days 365 -nodes -out /etc/proftpd/ssl/proftpd.cert.pem -keyout /etc/proftpd/ssl/proftpd.key.pem
Completamos los datos que nos pida y listo, tenemos certificado SSL
Ahora vamos a activar la opción del TLS en nuestra configuracion:
nano /etc/proftpd/proftpd.conf
Buscamos la línea "Include /etc/proftpd/tls.conf" y la descomentamos.
Finalmente configuramos el archivo tls.conf
nano /etc/proftpd/tls.conf/
Y seteamos los valores de las líneas que aparecen abajo de la misma manera:
TLSEngine on
TLSLog /var/log/proftpd/tls.log
TLSProtocol SSLv23
TLSOptions NoCertRequest
TLSRSACertificateFile /etc/proftpd/ssl/proftpd.cert.pem
TLSRSACertificateKeyFile /etc/proftpd/ssl/proftpd.key.pem
TLSVerifyClient off
TLSRequired on
Sólo nos quedaría reiniciar el servicio:
/etc/init.d/proftpd restart
Ahora, en el cliente seguiremos los siguientes pasos (Filezilla)
Listo, ya tenemos configurado y funcionando todo
Pasemos a otro servidor FTP, vsFTPd
Vsftpd (Very Secure FTP Daemon) es un equipamiento lógico utilizado para implementar servidores de archivos a través del protocolo FTP. Se distingue principalmente porque sus valores predeterminados son muy seguros y por su sencillez en la configuración, comparado con otras alternativas como ProFTPD y Wu-ftpd. Actualmente se presume que vsftpd es quizá el servidor FTP más seguro del mundo.
Empezamos como siempre por instalarlo!
apt-get install vsftpd
Luego vamos a instalar mysql-server, mysql-client y libpam-mysql:
apt-get install mysql-server, mysql-client libpam-mysql
Lo primero que vamos a hacer es hacer una copia del archivo de configuración de nuestro vsFTPd:
cp /etc/vsftpd.conf /etc/vsftpd.conf_orig
Luego lo editamos:
nano /etc/vsftpd.conf
Las líneas que vamos a ir descomentando son las siguientes:
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
chown_uploads=YES
nopriv_user=vsftpd
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
Y al final de ese archivo agregamos éstas líneas:
guest_enable=YES
guest_username=vsftpd
local_root=/home/vsftpd/$USER
user_sub_token=$USER
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd_user_conf
Si son fiacas, pueden descargar el archivo desde acá: BAJAR ARCHIVO DE CONFIGURACION
Ahora vamos a empezar a configurar las cuentas que van a tener acceso a nuestro FTP, para ello utilizaremos MySQL.
mysql -u root -p
Nos logueamos y escribimos:
use mysql
Seguimos estos pasos:
Creamos el usuario en MySQL:
INSERT INTO user (Host, User, Password) VALUES ('localhost','vsftpd',password('123123'));
Le damos los privilegios:
INSERT INTO db (Host, Db, User, Select_priv) VALUES ('localhost','vsftpd','vsftpd','Y');
Actualizamos los privilegios:
FLUSH PRIVILEGES;
Creamos la base de datos vsftpd:
CREATE DATABASE vsftpd;
use vsftpd;
CREATE TABLE `usuarios` (
`usuario` varchar(30) NOT NULL default '',
`password` varchar(50) NOT NULL default ''
);
Agregamos el usuario "fantasma"
useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd
Ahora vamos a configurar el archivo vstpd dentro de /etc/pam.d
Borramos todo su contenido y copiamos estas líneas:
nano /etc/pam.d/vsftpd
auth required pam_mysql.so user=vsftpd passwd=123123 host=localhost db=vsftpd table=usuarios usercolumn=usuario passwdcolumn=password crypt=2
account required pam_mysql.so user=vsftpd passwd=123123 host=localhost db=vsftpd table=usuarios usercolumn=usuario passwdcolumn=password crypt=2
Creamos un usuario para probar el FTP en nuestro MySQL:
mysql -u root -p
INSERT INTO usuarios (usuario, password) VALUES ('test',password('12345'));
Creamos un directorio para el usuario "test"
mkdir /home/vsftpd/test
Y cambiamos de grupo al usuario:
chown vsftpd:nogroup test
Ahora intentamos conectarnos con el usuario "test" y la clave "12345" a nuestro FTP