[Howto] Servidor FTP

Imagen de carlosV2.0
0 puntos

Antes que nada, debo comentar varias cosas:

1) Este tutorial lo cogí hace tiempo de una web que dejó de mostrarlo y no llegué a coger el nombre del autor. He echo algunas modificaciones pero no es mio

2) Un servidor FTP es MUY delicado. Instalarte un servidor FTP en tu ordenador, es abrir al mundo tu PC para que se pueda conectar quien quiera. A mi me han intentado entrar varias veces con el sistema de la fuerza bruta (aunq no lo han conseguido). Por eso, quiero decir que es muy delicado y te tiene que usar con cabeza.

 

Dicho esto, paso a comentar las características de mi PC:

- Ubuntu 7.04 (También testeado en Ubuntu 6.10)

- Pentium IV

- 512 MB RAM

- El software que utilizo es el VSFTPD (según dicen, el más seguro si se configura bien) 

 

Conexión a internet:

- A través de un router 

- 1 Mb/s 

 

Tutorial:


Un servicio muy habitual es el ftp, sobre todo si tenemos montado un servidor Web para que los diseñadores y webmasters puedan dejar allí sus creaciones sin molestar a los administradores, nosotros. Con este objetivo, vamos a montar un servidor ftp.

Usuario: client1
Acceso a su directorio: /var/www/dominio1
Sin shell en el sistema y en un entorno chroot

Usuario: client2
Acceso a su directorio: /var/www/dominio2
Sin shell en el sistema y en un entorno chroot

Usuario: webmaster
Acceso a su directorio: /var/www
Sin shell en el sistema y en un entorno chroot

Preparación del sistema

Antes de instalar el servidor ftp vamos a crear los usuarios y securizarlos para que tengan los mínimos permisos y sólo puedan hacer lo que nosotros definamos.

Crearemos un grupo llamado ftp al cual asociaremos los usuarios.

# groupadd ftp

Creamos los usuarios con sus correspondientes características.

#useradd -g ftp -d /var/www/dominio1 -c " Cliente 1 " client1
#useradd -g ftp -d /var/www/dominio2 -c " Cliente 2 " client2
#useradd -g ftp -d /var/www -c " webmaster " webmaster

Les asignamos un password a los usuarios con el comando passwd. Si no tiene password no funcionará.

Ahora creamos una shell fantasma en el directorio correspondiente.

#mkdir /bin/ftp

Editamos el fichero /etc/shells y la añadimos en la ultima línea y continuación editamos el fichero /etc/passwd y buscamos las líneas donde están definidos los usuarios que hemos creado antes y les añadimos el shell falso:

client1:x:1005:1005: Cliente 1 :/var/www/dominio1:/bin/ftp
client2:x:1006:1005: Cliente 2 :/var/www/dominio2:/bin/ftp
webmaster:x:1007:1005: webmaster :/var/www:/bin/ftp

Instalación del servidor

Ahora es cuando realmente vamos a realizar la instalación del servidor con el comando apt-get.

#apt-get install vsftpd

Esto descargará los paquetes y los dejará ordenados en sus directorios correspondientes junto a los scripts de arranque y parada del servicio.

Configuración del servidor

El fichero de configuración del servidor se encuentra en /etc/vsftpd.conf. Lo editamos para configurarlo a nuestro gusto y objetivo. El contenido es algo parecido, buscamos las líneas indicadas y las modificamos:

# Example config file /etc/vsftpd.conf
#Escuchando
listen=YES
#
................................................
# Desactivamos el acceso anónimo
anonymous_enable=NO
#
# Descomentamos la línea para que se puedan conectar
local_enable=YES
#
# Permitimos a usuarios locales escribir
write_enable=YES
#
# APLICA CONFIGURACIÓN UMASK
local_umask=003
#Mensajes welcome
dirmessage_enable=YES
#
# Activate logging of uploads/downloads.
xferlog_enable=YES
#
# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES
............................
#
# You may override where the log file goes if you like. The default is shown
# below.
xferlog_file=/var/log/vsftpd.log
#
# If you want, you can have your log file in standard ftpd xferlog format
xferlog_std_format=YES
# Se descomenta esto para crear una jaula
chroot_local_user=YES
# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
#chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd.chroot_list
#
# Debian customization
# secure_chroot_dir=/var/run/vsftpd
# This string is the name of the PAM service vsftpd will use.
pam_service_name=vsftpd
# This option specifies the location of the RSA certificate to use for SSL
# encrypted connections.
#rsa_cert_file=/etc/ssl/certs/vsftpd.pem
userlist_enable=YES
tcp_wrappers=YES
userlist_deny=NO

