Tabla de contenidos
Las siglas FTP significan File Tranasfer Protocol y es un protocolo de comunicaciones no cifrado y, por lo tanto, inseguro para almacenar ficheros. Siempre que podamos, utilizaremos SFTP en vez de FTP si queremos cifrar el tráfico.
En cualquier caso, FTP todavía es un servicio muy utilizado en servicios públicos donde no importa la seguridad de los datos almacenados.
En Linux es muy común utilizar el producto vsftp (Very Secure FTP) para configurar un servicio de FTP público.
El fichero de configuración suele estar el /etc/vsftpd/vsftpd.conf y dependiendo de si queremos un servicio privado o anónimo configuraremos las directivas de este fichero de una manera u otra.
Un ejemplo de configuración sería el siguiente:
Deshabilitamos los accesos anónimos
anonymous_enable=NO
Enjaular usuarios con vsftpd (chroot)
- Habilitamos el enjaulamiento de usuarios para que únicamente puedan acceder a un directorio concreto de nuestro sistema y no más allá:
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
chroot_local_user indica que el directorio de enjaulamiento es el $HOME del usuario que se conecta.
chroot_list_enable y chroot_list_file se utilizan para excluir el enjaulamiento de los usuarios que se definen en el fichero especificado.
- Si deseamos enjaular las conexiones FTP de los usuarios anónimos, también podemos:
anonymous_enable=YES
anon_root=/home/ftp
Deshabilitar el acceso a la shell del sistema
Por seguridad, es altamente recomendable que los usuarios que solamente se conectan por FTP no puedan iniciar una sesión en el servidor:
myftpuser:x:1050:1050:FTP de test:/ftp/myftpuser:/sbin/nologin
# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/tcsh
/bin/csh
/bin/ksh
/bin/false
/usr/bin/ksh
/usr/bin/pdksh
/usr/libexec/openssh/sftp-server
/usr/bin/ftp
#
Arranque del servicio VSFTPD
Una vez que ya hemos terminado de configurar vsftp, lo arrancaremos como un servicio más del sistema operativo.
En RedHat 7, utilizaríamos los comandos:
- Arranque del servicio con el boot del sistema: systemctl enable vsftpd
- Arranque del servicio: systemctl start vsftpd
- Parada del servicio: systemctl stop vsftpd
Errores con los que me he encontrado
# ftp localhost
Connected to localhost (127.0.0.1).
500 OOPS: vsftpd: cannot locate user specified in ‘ftp_username’:ftp
ftp> bye
#
Se soluciona incluyendo esta directiva en el fichero /etc/vsftpd/vsftpd.conf:
ftp_username=nobody