User Tools

Site Tools


apuntes:servicios_transferencia

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
apuntes:servicios_transferencia [2017/09/26 20:59] – [Servicio FTP (File Transfer Protocol)] Santiago Faciapuntes:servicios_transferencia [2019/01/04 13:02] (current) – external edit 127.0.0.1
Line 10: Line 10:
  
 === Servidores FTP === === Servidores FTP ===
 +
 +[[http://www.proftpd.org|Proftpd]] es uno de los servidores FTP más utilizados en entornos Linux. En nuestro caso, que contamos con Debian 9, podemos instalarlo directamente utilizando ''apt-get''
  
 <code bash> <code bash>
 santi@zenbook:$ sudo apt-get install proftpd santi@zenbook:$ sudo apt-get install proftpd
 </code> </code>
 +
 +El fichero de configuración principal lo podemos encontrar en ''/etc/proftpd/proftpd.conf'', donde podremos configurar algunos parámetros como pueden ser los mensajes de bienvenida (será útil ocultarlos o modificarlos para no dar pistas a futuros atacantes) y el puerto donde escucha el servicio.
  
 <file apache /etc/proftpd/proftpd.conf> <file apache /etc/proftpd/proftpd.conf>
Line 25: Line 29:
  
 === Servidores SFTP === === Servidores SFTP ===
 +
 +En el caso de que queramos utilizar una opción segura a este protocolo, podemos utilizar también ''sftp'' que permite, utilizando SSH, realizar las mismas operaciones que un servidor FTP y de forma segura.
  
 <code bash> <code bash>
 santi@zenbook:$ sudo apt-get install openssh-server openssh-sftp-server santi@zenbook:$ sudo apt-get install openssh-server openssh-sftp-server
 </code> </code>
 +
 +En este caso el fichero de configuración lo encontraremos en ''/etc/ssh/sshd_config''
  
 === Clientes FTP === === Clientes FTP ===
 +
 +Como cliente FTP de consola tendremos el comando ''ftp''
  
 <code bash> <code bash>
Line 44: Line 54:
 ftp> | ftp> |
 </code> </code>
 +
 +Utilizando el comando ''help'' podemos contar con ayuda interactiva acerca de todos los comandos disponibles
  
 <code bash> <code bash>
Line 67: Line 79:
 </code> </code>
  
 +A continuación se describen los más utilizados
 +
 +<table>
 ^ Comando ^ Descripción ^ ^ Comando ^ Descripción ^
 | bye | Cierra la sesión FTP | | bye | Cierra la sesión FTP |
Line 75: Line 90:
 | ls | Lista el contenido de un directorio de la máquina remota| | ls | Lista el contenido de un directorio de la máquina remota|
 | mdelete | Elimina múltiples ficheros en la máquina remota | | mdelete | Elimina múltiples ficheros en la máquina remota |
 +| mget | Descarga múltiples ficheros en la máquina local |
 | mkdir | Crea un directorio en la máquina remota | | mkdir | Crea un directorio en la máquina remota |
 | mput | Sube múltiples ficheros a la máquina remota | | mput | Sube múltiples ficheros a la máquina remota |
Line 82: Line 98:
 | rmdir | Elimina un directorio en la máquina remota | | rmdir | Elimina un directorio en la máquina remota |
 | verbose | Activa/Desactiva mostrar mensajes | | verbose | Activa/Desactiva mostrar mensajes |
 +<caption>Resumen de comandos FTP</caption></table>
 +
 +Hay que tener en cuenta que podemos obtener, interactivamente, ayuda específica de cada comando a través de ''help''
  
 <code bash> <code bash>
Line 87: Line 106:
 rmdir      remove directory on the remote machine rmdir      remove directory on the remote machine
 </code> </code>
 +
 +En el caso de que queramos conectar a un FTP seguro, utilizando el servicio SSH, podemos hacerlo conectando a través del comando ''sftp''
  
 <code bash> <code bash>
Line 94: Line 115:
 Are you sure you want to continue connecting (yes/no)?  Are you sure you want to continue connecting (yes/no)? 
 </code> </code>
 +
 +Igualmente contamos con ayuda sobre los diferentes comandos de que disponemos, muy del estilo a los que podemos encontrar en un servicio FTP
  
 <code bash> <code bash>
Line 132: Line 155:
 sftp>  sftp> 
 </code> </code>
 +
 +Conviene tener en cuenta que la IP asociada a un dominio puede cambiar. En ese caso el comando ''sftp'' de conexión con el servidor nos avisará de que quizás nos estén realizando un ataque //man in the middle// puesto que el guarda la firma del equipo y ahora ya coincide al haberse modificado su IP.
  
 <code bash> <code bash>
Line 152: Line 177:
 Couldn't read packet: Connection reset by peer Couldn't read packet: Connection reset by peer
 </code> </code>
 +
 +En el caso de que estemos seguros de que simplemente ha sido un cambio de IP y confiemos plenamente en el servidor al que nos vamos a conectar, podremos añadir dicho dominio al registro de //hosts conocidos// con el siguiente comando:
  
 <code bash> <code bash>
Line 159: Line 186:
 Original contents retained as /home/santi/.ssh/known_hosts.old Original contents retained as /home/santi/.ssh/known_hosts.old
 </code> </code>
 +==== Configuración del servicio FTP ====
 +
 +=== Creación de un sistema de cuentas de usuario ===
 +
 +El primer paso será instalar el servidor FTP ''proftpd'' y el módulo para que éste sea capaz de trabajar con Bases de Datos MySQL, puesto que usaremos una Base de Datos para almacenar los diferentes usuarios junto con la información necesaria.
 +
 +<code bash>
 +santi@zenbook:$ sudo apt-get install proftpd proftpd-mod-mysql
 +</code>
 +
 +En el sistema tendremos que crear un grupo y usuario al que asignaremos a todos aquellos usuarios que, más adelante, se registren a través de la Base de Datos
 +
 +<code bash>
 +santi@zenbook:$ groupadd grupoftp
 +santi@zenbook:$ useradd -s /bin/false -d /dev/null -g grupoftp usuarioftp
 +</code>
 +
 +Y echando un vistazo a los ficheros ''/etc/passwd'' y ''/etc/group'' veremos cuáles son los UID y GID asignados
 +
 +<code bash>
 +santi@zenbook:$ cat /etc/passwd | grep usuarioftp
 +usuarioftp:x:1002:1003::/dev/null:/bin/false
 +santi@zenbook:$ cat /etc/group | grep grupoftp
 +grupoftp:x:1003:
 +</code>
 +
 +De la salida de los dos últimos comandos podemos concluir que el usuario ''usuarioftp'' tiene un UID de 1002 y un GID de 1003 (que coincide con el grupo al que pertenece). Tomaremos esos valores como por defecto para los valores de UID y GID de los usuarios en la Base de Datos
 +
 +<code sql>
 +CREATE DATABASE ftp;
 +USE ftp;
 +
 +CREATE TABLE usuarios (
 + usuario VARCHAR(30) NOT NULL UNIQUE,
 + password VARCHAR(80) NOT NULL,
 + uid INTEGER default 1002,
 + gid INTEGER default 1003,
 + home VARCHAR(255),
 + shell VARCHAR(255) default NULL,
 + bloqueado BOOLEAN default 0
 +);
 +
 +CREATE TABLE grupos (
 + nombre VARCHAR(30) NOT NULL,
 + gid INTEGER NOT NULL,
 + miembros VARCHAR(255)
 +);
 +</code>
 +
 +Activamos el módulo de SQL en la configuración de proftpd
 +
 +<file apache /etc/proftpd/modules.conf>
 +. . .
 +LoadModule mod_sql.c
 +. . .
 +</file>
 +
 +Y en el fichero de configuración principal modificamos algunos parámetros
 +
 +<file apache /etc/proftpd/proftpd.conf>
 +. . .
 +# No es necesario que los usuarios tengan una consola de sistema
 +RequireValidShell Off
 +# Hace que los usuarios no puedan salir de su carpeta de inicio
 +DefaultRoot ~
 +. . .
 +</file>
 +
 +Ahora pasamos a configurar la conexión de proftpd con la Base de Datos
 +
 +<file apache etc/proftpd/sql.conf>
 +SQLBackend       mysql
 +SQLAuthTypes          Backend Crypt 
 +SQLConnectInfo        ftp@localhost usuario_mysql contrasena_mysql
 +SQLUserInfo           usuarios usuario password uid gid home shell
 +SQLGroupInfo          grupos nombre gid miembros
 +SQLUserWhereClause    "bloqueado = '0'"
 +</file>
 +
 +Para que los cambios sean efectivos tendremos que reiniciar el servicio
 +
 +<code bash>
 +santi@zenbook:$ sudo service proftpd restart
 +</code>
 +
 +Y registrar el grupo en la Base de Datos:
 +
 +<code sql>
 +INSERT INTO grupos (nombre, gid, miembros) VALUES ("grupoftp", 1003, "usuarioftp");
 +</code>
 +
 +Por último, nos queda dar de alta algún usuario en la Base de Datos para comprobar que todo funciona correctamente
 +
 +<code sql>
 +INSERT INTO usuarios (usuario, password, home) VALUES ("santi", PASSWORD("misupercontraseña"), "/var/ftp/santi");
 +</code>
 +
 +Habrá que asegurarse de que dicha carpeta existe y, en caso contrario, crearla y asignarle permisos correctamente
 +
 +<code bash>
 +santi@zenbook:$ sudo chown -R usuarioftp:grupoftp /var/ftp
 +</code>
 +
 +Y ahora ya podemos probar a conectarnos a nuestro servidor FTP con el nuevo usuario creado
 +
 +<code bash>
 +santi@zenbook:$ ftp localhost
 +Connected to localhost.
 +220 Proftpd 1.3.5b Server (Debian) [::1]
 +Name (localhost:santi): |
 +</code>
 +
  
-<figure> 
-{{ filezilla.png}} 
-{{bareftp.png }} 
-<caption>Clientes gráficos para FTP/FTPS/SSH FTP</caption></figure> 
  
 ==== Servicio SSH (Secure SHell) ==== ==== Servicio SSH (Secure SHell) ====
Line 184: Line 319:
 santi@zenbook:$ scp -r misitio santi@misitio.com:/var/www/html santi@zenbook:$ scp -r misitio santi@misitio.com:/var/www/html
 </code> </code>
 +
 +=== Configuración del servicio SSH ===
  
 ---- ----
  
 ===== Ejercicios ===== ===== Ejercicios =====
 +
 +  - Conectate a un servidor FTP y descarga varios ficheros evitando que el servidor te pida confirmación para descargar cada uno de ellos
 +  - Conectate a un servidor FTP y sube varios ficheros que se encuentran en diferentes carpetas en tu equipo local. En el servidor deben estar juntos en una sola carpeta que se llamara ''documentos''
 +  - Conectate al servidor FTP y elimina una serie de ficheros
 +  - A partir de tu máquina Debian 9 instala lo necesario para montar un sistema de usuarios en MySQL para el servidor FTP proftpd
  
 ---- ----
apuntes/servicios_transferencia.1506459568.txt.gz · Last modified: 2019/01/04 13:02 (external edit)