Montar un server FTP
Vamos a usar el ftp server que recomienda ubuntu, vsftpd, es ligero, robusto, escalable y muy fácil de configurar:
Sumario
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