A continuación creamos el fichero vsftpd.chroot_list el cual tendrá la lista de usuarios que no tendrán acceso al servidor:

# touch /etc/vsftpd.chroot_list

Volcamos los datos a este fichero desde etc/password con el comando.

# cat /etc/passwd | awk -F: '{ print $1 }' > /etc/vsftpd.chroot_list

Esto nos genera un fichero con los login de usuarios del sistema del cual quitamos los que si queremos que tengan acceso y los ponemos en el fichero /etc/vsftpd.user_list.

Ejemplos de ficheros:

vsftpd.chroot_list

# usuarios con no acceso
root
daemon
bin
sys
sync
games
man
lp
mail
news

vsftpd.user_list

#usuarios con acceso
webmaster
client1
client2

Afinando aún más

Dentro del fichero de configuración (vsftpd.conf) algunas opciones interesantes que también podemos controlar son las siguientes:

#opciones de transferencia
#ancho banda por usuario anónimo 5kb
anon_max_rate=5100
#ancho de banda por usuario local 5kb
local_max_rate=5100
#número máximo clientes simultáneos
max_clients=5
#máximo conexiones por ip
max_per_ip=2
#envía al sistema
syslog_enable=yes
session_support=yes

 


Cosas que tienes que saber si usas este tutorial:

 

- No por crear usuarios con contraseña tienes la certeza de estar seguro. En este tutorial se muestra como crear usuarios con contraseña pero en el momento de acceder, la contraseña viaja por internet en texto llano (no encriptado) por lo que se debe escoger desde donde conectar (redes seguras) para evitar que nos snifen la conexión. Un ejemplo de red insegura para este FTP es una red Wireless.

- Puedes incrementar la seguridad subiendo los usuarios del protocolo 'ftp' al protocolo 'sftp' (Secure FTP) siguiendo otros tutos de internet y usando el OpenSSL

- Los usuarios que accedan a tu FTP, sólo podrán acceder a partir del directorio que pusiste. Nunca podrán ir hacia atrás. Es decir, si los pusiste en /var/www/user1/, el User1 solo podrá ver cualquier cosa que haya más allá de  su carpeta, es decir /var/www/user1/<loqsea> nunca podrá ver, por ejemplo, /var/www/<loqsea> ni las carpetas anteriores.

- Puedes restringir aún más el uso del FTP tocando los permisos ( 'chmod' ) de las carpetas de los usuarios. 

- La mayor seguirad que podeis tener de que no os van a quitar vuestros datos, es o bien no poniendo un FTP o bien quitando los datos de las carpetas compartidas.

 

Hasta aquí, el cómo instalar el FTP. Ahora toca abrir los puertos del router (NOTA: Si no quieres que tu FTP esté accesible a través de internet, no abras los puertos del router y solo tendran acceso los PCs de dentro de tu LAN):

Para ello, tienes que meterte en tu router y abrir el puerto 21 para que todas las conexiones que estén dirigidas a ese puerto, se retransmitan directamente al PC con el servidor.

 

Y por último, el DNS:

Para que desde cualquier lugar del mundo, puedas conectar a tu FTP, tendrás que introducir la IP del router en cada momento. Para evitar memorizar la IP del router (ya q puede cambiar), necesitas crear una cuenta en un servidor DNS. Yo uso el No-IP y me va de maravilla. Puede encontrar su cliente en Synaptic aunque te recuerdo que primero tienes que registrarte (http://www.no-ip.com/).

 

Espero que os sea de utilidad y tened mucho cuidado con vuestros datos!!!!!!!!

 

PD.: Como no, debo decir q no me hago responsable de la pérdida/robo de datos q se pueda producir a raiz de seguir este tutorial 

 

Carlos

 

....:::::::::::....

Esta comunidad demuestra que en si, un granito de arena es poca cosa, pero todos juntos, hacemos una inmensa playa.

Hoy por ti, mañana por mi. Aprender para enseñar

Imagen de DRiMeR
+1
0
-1

Buenas, yo tengo un pequeño problema y no logro solucionarlo de ninguna manera.

Antes de leer este manual ya tenía el vsftpd configurado y tal, pero después de calentarme mucho la cabeza, he decidido hacerlo IGUAL que en este HOWTO, con los mismos nombres y todo. Aun así, sigo teniendo el mismo problema. Puedo logearme como client1 (y client2) desde otropc dentro de mi red local, pero cuando usomi IP pública para conectar desde otro pc fuera de la red local, no me deja logear :S

 Como nota, decir que en el firewall he abierto los puertos 20 y 21 por si era eso, pero tampoco resulta. Se limita a decirme "user client1 cannot log in". Me podríais dar agún consejo, por favor??

 

Sólo hay 10 tipos de personas... las que saben binario y las que no.

+1
0
-1

Sólo hay 10 tipos de personas... las que saben binario y las que no.

Imagen de acp2929
+1
0
-1

Hola realmente tu aporte sobre crear cuentas de usuarios me parece interesante y te agradezco, lo he probado y funciona dentro de la red local , pero tengo un problema que cuando lo hago desde la internet no puedo acceder, este mismo problema lo tengo desde antes de crear los usuarios, he liberado los puertos en el router y leido muchos tutoriales pero la verdad no se que pueda estar sucediendo.

Esto me aparece en la pantalla cuando accedo a el desde la red local

root@alejandro-desktop:/bin/ftp# ftp 192.168.1.81
Connected to 192.168.1.81.
220 (vsFTPd 2.0.5)
Name (192.168.1.81:alejandro): webmaster
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> bye
221 Goodbye.

 

Como se puede ver arriba, es satisfactorio el ingreso al ftp.

Ahora ingreso desde la inetrnet, para ello libere los puertos 20 y 21 TCP. Y cree una cuenta en NO-IP y sucede lo siguiente:

root@alejandro-desktop:/bin/ftp# ftp tadeirl.no-ip.biz
Connected to tadeirl.no-ip.biz.
220 FTPU ready.
Name (tadeirl.no-ip.biz:alejandro): webmaster
331 Password required for webmaster.
Password:
530 Login incorrect.
Login failed.
Remote system type is Ignored.
ftp> bye
221 Have a nice day!

Yo pienso que no es problema de  los puertos del router porque llego hasta el servidor FTP y por eso pregunta el password cuando lo hago desde la internet.

Lo que tambien no entiendo, disculpa por ser nuevo en Linux, es porque despues de hacer lo que dijistes solo puedo accesar con client 2 al cual no modifique con el /bin/ftp y no con el client1 al cual si cambie esto ultimo?

client1:x:1006:1006:Cliente 1:/var/www/dominio1:/bin/ftp
client2:x:1007:1006:Cliente 2:/var/www/dominio2:/bin/sh

Gracias de antemano por la ayuda que puedas brindarme. Saludos

P.D. Te envio mi vsftpd.conf:

 ####################################################

# Example config file /etc/vsftpd.conf
#
# The default compiled in settings are fairly paranoid. This sample file
# loosens things up a bit, to make the ftp daemon more usable.
# Please see vsftpd.conf.5 for all compiled in defaults.
#
# READ THIS: This example file is NOT an exhaustive list of vsftpd options.
# Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's
# capabilities.
#
#
# Run standalone?  vsftpd can run either from an inetd or as a standalone
# daemon started from an initscript.
listen=YES
#
# Run standalone with IPv6?
# Like the listen parameter, except vsftpd will listen on an IPv6 socket
# instead of an IPv4 one. This parameter and the listen parameter are mutually
# exclusive.
#listen_ipv6=YES
#
# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=NO
#
# Uncomment this to allow local users to log in.
local_enable=YES
#
# Uncomment this to enable any form of FTP write command.
write_enable=YES
#
# Default umask for local users is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd's)
local_umask=003
#
# Uncomment this to allow the anonymous FTP user to upload files. This only
# has an effect if the above global write enable is activated. Also, you will
# obviously need to create a directory writable by the FTP user.
#anon_upload_enable=YES
#
# Uncomment this if you want the anonymous FTP user to be able to create
# new directories.
#anon_mkdir_write_enable=YES
#
# Activate directory messages - messages given to remote users when they
# go into a certain directory.
dirmessage_enable=YES
#
# Activate logging of uploads/downloads.
xferlog_enable=YES
#
# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES
#
# If you want, you can arrange for uploaded anonymous files to be owned by
# a different user. Note! Using "root" for uploaded files is not
# recommended!
#chown_uploads=YES
#chown_username=whoever
#
# You may override where the log file goes if you like. The default is shown
# below.
xferlog_file=/var/log/vsftpd.log
#
# If you want, you can have your log file in standard ftpd xferlog format
xferlog_std_format=YES
#
# You may change the default value for timing out an idle session.
#idle_session_timeout=600
#
# You may change the default value for timing out a data connection.
#data_connection_timeout=120
#
# It is recommended that you define on your system a unique user which the
# ftp server can use as a totally isolated and unprivileged user.
#nopriv_user=ftpsecure
#
# Enable this and the server will recognise asynchronous ABOR requests. Not
# recommended for security (the code is non-trivial). Not enabling it,
# however, may confuse older FTP clients.
#async_abor_enable=YES
#
# By default the server will pretend to allow ASCII mode but in fact ignore
# the request. Turn on the below options to have the server actually do ASCII
# mangling on files when in ASCII mode.
# Beware that on some FTP servers, ASCII support allows a denial of service
# attack (DoS) via the command "SIZE /big/file" in ASCII mode. vsftpd
# predicted this attack and has always been safe, reporting the size of the
# raw file.
# ASCII mangling is a horrible feature of the protocol.
#ascii_upload_enable=YES
#ascii_download_enable=YES
#
# You may fully customise the login banner string:
#ftpd_banner=Welcome to blah FTP service.
#
# You may specify a file of disallowed anonymous e-mail addresses. Apparently
# useful for combatting certain DoS attacks.
#deny_email_enable=YES
# (default follows)
#banned_email_file=/etc/vsftpd.banned_emails
#
# You may restrict local users to their home directories.  See the FAQ for
# the possible risks in this before using chroot_local_user or
# chroot_list_enable below.
chroot_local_user=YES
#
# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
#chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd.chroot_list
#
# You may activate the "-R" option to the builtin ls. This is disabled by
# default to avoid remote users being able to cause excessive I/O on large
# sites. However, some broken FTP clients such as "ncftp" and "mirror" assume
# the presence of the "-R" option, so there is a strong case for enabling it.
#ls_recurse_enable=YES
#
#
# Debian customization
#
# Some of vsftpd's settings don't fit the Debian filesystem layout by
# default.  These settings are more Debian-friendly.
#
# This option should be the name of a directory which is empty.  Also, the
# directory should not be writable by the ftp user. This directory is used
# as a secure chroot() jail at times vsftpd does not require filesystem
# access.
#secure_chroot_dir=/var/run/vsftpd
#
# This string is the name of the PAM service vsftpd will use.
pam_service_name=vsftpd
#
# This option specifies the location of the RSA certificate to use for SSL
# encrypted connections.
#rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
# This option specifies the location of the RSA key to use for SSL
# encrypted connections.
#rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
userlist_enable=YES
tcp_wrappers=YES
userlist_deny=NO
#opciones de transferencia
#ancho banda por usuario anónimo 5kb
anon_max_rate=5100
#ancho de banda por usuario local 5kb
local_max_rate=5100
#número máximo clientes simultáneos
max_clients=5
#máximo conexiones por ip
max_per_ip=2
#envía al sistema
syslog_enable=yes
session_support=yes
 

 ####################################################

+1
0
-1
Imagen de acp2929
+1
0
-1

Hola, ahora que dispongo con un poco más de tiempo y retomando el tema del servidor FTP, pues bueno, todo estaba correctamente funcionando (sólo que no lo percibía), el problema fue que colocaba el dominio (tder.no-ip.biz) en el browser desde una de las PC dentro de la LAN donde me ubicaba. Es aquí donde surgía el incoveniente, les recomiendo que cuando realicen pruebas para simular se encuentran fuera de su red LAN vayan a un proxies como por ejemplo: http://www.secureproxy.us y desde allí evalúen. Así ponen a prueba su servidor FTP , Web, etc. y tienen el gusto de haber logrado su objetivo.

+1
0
-1
Imagen de acp2929
+1
0
-1

También desde la Internet pueden acceder a su Servidor FTP abriendo una terminal y escribiendo:

ftp [su dominio]

En mi caso,
ftp tder.no-ip.biz

Y luego colocar su usuario (en mi caso webmaster) y contraseña

Generalmente sólo podrán visualizar el directorio asignado a su usuario FTP con el navegador que tengan escribiendo:

ftp://usuario@dominio

En mi caso,
ftp://webmaster@tder.no-ip.biz

Sin embargo no todos los navegadores tienen la opción de comportarse como un programa cliente FTP, es decir que desde sus navegadores probablemente la mayoría de veces no podrán descargar archivos o subirlos, salvo que tengan un plugin instalado con esta facilidad. Por lo que para mejores prestaciones les recomiendo que instalen algún programa FTP cliente de manera independiente como el gFTP (apt-get install gftp) o el que elijan conveniente.

+1
0
-1
Imagen de jgranado63
+1
0
-1

Muchas gracias por el howto. Ha resuleto todas mis dudas de una forma clara y concisa.
Gracias de nuevo.

+1
0
-1