Instalar vsftpd en Ubuntu
Para instalar vsftpd en Ubuntu 16.04 empleamos el comando:
sudo apt-get install vsftpd
Para iniciar, detener y reiniciar el demonio de vsftpd los comandos para iniciar, detener y reiniciar vsftpd son:
sudo systemctl restart vsftpd
sudo systemctl start vsftpd
sudo systemctl stop vsftpd
Configurar vsftpd en Ubuntu
Para añadir un usuario ejecutamos el comando:
sudo adduser miusuario
Nos solicitará que introduzcamos una contraseña. Usaremos este usuario para acceder al servidor FTP. En nuestro caso el chroot sería /home/miusuario. Además, se deben cumplir dos condiciones:
El dueño de la carpeta chroot y el usuario que se conecta por FTP no pueden ser el mismo.
La carpeta chroot no puede tener permisos de escritura.
Así que debemos cambiar el dueño de esta carpeta con el siguiente comando:
sudo chown root:root /home/miusuario
Si queremos que el usuario pueda subir archivos al servidor FTP, necesitamos crear una carpeta:
sudo mkdir /home/miusuario/ftp_subidas
sudo chown miusuario:miusuario /home/miusuario/ftp_subidas
Es importante quitar el acceso al intérprete de comandos (shell) del usuario miusuario que agregamos, puede suponer un grave riesgo de seguridad. El problema está en que al quitar acceso a la shell, vsftpd no dejará acceder al servidor FTP porque el usuario no tiene una shell válida asignada. Para solucionar esto creamos una shell personalizada, que añadimos a la lista de shells válidas y finalmente asignamos esta shell a nuestro usuario.
sudo nano /bin/ftponly
Añadimos las siguientes líneas y guardamos el archivo:
#!/bin/sh
echo "Esta cuenta solo dispone de acceso por FTP."
Damos permisos de ejecución a la shell ftponly con el comando:
sudo chmod a+x /bin/ftponly
Editamos la lista de shells válidas con el comando:
sudo nano /etc/shells
Añadimos /bin/ftponly al final de la lista:
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
/bin/ftponly
Asignamos la shell ftponly a nuestro usuario:
sudo usermod miusuario -s /bin/ftponly
No debemos usar shell nologin o estaremos creando un problema de seguridad grave.
Ya tenemos nuestro usuario listo. Ahora editamos el archivo de configuración de vsftpd con el comando:
sudo nano /etc/vsftpd.conf
Hay que modificar el archivo eliminando el carácter # en las partes correspondientes y haciendo las modificaciones tal y como se muestra a continuación:
# Allow anonymous FTP? (Disabled by default).
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
#
...
# 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
#
Reiniciamos vsftpd con:
sudo systemctl restart vsftpd
Y probamos que todo funcione correctamente.
Cómo enviar un archivo por FTP
Hacemos un ifconfig para obtener la IP del servidor Ubuntu.