Voy a escribir este post para que todo aquél que lleve una hora intentando configurar este teóricamente sencillo servidor, no pierda el tiempo como lo he perdido yo.

Crear usuario FTP

$ adduser mi_usuario_ftp

Hacer que la home del usuario ftp sea solo de lectura [evitar error 500 OOPS: vsftpd: refusing to run with writable root inside chroot ()]

$ chmod a-w /home/mi_usuario_ftp

Esto hace que el directorio del usuario mi_usuario_ftp sea de solo lectura. Si no quieres esto, no lances el comando anterior y lee más abajo sobre la configuración del fichero /etc/vsftpd.conf (1)

Instalar vsftpd

$ sudo apt-get install vsftpd

Configurar vsftpd (referencia)

Descomentar o añadir las siguientes líneas del archivo de configuración /etc/vsftpd.conf

chroot_local_user=YES
chroot_list_enable=YES
# Los usuarios que aparezcan en cada una de las líneas de este fichero, podrán cambiar libremente de directorio.
# El resto, solo podrán estar en el directorio de su HOME (muy recomendable)
chroot_list_file=/etc/vsftpd.chroot_list

Así que creamos el fichero vacío para que todos los usuarios que se conecten no puedan cambiar de directorio.

$ sudo touch /etc/vsftpd.chroot_list

(1) Si quieres que el usuario pueda subir o borrar ficheros, tienes que añadir además la siguiente entrada a  /etc/vsftpd.conf

allow_writeable_chroot=YES

Impedir que ciertos usuarios puedan iniciar sesión FTP

En /etc/ftpusers está la lista de usuarios que no puede conectarse por FTP (por defecto hay usuarios como root). Bastante recomendable añadir los usuarios que no quieras que inicien sesión por FTP.

# /etc/ftpusers: list of users disallowed FTP access. See ftpusers(5).

root
daemon
bin
sys
sync
games
man
lp
mail
news
uucp
nobody

Limitar el acceso del usuario FTP (opcional)

Podemos limitar el inicio de sesión estableciendo un shell de no login

$ usermod -s /usr/sbin/nologin mi_usuario_ftp

y en el archivo de shells válidos /etc/shells, hay que añadir:

/usr/sbin/nologin

Alternativamente, si quieres que pueda iniciar sesión pero no por ssh, editamos el archivo de configuración:

$ sudo nano /etc/ssh/sshd.config

y añadir las siguientes líneas:

AllowUsers usuario1 usuario2

DenyUsers mi_usuario_ftp

Reiniciamos el servicio (En Ubuntu Server)

$ restart ssh

Y ya está todo.

Recuerda que el tráfico FTP no está encriptado y no es nada recomendable conectarse por FTP en redes sin tráfico encriptado