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 14:57] – [Servicio SSH (Secure SHell)] Santiago Faciapuntes:servicios_transferencia [2019/01/04 13:02] (current) – external edit 127.0.0.1
Line 2: Line 2:
  
 ==== Servicio FTP (File Transfer Protocol) ==== ==== Servicio FTP (File Transfer Protocol) ====
 +
 +El protocolo FTP (**F**ile **T**ransfer **P**rotocol) es un protocolo utilizado para la transferencia de ficheros entre una máquina local y otra remota. Básicamente son dos operaciones las que se pueden realizar, subir ficheros a la máquina remota o bien descargarlos. Además existen más comandos pero se utilizan para manejarse dentro del servidor con el objetivo de poder navegar por la estructura de directorios, crear nuevos, eliminar ficheros y alguna otra tarea.
  
 <figure> <figure>
 {{ ftp_activo_pasivo.jpg?500 }} {{ ftp_activo_pasivo.jpg?500 }}
 <caption>FTP Activo/Pasivo</caption></figure> <caption>FTP Activo/Pasivo</caption></figure>
 +
 +=== 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>
 +santi@zenbook:$ sudo apt-get install proftpd
 +</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>
 +. . .
 +Include         /etc/proftdp/modules.conf
 +ServerName      "Debian"
 +DisplayLogin    welcome.msg
 +Port            21
 +. . .
 +</file>
 +
 +=== 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>
 +santi@zenbook:$ sudo apt-get install openssh-server openssh-sftp-server
 +</code>
 +
 +En este caso el fichero de configuración lo encontraremos en ''/etc/ssh/sshd_config''
 +
 +=== Clientes FTP ===
 +
 +Como cliente FTP de consola tendremos el comando ''ftp''
  
 <code bash> <code bash>
-root@zenbook:/var/www/html# ftp misitio.com+santi@zenbook:ftp misitio.com
 Connected to misitio.com. Connected to misitio.com.
-220---------- Welcome to Pure-FTPd [privsep] [TLS] ---------- +220 ProFTPD 1.3.5b Server (Debian) [::ffff:127.0.0.1]
-220-You are user number 9 of 50 allowed. +
-220-Local time is now 15:55. Server port21. +
-220-IPv6 connections are also welcome on this server. +
-220 You will be disconnected after 15 minutes of inactivity.+
 Name (misitio.com:santi): santi Name (misitio.com:santi): santi
-331 User santi OK. Password required+331 Password required for santi
 Password: Password:
-230 OK. Current restricted directory is /+230 User santi logged in
 Remote system type is UNIX. Remote system type is UNIX.
 Using binary mode to transfer files. Using binary mode to transfer files.
 ftp> | ftp> |
 </code> </code>
 +
 +Utilizando el comando ''help'' podemos contar con ayuda interactiva acerca de todos los comandos disponibles
  
 <code bash> <code bash>
Line 45: Line 78:
 debug macdef proxy send debug macdef proxy send
 </code> </code>
 +
 +A continuación se describen los más utilizados
 +
 +<table>
 +^ Comando ^ Descripción ^
 +| bye | Cierra la sesión FTP |
 +| cd | Cambia de directorio en la máquina remota|
 +| delete | Elimina un fichero en la máquina remota |
 +| get | Descarga un fichero de la máquina remota |
 +| lcd | Cambia/Muestra directorio en la máquina local |
 +| ls | Lista el contenido de un directorio de 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 |
 +| mput | Sube múltiples ficheros a la máquina remota |
 +| prompt | Activa/Desactiva interacción en operaciones múltiples |
 +| put | Sube un fichero a la máquina remota |
 +| pwd | Muestra el directorio activo en la máquina remota |
 +| rmdir | Elimina un directorio en la máquina remota |
 +| 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 51: Line 107:
 </code> </code>
  
-=== Servidores FTP ===+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> 
 +santi@zenbook:$ sftp misitio.com 
 +The authenticity of host 'misitio.com (::1)' cannot be established. 
 +ECDSA key fingerprint is SHA256:B5y+uH5grBUJRLnN5ZNMvKHS4USELBfv5J2Gyf+s37s. 
 +Are you sure you want to continue connecting (yes/no)?  
 +</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> 
 +sftp> help 
 +Available commands: 
 +bye                                Quit sftp 
 +cd path                            Change remote directory to 'path' 
 +chgrp grp path                     Change group of file 'path' to 'grp' 
 +chmod mode path                    Change permissions of file 'path' to 'mode' 
 +chown own path                     Change owner of file 'path' to 'own' 
 +df [-hi] [path]                    Display statistics for current directory or 
 +                                   filesystem containing 'path' 
 +exit                               Quit sftp 
 +get [-afPpRr] remote [local]       Download file 
 +reget [-fPpRr] remote [local]      Resume download file 
 +reput [-fPpRr] [local] remote      Resume upload file 
 +help                               Display this help text 
 +lcd path                           Change local directory to 'path' 
 +lls [ls-options [path]]            Display local directory listing 
 +lmkdir path                        Create local directory 
 +ln [-s] oldpath newpath            Link remote file (-s for symlink) 
 +lpwd                               Print local working directory 
 +ls [-1afhlnrSt] [path]             Display remote directory listing 
 +lumask umask                       Set local umask to 'umask' 
 +mkdir path                         Create remote directory 
 +progress                           Toggle display of progress meter 
 +put [-afPpRr] local [remote]       Upload file 
 +pwd                                Display remote working directory 
 +quit                               Quit sftp 
 +rename oldpath newpath             Rename remote file 
 +rm path                            Delete remote file 
 +rmdir path                         Remove remote directory 
 +symlink oldpath newpath            Symlink remote file 
 +version                            Show SFTP version 
 +!command                           Execute 'command' in local shell 
 +!                                  Escape to local shell 
 +?                                  Synonym for help 
 +sftp>  
 +</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> 
 +santi@zenbook:$ sftp misitio.com 
 +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
 +@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @ 
 +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
 +IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! 
 +Someone could be eavesdropping on you right now (man-in-the-middle attack)! 
 +It is also possible that a host key has just been changed. 
 +The fingerprint for the ECDSA key sent by the remote host is 
 +SHA256:B5y+uH5grBUJRLnN5ZNMvKHS4USELBfv5J2Gyf+s37s. 
 +Please contact your system administrator. 
 +Add correct host key in /home/santi/.ssh/known_hosts to get rid of this message. 
 +Offending ECDSA key in /home/santi/.ssh/known_hosts:
 +  remove with: 
 +  ssh-keygen -f "/home/santi/.ssh/known_hosts" -R misitio.com 
 +ECDSA host key for misitio.com has changed and you have requested strict checking. 
 +Host key verification failed. 
 +Couldn't read packet: Connection reset by peer 
 +</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> 
 +santi@zenbook:$ ssh-keygen -f "/home/santi/.ssh/known_hosts" -R misitio.com 
 +# Host misitio.com found: line 13 
 +/home/santi/.ssh/known_hosts updated. 
 +Original contents retained as /home/santi/.ssh/known_hosts.old 
 +</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> 
  
-=== Clientes FTP === 
  
 ==== Servicio SSH (Secure SHell) ==== ==== Servicio SSH (Secure SHell) ====
Line 70: Line 315:
  
 === Protocolo SCP (Secure CoPy) === === Protocolo SCP (Secure CoPy) ===
 +
 +<code bash>
 +santi@zenbook:$ scp -r misitio santi@misitio.com:/var/www/html
 +</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.txt · Last modified: 2019/01/04 13:02 by 127.0.0.1