Hoy os presentamos un tutorial sobre cómo configurar un servidor FTP, utilizando como sistema operativo el reciente (en su sector) CentOS 7 y como servicio vsftpd, que es el que trae por defecto este sistema operativo.
No vamos a entrar en detalles demasiados profundos, no vamos a explicar con detenimiento el fichero de configuración de vsftpd, simplemente nos centraremos en los pasos necesarios para conseguir hacer funcionar el acceso anónimo al FTP, cambiar la carpeta por defecto de este modo de acceso y tratar con usuarios locales.
Para hacer todo esto hay que tener permisos de administrador, siendo lo más frecuente en el mundo de GNU/Linux iniciar sesión como root o bien usar sudo.
Instalación y puesta en marcha de vsftpd
Instalar vsftpd en CentOS 7 es sencillo, en esta versión todavía se sigue usando Yum, el gestor de paquetes del universo de Red Hat. Además vsftpd no tiene dependencias, así que no hay riesgos de alterar otras partes del sistema.
Para instalar vsftpd hay que ejecutar el siguiente comando, y luego aceptar la instalación sugerida:
yum install vsftpd
Instalado el servicio de FTP, tenemos una serie de comandos básicos para poder manejar el servicio. Hay que recordar que CentOS 7 utiliza systemd en vez de Upstart, así que los comandos para poder activar, reiniciar y accionar el servicio durante el arranque del sistema cambian.
Para iniciarlo:
Para que arranque junto con el sistema:
systemctl enable vsftpd.service
Para quitarlo del arranque del sistema:
systemctl disable vsftpd.service
El fichero de configuración de vsftpd es /etc/vsftpd/vsftpd.conf, Para los que anden perdidos, es un fichero llamado vsftpd.conf localizado en la subcarpeta /etc/vsftpd. En él solo vamos a tocar dos opciones.
anonymous_enable=YES local_enable=YES
Abrir el puerto en el firewall
Abrir el puerto en el firewall es muy importante, ya que si no lo hacemos todos los intentos de conectarse al servidor de FTP serán rechazados. Para esto hay que abrir el puerto en el firewall y para que los efectos sean permanentes hay que ejecutar estos dos comandos.
Para abrir el puerto en el firewall:
firewall-cmd --permanent --add-service=ftp
Una vez abierto el puerto, hay que refrescar el firewall, para lo cual se necesita reiniciar su servicio:
systemctl restart firewalld.service
Configurar vsftpd para el acceso anónimo
Con figurar vsftpd para el acceso anónimo es bien sencillo, ya que esto lo hace por defecto, aunque se puede cambiar la opción de local_enable=YES a local_enable=NO en el fichero vsftpd.conf, para así asegurarnos de alguna manera que no se está ejecutando lo que no se debe, pero es un paso totalmente prescindible.
Para usar el acceso anónimo al FTP solo hay que iniciar el servicio como hemos indicado en el punto anterior, abrir un cliente de FTP, introducir la IP del servidor y conectarse.
Ahora surge la pregunta de cómo obtener la IP del servidor. En caso de el servidor esté en el mismo ordenador físico que el cliente la respuesta el clara, localhost o 127.0.0.1, siendo lo segundo más efectivo que lo primero. Sin embargo puede que el servidor haya sido instalado en una máquina virtual, o bien se disponga de máquinas extra y se haya montado una red con ordenadores conectados mediante cable o Wi-Fi. En esas situaciones solo queda usar este comando para obtener la IP en CentOS 7:
ip -d addr
Cambiar la carpeta del acceso anónimo
La carpeta por defecto del acceso anónimo al FTP es /var/ftp, sin embargo puede interesar cambiarla.
Para ello hay que dirigirse al fichero vsftpd.conf en /etc/vsftpd y añadir al final la siguiente opción, teniendo que poner de forma obligatoria la ruta absoluta:
anon_root=/rutaperonalizada
En /rutapersonalizada se pone la ruta que se crea conveniente, siempre y cuando no coincida con otra que resulta crítica para el sistema, siendo conveniente crear una a través de mkdir, dentro de la carpeta /home o /mnt, que no suelen contener nada crítico a nivel de sistema en su interior.
Cambiada ya la ruta del acceso anónimo, en teoría reiniciando el servicio ya se tendrían que aplicar los cambios, sin embargo al acceder al FTP vemos que no nos da permiso, y es que hemos topado con la segunda gran “barrera” de los sistemas basados en tecnologías Red Hat, SeLinux. En este tutorial vamos a ser un poco más sutiles y no se va a desactivar, teniendo que jugar con él un poco para que deje hacer aquello que pretendemos.
Para que SeLinux acepte la nueva carpeta del acceso anónimo hay que indicarle que es de acceso público, introduciendo el siguiente comando:
chcon -R -t public_content_t /rutapersonalizada
Introducido este comando ya debería de dejar acceder al nuevo directorio asignado para el acceso anónimo.
Configurar usuarios locales en el servidor
Para poder usar usuarios locales en el servidor, con su correspondiente contraseña, hay que tener los usuarios locales permitidos en vsftpd.conf, con la opción local_enable=YES. Si teníamos esta opción en NO anteriormente, hay que reiniciar el servicio para que los cambios surtan efecto.
Ahora queda crear el usuario, que no tiene ningún misterio para aquellos que acostumbran a crearlos desde la consola de comandos, ya que el proceso cambia poco:
useradd -g ftp -d /home/usuario usuario
Descomponemos la línea de comando:
- useradd: Indica que queremos añadir un nuevo usuario.
- -g: Indica el grupo al que va a pertenecer el usuario, en este caso ftp.
- -d: Es el directorio del usuario, su home, en este caso /home/usuario.
- usuario: Es el nombre del usuario.
El usuario ya está creado, sin embargo hay que asignarle una contraseña, para lo cual se utiliza el clásico passwd:
passwd usuario
Ahora queda indicarle a SeLinux que permita a los usuarios locales acceder su home a través del FTP:
setsebool -P ftp_home_dir on
Ahora solo queda abrir el cliente, poner la IP del servidor, el usuario y la contraseña y ya tendría que permitir el acceso, pudiendo subir contenidos, ya que se ha iniciado sesión con el usuario que es el propietario de la subcarpeta.
Hacer que un usuario local y el acceso anónimo compartan carpeta
El acceso anónimo, tal y como lo hemos mostrado, se muestra un poco corto, difícil de darle utilidad, al menos que se configure el acceso anónimo al FTP desde un ordenador de escritorio en producción, en el cual se puede copiar y pegar los contenidos al directorio a golpe de ratón. Sin embargo si quien tiene que suministrar los contenidos no usa su desktop como servidor de FTP, sino un ordenador aparte, empieza a ser complicado poder compartir contenidos, ya que el usuario local y el acceso anónimo no pueden compartir carpeta debido a que SeLinux lo impide.
Para poder compartir una carpeta de usuario con el acceso anónimo en primer lugar hay que ir al fichero vsftpd.conf y en la opción anon_root poner la ruta absoluta del directorio del usuario local, siguiendo con este ejemplo:
anon_root=/home/usuario
Después hay que reiniciar el servicio y, además, indicar a SeLinux que permita acceso total en el servicio de FTP a través de la siguiente línea de comando:
setsebool allow_ftpd_full_access on
Después hay que dar permisos a los usuarios ajenos al propietario para que puedan ver los contenidos de su carpeta, ya que por defecto los sistemas de tecnología Red Hat utilizan una umask de 077 en la creación de las carpetas de usuario, así que solo el propietario tiene permisos sobre su carpeta personal. Para arreglar esto hay que otorgarle permisos de lectura y ejecución a los demás con chmod:
chmod -R 755 /home/usuario
Con esto ya el usuario local y el acceso anónimo ya comparten directorio, y lo que es subido por el usuario local puede ser descargado por las personas que acceden de forma anónima al FTP.
Conclusión
Este tutorial no convierte a nadie en experto en servidores FTP, pero se puede considerar una inciación, que también puede dar para configurar un pequeño servidor casero para una pequeña empresa o bien para un servidor de pruebas para desarrollo web, por ejemplo.
Quiero darle un agradecimiento especial a ComputerNetworkingNotes.com, que publicó un extenso tutorial sobre vsftpd sobre CentOS 6, que ha sido la base para este tutorial y el vídeo que se puede ver abajo, que explica de forma más práctica el proceso.