miércoles, 27 de junio de 2012

Debian / CentOS / RHEL - Instalación y configuración del FTP VSFTP

Quizás el protocolo FTP sea uno de los más utilizados, a pesar de que no sea el más seguro. En primer lugar, debemos saber que es FTP.

“FTP (File Transfer Protocol) o Protocolo de Transferencia de Archivos (o archivos informáticos) es uno de los protocolos estándar más utilizados en Internet siendo el más idóneo para la transferencia de grandes bloques de datos a través de redes que soporten TCP/IP. El servicio utiliza los puertos 20, y 21, exclusivamente sobre TCP. El puerto 20 es utilizado para el flujo de datos entre cliente, y servidor. El puerto 21 es utilizando para el envío de órdenes del cliente hacia el servidor.”

Fuente: http://www.alcancelibre.org

Ahora que tenemos un poco más claro, que es FTP, debemos saber de lo que estamos hablando, es decir, saber que es VSFTP

“Vsftpd (Very Secure FTP Daemon) es un equipamiento lógico utilizado para implementar servidores de archivos a través del protocolo FTP. Se distingue principalmente porque sus valores predeterminados son muy seguros, y por su sencillez en la configuración, comparado con otras alternativas como ProFTPD, y Wu-ftpd. Actualmente se presume que vsftpd podría ser quizá el servidor FTP más seguro del mundo.”

Fuente http://www.alcancelibre.org/


Estando más claro conceptualmente, debemos pasar a la parte práctica, y obviamente lo primero que debemos hacer es instalar VSFTP, para lo cual: Debian:
$ sudo aptitude install vsftp
CentOS:
$ sudo yum install vsftp
Con VSFTP instalado, y como medio de seguridad, respaldaremos la configuración por defecto, para tener un respaldo en caso de que cometamos algún error. Debian:
$ sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak 
CentOS:
$ sudo cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
El fichero de configuración trae varias líneas ya configuradas, para trabajar de una manera más limpia, lo que haremos será vaciar el fichero. Debian:
$ sudo cat /dev/null > /etc/vsftpd.conf
CentOS:
$ sudo cat /dev/null > /etc/vsftpd/vsftpd.conf
Teniendo listo el fichero, comenzaremos a trabajar en él, aquí podemos utilizar nuestro editor de texto preferido (nano, vi, vim, etc), en mi caso, utilizaré nano. Debian:
$ sudo nano /etc/vsftpd.conf
CentOS:
$ sudo nano /etc/vsftpd/vsftpd.conf
Aquí debemos realizar la configuración, la cual es la siguiente: Debian:
anonymous_enable=YES #Permite usuarios anónimos (YES/NO)
write_enable=YES
use_localtime=YES #Hora local en vez de GTM (YES/NO)
dirmessage_enable=YES #Mensaje de directorio (YES/NO)
xferlog_enable=YES #Generación de log en /var/log/xferlog (YES/NO)
ftpd_banner=Bienvenido
pam_service_name=vsftpd #Nombre del servicio PAM
local_enable=YES #Conexión de usuarios del sistema (YES/NO)
chroot_local_user=YES
chroot_list_enable=YES #Los usuarios no pueden ver otros directorios (Enjaular)
chroot_list_file=/etc/vsftpd.chroot_list #Indica ubicación del fichero vsftpd.chroot_list
#Permitir modo pasivo
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=30300
pasv_address=XX.XX.XX.XX #ip que resuelve
Centos:
listen=YES #Trabajar en modo independiente (YES/NO)
anonymous_enable=YES #Permite usuarios anónimos (YES/NO)
write_enable=YES
use_localtime=YES #Hora local en vez de GTM (YES/NO)
dirmessage_enable=YES #Mensaje de directorio (YES/NO)
xferlog_enable=YES #Generación de log en /var/log/xferlog (YES/NO)
ftpd_banner=Bienvenido
pam_service_name=vsftpd #Nombre del servicio PAM
local_enable=YES #Conexión de usuarios del sistema (YES/NO)
chroot_local_user=YES
chroot_list_enable=YES #Los usuarios no pueden ver otros directorios (Enjaular)
chroot_list_file=/etc/vsftpd/chroot_list #Indica ubicación del fichero chroot_list
#Permitir modo pasivo
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=30300
pasv_address=XX.XX.XX.XX #ip que resuelve
Si tenemos iptables activados, debemos permitir el puerto 20 y 21, u otro puerto si es que queremos
# iptables -I INPUT 5 -p tcp -m tcp --dport 20 -j ACCEPT
# iptables -I INPUT 5 -p tcp -m tcp --dport 21 -j ACCEPT
# iptables -I INPUT 5 -p tcp -m tcp --dport 30000:30300 -j ACCEPT
# service iptables save
# service iptables restart
En el caso de CentOS / RHEL tenemos SELinux, y si no lo hemos desactivado, debemos permitir todo lo necesario para trabajar con FTP, esto lo trabajamos como boolan, es decir: 0 = no permitir 1 = si permitir Lo básico que debemos agregar es lo siguiente:
$ sudo setsebool -P ftp_home_dir 1
Aquí hay una lista de lo que podemos o no permitir


Booleans
Description
ftp_home_dir
Allows FTP to read and write files in the users’ home directories.
allow_ftpd_full_access
Allows FTP servers to log in to local users and read/write all files on the system, governed by DAC.
allow_ftpd_use_nfs
Allows FTP servers to use NFS for public file transfer services.
allow_ftpd_anon_write
Allows FTP servers to upload files used for public file transfer services. Directories must be labeled public_content_rw_t.
ftpd_connect_db
Allows FTP servers to connect to the MySQL database.
allow_ftpd_use_cifs
Allows FTP servers to use CIFS for public file transfer services.
httpd_enable_ftp_server
Allows httpd to act as an FTP server by listening on the FTP port.



Respecto a los usuarios para lograr la conexión, en este ejemplo estamos utilizando los usuarios del sistema, y estos deben ser añadidos en: Debian
/etc/vsftpd.chroot_list
CentOS / RHEL
/etc/vsftpd/chroot_list
Y dentro de este, escribimos el usuario línea a línea, por ejemplo
usuario1
usuario2
usuario3
Además, estos usuarios deben pertenecer al grupo ftp del sistema, para lograr eso debemos:
# gpasswd -a  ftp
Una buena recomendación es que se programe para que el servicio vsftpd inicie con el sistema.
# chkconfig vsftpd on
Finalmente, hacemos una conexión FTP, puede ser a través del comando ftp, o de un cliente como filezilla u otro.

1 comentarios:

Publicar un comentario