Instalando Servidor FTP seguro en Ubuntu.

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: cliente_01
Acceso a su directorio: /var/www/dominio1
Sin shell en el sistema y en un entorno chroot

Usuario: cliente_02
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 ” client_01
#useradd -g ftp -d /var/www/dominio2 -c ” Cliente 2 ” client_02
#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
client_01
client_02

Despues solo ejecutamos el comando:

# sudo /etc/init.d/vsftpd restart

Y Listo, Ya tenemos nuestro Servidor FTP operativo.

Anuncios

15 Responses to “Instalando Servidor FTP seguro en Ubuntu.”


  1. 1 JOMEL 29 octubre 2007 en 20:34

    hola otra vez mira ya instale mi servidor samba, quiero hacer un ftp y con el tiempo y la practica hacer uno web y un mail bueno mi pregunta es esta que nesecito para poder tener mi servidor ftp en internet, estoy dado de alta en no-ip ya instale no ip (sudo apt-get install no-ip)lo configure “no-ip -C” me pidio los datos, bueno lo que quiero es como le puedo agregar mi dominio o mi direccion no-ip o que es lo que ocupo para poder tenerlo gracias

  2. 2 Trauko 29 octubre 2007 en 20:40

    Jomel:
    En no-ip creas un dominio al registrarte, solo tienes que poner esta direccion en cualquier navegado y listo, debe funcionar, por ultimo puedes poner la ip plublica que te asigna no-ip, si accedes en forma local, LAN, solo pones la ip de la maquina donde tienes el servidor FTP y listo.

  3. 3 jomel 30 octubre 2007 en 00:44

    oye volvi hacer los pasos y no me puede crear los usuario, bueno dime como debe estar configurado el no ip , por que lo tengo configurado en su pagina como dns host (A) no se como debo de configurarlo si es asi me puedes ayudar

  4. 4 Gustavo 21 abril 2008 en 22:43

    hola he hecho todo lo que dijiste pero no puedo acceder a mi servidor web via FTP, he abierto los puertos 20 y 21 en el router para tener acceso y no me deja, mi servidor lo tengo en /home/servidor/www/
    como puedo hacer para que me funcione????

    yo tengo instalado Xubuntu.

  5. 5 sinoptic 27 mayo 2008 en 13:58

    buen tutorial, bien explicado solo que me eh atorado en un problemita, se creo el grupo,! en el grupo añadi el usuario ” x ” bien este usuario y su carpeta de home como tu indicaste cambia a /var/www/x
    tube algunos contratiempos nada no solucionable, al fin logre acceder a ftp por medio de tu tutorial, el problema es el siguiente:

    al momento de subir un archivo en alguna carpeta secundaria que no sea /var/www/x me da el mensaje 550, te lo pondre mas sencillo si no me di a enteder

    en la carpeta /var/www/x/cgi-bin/ (no necesariamente esa…) intento subir el archivo ip.cgi y me lo rechaza con estos mensajes:

    [10:11:54] CWD /var/www/x/cgi-bin/ip.cgi
    [10:11:54] 550 Failed to change directory.
    [10:11:54] TYPE A
    [10:11:54] 200 Switching to ASCII mode.
    [10:11:54] PASV
    [10:11:54] 227 Entering Passive Mode (x,x,x,x,88,199)
    [10:11:54] Abriendo conexión de datos x.x.x.x Puerto: 22727
    [10:11:54] LIST -aL
    [10:11:55] 376 bytes transferidos. (24,4 KB/s) (15 ms)
    [10:11:55] 150 Here comes the directory listing.
    [10:11:55] 226 Directory send OK.
    [10:11:55] La operación ha sido añadida a la Cola de Transferencia. Para el estatus chequea la Cola de Transferencia.
    [10:11:56] MDTM ip.cgi
    [10:11:56] 550 Could not get file modification time.
    [10:11:56] STAT ip.cgi
    [10:11:56] 213-Status follows:
    [10:11:56] 213 End of status

    no acostumbro mucho escribir para buscar soluciones, me gusta aprender de la manera dificil de esa manera no se olvida, el problema es que por el momento eh andado con el trabajo y estudiando algo de chroot y se me dificulta darle la atencion necesaria. te dejo mi config en vsftpd.conf y mis opciones a configurar como vsftpd.user_list y vsftpd.chroot_list

    *****
    vsftpd.conf

    listen=YES
    local_enable=YES
    write_enable=YES
    local_umask=022
    chroot_local_user=NO
    max_clients=5
    dirmessage_enable=YES
    xferlog_enable=YES
    secure_chroot_dir=/var/run/vsftpd
    pam_service_name=vsftpd
    rsa_cert_file=/etc/ssl/certs/vsftpd.pem
    userlist_enable=YES
    userlist_deny=NO
    check_shell=NO

    *****
    vsftpd.user_list

    x

    ****
    vsftpd.chroot_list

    root
    daemon
    bin
    sys
    sync
    games
    man
    lp
    mail
    news

    no se si sea necesario pero te agrego el /etc/passwd de la cuenta junto con lo agregado en el /etc/shells

    1.a (/et/passwd)-
    x:x:1013:1013: prueba :/var/www/x:/bin/ftp

    1.b (/etc/shells)#~

    #!/bin/bash
    /bin/ftp

    Nota: obviamente censure mi login con ” x ” y mi direccion ip, te dejo mi correo de igual manera visitare tu blog para ver una rspuesta de tu parte

    nos vemos y espero con tu ayuda poder solucionar el problema, un saludo cordial.

  6. 6 trauko 27 mayo 2008 en 14:41

    Si te aparece el mensaje de error “550 – Create directory operation failed”, posiblemente no haya permisos suficientes para crear el directorio o estés utilizando un usuario de FTP incorrecto.

    Como norma general, utiliza el usuario principal de tu Hosting para trabajar con todo el contenido de la carpeta www, y los usuarios secundarios de FTP restringidos para las carpetas a las que se encuentren asociados. Evita modificar contenido de las carpetas restringidas con el usuario principal.

    Además, por otra parte, revisa siempre cual es el usuario asociado a la carpeta que deseas modificar, ya que todo aquel contenido generado a través de PHP, asumirá como propietario “nobody”.

    Comentanos como te va con esto.

    Saludos.

  7. 7 sinoptic 27 mayo 2008 en 15:52

    dejame revisar bien lo que comentas. hablamos del usuario principal viendo bien a que te refieres. tengo agregados a FTP algunos usuarios pero logicamente van dirigidos al /home/usuario y en este caso eso no me sirve de mucho, mi fin es llegar a la raiz del directorio apache que en este caso si no me equivoco es /var/www/

    y con referente a los permisos mi idea principal es:

    chmod -R /var/www/x/

    quiza este mal quiza no comprendi tu punto no estoy muy familiarizado con este sistema operativo, si pudieces ser un poco mas especifico realmente agraeceria tu comentario de regreso.

    (..) –>

    Además, por otra parte, revisa siempre cual es el usuario asociado a la carpeta que deseas modificar, ya que todo aquel contenido generado a través de PHP, asumirá como propietario “nobody”.

    <– (.)

    eso esta definido en /etc/shells no?
    o bien en los grupos mi contexto fue el siguiente:

    ~# groupadd ftp
    ~# useradd -g ftp -d /var/www/x -c ” prueba ” x
    ~# mkdir /var/www/x
    ~# chmod -R /var/www/x

    y de ahi crear el /bin/ftp
    agregarlo a /etc/shells
    agregar el usuario a user list de el vsftpd
    reiniciar el servicio vsftpd
    segùn veo… hice lo indicado imagino que es algo sobre los permisos
    porque en las cuentas ftp normales en /bin/bash para usuarios al crearce en /home/usuario no tengo ningun tipo de problema en ese aspecto.

    algo relamente extraño… que piensa?

  8. 8 sinoptic 27 mayo 2008 en 21:30

    bien creo que entendi tu punto abri una sesion FTP xon usuario x y me dio este resultado en consola de root:

    x 27625 0.0 0.3 3776 852 ? S 18:25 0:00 /usr/sbin/vsftpd
    nobody 27644 0.0 0.4 3752 1020 ? Ss 18:25 0:00 /usr/sbin/vsftpd
    x 27646 0.0 0.3 3776 844 ? S 18:25 0:00 /usr/sbin/vsftpd

    veo a que te referias con lo de nobody, trate de usar un poco la logica pero no me resulto como esperaba, configure el vsftpd.chroot_list y agregue al usuario “nobody” pensado… quiza esta pueda ser la solucion pero al parece no despues de reiniciar volvi a intentarlo y dio el mismo resultado. ya localizado el problema que manera existe para arreglarlo?

  9. 9 trauko 28 mayo 2008 en 04:25

    En Unix, “nobody” es el nombre convencional de una cuenta de usuario que no es propietario de los archivos, no está en los grupos privilegiados, y no tiene capacidad, excepto los que cada usuario tiene en otras.

    Por otra parte creo que solo un problema de derechos en el directorio en el que quieres entrar, osea, creaste un directorio con el usuario principal y ahora quieres acceder a un directorio al interior con otro usuario.

    Saludos.

  10. 10 sinoptic 28 mayo 2008 en 04:55

    bien… encontre la respuesta al parecer hice todo perfecto, no sin tu ayuda claro tan solo era un sencillo comando…:

    chown -R x /var/www/x

    y listo, un saludo

  11. 11 tinuviel 6 agosto 2008 en 12:02

    hola ya hice cada paso tengo los usuarios creados pero no me puedo conectar

    me sale este error:

    Error: Authentication failed.
    Error: Critical error
    Error: Could not connect to server

  12. 12 gmolleda 26 marzo 2009 en 12:04

    Faltaría asignar el propietario adecuado al directorio /var/www/dominio1

    Yo hice chown root:ftp /var/www/dominio1

    Si es inseguro o hice algo mal díganmelo, pero así me funciona.
    Antes era root:root y no me permitía escribir desde el ftp en el directorio.

  13. 14 sonia 12 agosto 2009 en 11:33

    no se nada de linux siento que soy tonta por eso kiero saber mas de como se instala y se k usted sera un buen guuia para mi atte:sonia

  14. 15 Estacion Frio 5 septiembre 2012 en 12:51

    a mi me funciono la solucion de Sinoptic
    chown root:ftp /var/www/dominio1


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




Map

Mapa de visitas.

Geo Visitors Map

Actualmente:

site statistics

Miembro de:

The Ubuntu Counter Project - user number # 5264

Blog Stats

  • 559,030 hits

A %d blogueros les gusta esto: