Montar un server FTP

De enunpimpam
Saltar a: navegación, buscar

Vamos a usar el ftp server que recomienda ubuntu, vsftpd, es ligero, robusto, escalable y muy fácil de configurar:

Instar server ftp

sudo apt-get install vsftpd

Ya esta... esta funcionado pero con la configuración por defecto, esta el servicio activo escuchando en el puerto 21, pero con acceso anónimo y permisos de lectura (eso no mola nada) para que no se nos cuele cualquiera a nuestro servidor quitaremos el acceso anónimo.

Configurar vsftpd

Editamos el archivo de configuración vsftpd.config

sudo gedit /etc/vsftpd.conf

Y realizamos los siguientes cambios:

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
ftpd_banner=Bienvenidos a nuestro Servidor FTP de enunpimpam.com
chroot_local_user=YES

Comentare los parámetros mas básicos...

  • listen = YES

Se inicie con el sistema.

  • anonymous_enable = NO

No permitimos que usuarios anónimos puedan conectarse a nuestro servidor.

  • local_enable = YES

Para poder conectarse con los usuarios locales del servidor donde está instalado.

  • write_enable = YES

Si quieres que los usuarios puedan escribir y no sólo descargar cosas.

  • local_umask = 022

Esta máscara hace que cada vez que subas un archivo, sus permisos sean 755. Es lo más típico en servidores FTP.

  • chroot_local_user = YES
  • chroot_list_enable = YES

Sirven para que los usuarios locales puedan navegar por todo el árbol del directorios del servidor. Evidentemente esto sólo queremos permitírselo a ciertos usuarios, para ello tenemos el siguiente parámetro.

  • chroot_list_file = /etc/vsftpd.chroot_list

Indicamos el fichero donde están listados los usuarios que pueden navegar hacía arriba por los directorios del servidor, lo normal es que sea el administrador del servidor y poco más.

Reiniciar el servicio

Por ultimo solo nos queda reiniciar el servicio de ftp

sudo /etc/init.d/vsftpd restart

Ya esta todo perfecto el usuario login sera el usuario y contraseña de nuestro linux, no hace falta crear cuentas ftp, para añadir nuevos usuarios hay que crear cuentas con adduser (esa es otra historia)

Grupo FTP

Es interesante que se englobe los usuarios del ftp en un mismo grupo, por defecto al instalar el vsftpd se crear un usuario ftp si se desea otro el comando es:

sudo groupadd ftp

Tambien me gusta en jaularlos en un directorio sin acceso posible a cualquier otra parte del servidor


Creamos una shell fantasma para que no puedan entrar a la consola del servidor:

sudo mkdir /bin/ftp

Abrimos la lista de shells del sistema:

sudo nano /etc/shells

Agregamos al final nuestra shell fantasma

/bin/ftp

Usuarios FTP

Por defecto en linux todos los usuarios que se crean están dentro del directorio home esto es un lio si se tiene muchos usuarios con diferentes configuraciones y funciones, yo prefiero agruparlos, por eso crearemos una carpeta ftp dentro de home donde estarán todos los usuarios del FTP

sudo mkdir /home/ftp

Creamos la carpeta del usuario.

sudo mkdir /home/ftp/pedro

Creamos el usuario:

sudo useradd -g ftp -d /home/ftp/pedro -c "Nombre y Apellidos" pedro
  • -g ftp

El usuario pertenece al grupo FTP

  • -d /home/ftp/pedro

Es el directorio principal del usuario

  • -c "Nombre y Apellidos"

Queda claro No..!!!

Asignamos una contraseña para el usuario

sudo passwd pedro

Asignamos la shell fantasma

sudo usermod -s /bin/ftp pedro

Errores comunes

530 Login incorrect

Este error es el más común con la última versión del vsftpd. Es un gran quebradero de cabeza con una solución muy simple...(desinstalar e instalar)

sudo apt-get remove vsftpd
sudo rm /etc/pam.d/vsftpd

sudo apt-get install vsftpd

500 OOPS: vsftpd: refusing to run with writable root inside chroot()

Este si que me volvió loco...., y es simple es porque vsftpd no permite que los usuarios puedan escribir en la carpeta raiz del FTP. La mejor solución es crear una carpeta dentro y asignarles los permisos para ser utilizada

sudo chmod 555 /home/ftp/pedro
sudo mkdir /home/ftp/pedro/documentos
sudo chown pedro:ftp /home/ftp/pedro/documentos

El servidor envió una respuesta pasiva con una dirección no enrutable

El servidor envió una respuesta pasiva con una dirección no enrutable. Usando en su lugar la dirección del servidor.

Este error si que es bueno...., se da porque estamos accediendo al ftp mediante Filezilla y en la configuración de transferencia esta activado Pasivo

Archivo > Gestor de sitios > Opciones de Transferencia > Activo

Seguridad FTP con TLS

Es importante poder habilitar la transferencia de los datos entre el cliente y el servidor mediante la capa de seguridad de transporte.

Hay muchas formas de obtener un certificado SSL.

  • Podemos generar uno con openssl (no sera de una entidad certificada pero funcionara)
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
  • Podemos crear un subddominio ejecutar cerbot y que el se ocupe de todo.
  • Comprar un certificado.

De cualquier de las formas hay que configurar vsftpd

nano /etc/vsftpd.conf
ssl_enable=YES
'rsa_cert_file=/etc/ssl/private/TUCERTIFICADO.pem'
'rsa_private_key_file=/etc/ssl/private/TUCERTIFICADO.pem'
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO
ssl_ciphers=HIGH

Cuidado quitar ' de las lineas de path de los certificados