---
# System prepended metadata

title: Apuntes DPL

---

# Apuntes DPL

## Actualizar la maquina e instalar Apache

### **Comentarios**
> - Dns = El DNS, o sistema de nombres de dominio, traduce los nombres de dominios aptos para lectura humana (por ejemplo, www.amazon.com) a direcciones IP aptas para lectura por parte de máquinas
> 
> - El puerto 80 se usa para web.
> 
> - Gestion nat = NAT hace que el tráfico del sistema personal se direccione a su sistema, lo que básicamente convierte al sistema en la pasarela del sistema personal. La función NAT de enmascaramiento permite convertir varias direcciones IP en una sola dirección IP.
>
> * Ip del host 127.0.0.1
> 
> * LAMP = L => Linux A=> Apache M => Mysql P => PHP

### **Comandos**
* **sudo su** = permite a los usuarios ejecutar comandos "**daw2** *contraseña de la MV*"
* **sudo apt update** = actualizar todos los paquetes

#### **Apache 2**
* **sudo apt install apache2** = instalar apache
* **ufw status** = ver estado del cortafuegos
* **ufw enable** = activar el firewall
* **ufw allow in "Apache"** = dar acceoso a apache
* **ufw app list** = cosas que puedes activar
* **ip add** = muestra tus datos de tarjeta de red

#### **Curl**
* **apt install curl** = instalar curl
* **curl http://** = te devuelve cualquier html que pignas en la direccion

#### **Mysql**
* **apt install mysql-server** = Instalar mysql
* **sudo mysql** = llamar al procedimiento mysql (ejecutar)
* **mysql -u root -p** = llamar al procedimiento mysql como root

#### **Terminal de sql** 
* **exit** = salir
* **show databases;** = Muestra las bases de datos
* **create dabatase "nombre bd";** = Crea la BD
* **create USER 'nombre'@'%' IDENTIFIED WITH mysql_native_password BY "password";** = Crear usuario con contraseña
* **GRANT ALL ON dbejemplo.** * **TO "nombre"@"%";** = Dar permisos a los usuarios 
* **GRANT ALL PRIVILEGIES  *.* TO "nombre"@"%";**
* **GRANT ALL PRIVILEGIES ON *.* TO "nombre"@"%";**
* **FLUSH PRIVILEGES;**  (Para ver cambios en los permisos inmediatamente, sin tener que reiniciar mysql)
* **mysql -u "nombre" -p**
* **create table "nombredb.nombreTaba"(**
* **);**
* **insert into "nombrebd.nombreLista" (contenido) values ("valores a añadir");**
* **select * from "nombrebd.nombreLista";**

* **Tipos de permisos**
>CREATE: permite a los usuarios crear una base de datos o una tabla
SELECT: permite a los usuarios recuperar datos
INSERT: permite a los usuarios agregar nuevas entradas en las tablas
UPDATE: permite a los usuarios modificar entradas existentes en tablas
DELETE: permite a los usuarios borrar entradas de la tabla
DROP: permite a los usuarios eliminar tablas de bases de datos completas

* **GRANT CREATE, SELECT ON * . * TO 'nombre_usuario'@'localhost';**
* **REVOKE ALL PRIVILEGES ON * . * FROM 'nombre_usuario'@'localhost';**
* **REVOKE PERMISSION_TYPE ON database_name.table_name FROM ‘nombre_usuario’@‘localhost’;**
* **DROP USER ‘nombre_usuario’@‘localhost’;**
* **SHOW GRANTS FOR 'nombre_usuario'@'localhost';**

#### **PHP**
- **apt install php libapache2-mod-php php-mysql** = Instalar version dura de php
- **php -v** = version de php
- **cd /var/www** = Es la ruta donde guarda php las paginas (ruta absoluta)
- **cp index.html index.copia** (copia de prueba)
- **cd /etc/apache2/mods-enabled# && nano dir.conf** = Muestra un archivo con el orden de carga de los archivos (orden = php > html) ("Ruta absoluta")
- **nano /var/www/html/index.php** = donde se guardan los archivos php de tu ordenador 
- **systemctl reload apache2** = Reiniciar el servicio de apache
- **systemctl status apache2** = Devuelve el estatus de apache

#### **PHP my admin**
- **apt install phpmyadmin php-mbstring php-zip php-gd php-json php curl** = Instalar php my admin
- Recuerda seleccionar **SI** en el **dbconfig-common**
- **etc/apache2/conf-enable** = Carpeta listado de apache donde se guardan los modulos activos del sistema
- **phpenmod mbstring** = habilitar que el php myadmin
- **systemctl restart apache2**

##### **Código de php**
```php=
<?php
  phpinfo();
?>
```


##### **Código de php2**
```php=
<?php
  $user="nombreUsuario";
  $password="password";
  $database="nombreBD";
  $table="nombreTable";
      try {

          $db = new PDO ("mysql:host = localhost; dbname=$database", $user, $password);
          echo "<h2> Mi lista cosas por hacer </h2><ol>";
          foreach($db -> query("select contenido from $table") as $row){
                echo "<li>".$row["contenido"]."</li>";
          }
                echo "</ol>";
          } catch (PDOException $e){
                 print "Error!".$e -> getMessage()."<br/>";
               die();
          }
?>
```

## Siguiente clase configurar un virtual host

Protocolo ssh putic
**CAPAS**
- aplicacion
- sesion 
- ip
- TCP/UDP tcp=no se pierde ni un paquete/ udp = no importa que s epierdam
- Enlace
- Fisica

# Actividades
- buscar acerca de: Browser Wars
- En que nos afecta
- Buscar que 3 servidores estan triunfando en el mercado
- Grafica de lenguajes de programacion

# Información
Apirest

217.71.201.196:2083

### Crear servidor local php
**Pasos:**
- Nos metemos en /var/www = Donde vamos a crear nuestos proyectos
- sudo su = Para dar permisos
- mkdir proyecto1
- cd proyecto1
- nano index.html = Creamos el indice de la página
- cp -r proyecto1 proyecto2 = Si ya tenemos una "plantilla" pademos usarlo
- cd ../..
- cd etc
- cd apache2 
- cd sites-available
- ls
- nano 000-default.conf = Configuración default de cada página
- cp 000-default.conf proyecto1.conf = Creamos nuestra propia configuración
- y cambiamos el puerto de :80 a :8080 (Cambiar archivo ports)
![](https://i.imgur.com/UEsT4cs.png)

- ServerAdmin email para casos de errores. = Parametro de email
- Declaramos un nombre debajo del serverAdmin (ServerName proyecto1.son)
- Debajo (ServerAlias www.proyecto1.son)
- Debajo (DirectoryIndex index.html)
- Debajo (DocumentRoot proyecto1)
- Debajo de customlog (SSLEngine on
        SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt
        SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key
 )
- service apache2 restart
- service apache2 status
- a2ensite proyecto1.conf = Una vez configurado la carpeta, lanza a internet
- systemctl reload apache2 = recargamos apache
- apachectl -S = Para ver errores (logs)
- cd /etc/apache2 && nano apache2.conf => ServerName 127.0.0.1
- cat /var/run/apache2/error.log
- tail -10 -n /var/run/apache2/error.log
- apacnano proyecto1.conf
- ip ad 
- etc/apache2/ apache2.conf => ServerName 127.0.0.1
- cd /etc/apache2/sites-available = archivos de configuracion de los proyectos
![](https://i.imgur.com/7pJkQgS.png)

- cd /etc/ && nano hosts (ejemplo) => 127.0.0.1 www.proyecto1.son
![](https://i.imgur.com/XOwziCu.png)

- apt update = actualizamos el sistema
- mods-enabled = carpeta de los mods activadas
- a2enmod ssl = para activar ssl
- en openssl.org podemos sacar certificados gratuitos
- openssl req -x509 -nodes -days 305 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt
- añadir al conf el puerto 443
- apachectl configtest = revisar sintaxis


## Preguntas de Examen 
Conexión cifrada: (TLS_AES_128_GCM_SHA256)


**Cookie**: El anglicismo cookie, usado también galleta o galleta informática, es un término que hace referencia a una pequeña información enviada por un sitio web y almacenada en el navegador del usuario, de manera que el sitio web puede consultar la actividad previa del navegador.

**SSL**: SSL es una tecnología estandarizada que permite cifrar el tráfico de datos entre un navegador web y un sitio web (o entre dos servidores web), protegiendo así la conexión.

**TLS**: La seguridad de la capa de transporte (TLS) es el medio principal para proteger las comunicaciones de red a través de Internet.

Panel de control, aplicaciones del trabajo 
**CSV** = El Código Seguro de Verificación es un término informático que designa al código único que identifica a un documento electrónico en diferentes ámbitos en los que se predica su autenticidad, y, en particular en la Administración Pública y Administración de Justicia españolas. Wikipedia
## IP Server noelia

http://161.22.41.105/

![](https://i.imgur.com/FsTJ9N5.png)

PREGUNTAS

**HTTP:**
El http (del inglés HyperText Transfer Protocol o Protocolo de Transferencia de Hiper Textos) es el protocolo de transmisión de información de la World Wide Web, es decir, el código que se establece para que el computador solicitante y el que contiene la información solicitada puedan “hablar” un mismo idioma a la hora de transmitir información por la red.

El http, como se ha dicho, es un lenguaje que media entre las peticiones del cliente y las respuestas del servidor en la Internet, para permitir una comunicación fluida y en un mismo “lenguaje”. Este protocolo establece las pautas a seguir, los métodos de petición (llamados “verbos”) y cuenta con cierta flexibilidad para incorporar nuevas peticiones y funcionalidades, en especial a medida que se avanza en sus versiones.

El funcionamiento del http se basa en un esquema de petición-respuesta entre el servidor web y el “agente usuario” (del inglés user agent) o cliente que realiza la solicitud de transmisión de datos. Un cliente puede ser un explorador determinado, cuando intentamos abrir una página web, o los rastreadores web (webcrawlers o arañas web) que las inspeccionan.

**HTTPS:** Puerto 443
Sus siglas se corresponden con Hypertext Transfer Protocol Secure lo que ya indica que añade seguridad a HTTP. Realmente no es un protocolo sino que se vasa en introducir una capa con el protocolo SSL (o derivados, más adelante se habla de todo esto) entre la capa de transporte y la capa de aplicación en el conjunto de protocolos TCP/IP.


**URL:**
Una URL (Uniform Resource Locator) es la dirección única y específica de cada página o recurso que existe en la web, desde la portada de la web de noticias que consultas todas las mañanas hasta el GIF que vas a compartir en el texto que estás escribiendo. Cada página, cada recurso, va enlazado a una URL, porque de otra manera los navegadores no podrían localizar la información demandada por el usuario. 

**SSL:**
Secure Sockets Layer - Protocolo de Capa de Conexión Segura - (SSL). Es un protocolo criptográfico que proporciona comunicaciones seguras por una red, comúnmente Internet. Actualmente la que se utiliza es la v3. 

**SSH** -> secure shell, es el nombre de un protocolo y del programa que lo implementa cuya principal función es el acceso remoto a un servidor por medio de un canal seguro en el que toda la información está cifrada

**:** Puerto 21
El protocolo clásico para la transferencia de archivos en Internet se denomina FTP (File Transfer Protocol).

**FTP MODO PASIVO Y ACTIVO**

![](https://i.imgur.com/C9hL5RF.png)

**Modo activo**
A continuación se describen los pasos en la conexión de un cliente a un servidor FTP en modo activo:

1) El cliente hace una petición al servidor en el puerto 21 desde lo que se conoce como un puerto alto (>1023 que llamaremos N), con comandos como por ejemplo “ls” o “get”.
2) Si la petición requiere la transferencia de datos del servidor al cliente, el servidor abre una conexión a otro puerto alto (generalmente N+1)
3) El servidor transfiere los datos.

En los pasos anteriores se han omitido las confirmaciones, etc involucradas. Este modo sigue la lógica de la mayoría de las conexiones TCP.
El problema con el que se encuentra este modo es que si el cliente se encuentra tras un firewall o cualquier dispositivo que haga NAT lo más probable es que el servidor no pueda conectarse con él haciendo que falle el paso 2.

**Modo pasivo**
A continuación se describen los pasos en la conexión de un cliente a un servidor FTP en modo pasivo:

1) El cliente hace una petición al servidor en el puerto 21 desde lo que se conoce como un puerto alto (>1023 que llamaremos N), con comandos como por ejemplo “ls” o “get”.
• Este paso es idéntico.
2) El cliente ha avisado al servidor de que él se encargará de comenzar la conexión, por lo que el servidor contesta con otro puerto alto al que el cliente debe conectarse.
3) Si la petición requiere la transferencia de datos del servidor al cliente, el cliente abre una conexión a ese puerto.
4) El servidor transfiere los datos.

Como puedes observar la principal diferencia es quién abre la conexión y se hace para evitar los problemas comentados en el apartado anterior.

**PERMISOS FTP:**
El primer dígito establece el tipo de permiso deseado al dueño; el segundo al grupo; y el tercero al resto de los usuarios.

**rwx** [read-write-execute]


**COMANDOS FTP:**
![](https://i.imgur.com/H8i69WD.png)
![](https://jesusvillaverde.com/external/howtos/proftpd.html)
![](http://www.proftpd.org/docs/modules/mod_core.html#TimeoutIdle)
Página con comandos:
https://victorroblesweb.es/2013/12/02/comandos-ftp-en-la-consola/


***ServerName*** -> Nombre de nuestro servidor.

***DeferWelcome on*** -> Con esto activado, no mostraremos información sobre nuestro equipo hasta que el usuario haga login.

***ShowSymlinks*** -> La directiva ShowSymlinks configura si los enlaces simbólicos se muestran como tales en las listas de directorios o si no se muestran al cliente. Si ShowSymlinks está desactivado, los permisos y la propiedad del archivo vinculado se utilizan en la lista del directorio.

***TimeoutIdle*** -> Configura los segundos de espera hasta la desconexión

***Port 21*** -> El puerto 21 es el puerto estándar para FTP.

***TransferLog*** -> Archivo donde se almacena un registro de transferenica de archivos

***SystemLog*** -> Aquí indicamos donde queremos que se guarden los logs.

https://ftp.funet.fi/

**FTP Directivas**
https://jesusvillaverde.com/external/howtos/proftpd.html

**Mensajes FTP:**

Fichero:
![](https://i.imgur.com/vIYfW3E.png)

Abajo del todo:
![](https://i.imgur.com/Une4MvZ.png)


---

# **Examen práctico**

- [x] Cambiar nombre maquina
- [x] Virtualhosts
- [x] Apache avanzado y securizado (ssl)
- [x] Ftp avanzado
- [x] Directivas
- [x] Repasar cliente servidor ftp
- [x] Crear usuarios
- [x] Crear grupos
- [x] Dar permisos

---

**Cambiar nombre del VirtualHost**

De manera visual vamos a Usuarios y cambiamos el nombre del usuario. 
Para cambiarlo en el terminar utilizamos lo siguiente:
```shell=
cd /etc 
nano hostname
```

**IMPORTANTE** 

Lo de arriba no cambia el nombre que aparece en el terminal, para cambiar el nombre del terminal y que no aparezca @javi-VirtualBox, hay que hacer lo siguiente:
```shell=
sudo su
nmcli general hostname [nombre]
reboot # Reiniciamos para que se actualicen los cambios
```

Ahora vuelves a entrar y abres un terminal para comprobar los cambios, yo lo hice con el nombre "examen-dpl", ya no me aparece javi-VirtualBox:

![](https://i.imgur.com/3mngdCJ.png)

También se puede comprobar escribiendo hostname
```shell=
hostname
```

![](https://i.imgur.com/0b6YlFV.png)


---

## Instalación de Apache

Para comenzar la instalación entramos en sudo su y actualizamos los paquetes
```shell=
sudo su
apt update
```

Ahora instalamos apache2 con
```shell=
apt install apache2
```

Comprobamos el estado del cortafuegos con
```shell=
ufw status
```

Activamos el firewall y permitimos el acceso de Apache
```shell=
ufw enable
ufw allow in "Apache"
```

**Configuración**

Vamos a empezar a crear nuestro proyecto, para ello crearemos el index de la página entrando en /var/www *(donde guardamos nuestro proyectos)* y haremos una copia del index de la carpeta html a la de nuestro proyecto
```shell=
cd /var/www/
mkdir proyecto
cd proyecto
cp /var/www/html/index.html /var/www/proyecto/index.html
nano index.html # Añadimos el html que queramos ~ <h1>Hola mundo</h1>
```

Ahora empezaremos a configurar el Apache. En primer lugar haremos una copia de 000-default.conf y luego editaremos la copia.
```shell=
cd /etc/apache2/sites-available
cp 000-default.conf proyecto.conf
nano proyecto.conf
```

Deberias dejar estos ajustes predeterminados si tienes certificado SSL:

![](https://i.imgur.com/Ja33Kzr.png)

En caso contrario quita todas las directivas SSL y cambia el puerto de 443 a 80.

*Si por casualidad quieres ver los errores, simplemente utiliza*
```shell=
apachectl -S # Ver errores (logs)
```

Seguidamente iremos a etc y al archivo host donde configuraremos que nuestra ip redirija a nuestro proyecto

```shell=
nano /etc/hosts
```

![](https://i.imgur.com/1tuKPsn.png)

Creamos el certificado SSL y lo activamos, el certificado te pedirá que insertes algunos datos, (Revisa bien antes de ponerlos es pregunta de examen)
```shell=
apt update
a2enmod ssl
systemctl restart apache2
openssl req -x509 -nodes -days 305 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt
```

Ahora volvemos al proyecto.conf y añadimos estas líneas **(si no las teníamos antes)** para el certificado
```shell=
nano /etc/apache2/sites-available/proyecto.conf
# Dentro añadimos esto si no lo teníamos
SSLEngine on
SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt
SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key
```

Con el comando apachectl configtest podemos comprobar la sintaxis
```shell=
apachectl configtest
```

Nuevamente comprobamos que la configuración se aplicó correctamente

```shell=
service apache2 reload
service apache2 status
```

Vamos a configurar los puertos de apache, nos metemos en etc y en apache2 y añadimos el Listen 443 (Para que escuche respuestas https)

```shell=
nano /etc/apache2/ports.conf
```

![](https://i.imgur.com/x0f7MpW.png)

Por último lanzaremos el proyecto

```shell=
cd /etc/apache2/sites-available
a2ensite proyecto.conf
systemctl reload apache2
```

Ahora simplemente escribiriemos el nombre de nuestro proyecto (ServerName en el proyecto.conf) en el navegador.

(En nuestro caso sería https://proyecto.com) *Recuerda que al estar en https nos saldra un mensaje de error de seguridad por lo que simplemente le daremos a avanzado y aceptar el riesgo.*

*Tambien cabe la posibilidad de que nos de el error de seguridad y de certificado SSL (Para ese caso deberemos revisar la configuración y comprobar que hemos puesto bien los puertos, la configuración del proyecto y los hosts, en mi caso fue que no cambie el puerto del virtualhost predeterminado)*

---

## Instalación ProFTPD básica

Comenzamos la instalación:
```shell=
apt-get update
apt-get install proftpd
```

**Comprobaciones**

Comprobamos el estado
```shell=
service proftpd status
```

Comprobamos la versión
```shell=
proftpd -v
```

Se crearán los usuarios "proftpd" y "ftp" con grupo "nogroup".
Para comprobar vamos a /etc/passwd, y vamos al final del archivo
```shell=
nano /etc/passwd
```

El fichero de configuración principal es /etc/proftpd/proftpd.conf.
*Realizar una copia de seguridad por si acaso*
```shell=
nano /etc/proftpd/proftpd.conf
cp /etc/proftpd/proftpd.conf /etc/proftpd/proftpd.copy
```

El fichero /etc/ftpusers contiene una lista de usuarios que no tienen permiso de acceso por FTP. 
*Los siguientes usuarios deberían estar listados: root, bin, uucp, news*
```shell=
nano /etc/ftpusers
```

**Comenzamos**

Para conectar a nuestro servidor utilizaremos el comando ftp + dirección.
Ejemplo:
```shell=
ftp localhost
```

A continuación nos pedirá nombre de usuario y contraseña y ya estaremos dentro.

## Instalación de ProFTPD avanzada

Dentro de /etc/proftpd/proftpd.conf podemos modificar los parámetros como el nombre del servidor, el tipo, el puerto, etc.
```shell=
nano /etc/proftpd/proftpd.conf
```

Para ver el historial de los logs de proftpd utilizaremos
```shell=
cat /var/log/proftpd/proftpd.log
```

Para modificar el mensaje de bienvenida y de error al acceder iremos a /etc/proftpd/proftpd.conf y al final del archivo escribiremos
```shell=
nano /etc/proftpd/proftpd.conf
# Y al final escribiremos
AccessGrantMSG "Bienvenido a mi servidor"
AccessDenyMSG "Error al entrar a mi servidor"
```

Para comprobar los cambios recargamos proftpd y comprobamos si funciona
```shell=
service proftpd reload
service proftpd status
ftp localhost # y comprobamos si aparecen los mensajes
```

*Si aparece algún error y el proftpd se desactiva, simplemente lo volvemos a activar y lo comprobamos*
```shell=
service proftpd start
service proftpd status
```

Para enjaular a los usuarios deberemos utilizar el parámetro DefaultRoot, que tiene la siguiente estructura: 

DefaultRoot [directorio] [grupo de usuarios que SÍ tendran ese directorio por defecto] [grupo de usuarios a los que NO se les aplicará ese directorio]

Para añadir DefaultRoot deberemos añadir en /etc/proftpd/proftpd.conf el parámetro
```shell=
nano /etc/proftpd/proftpd.conf
# Y añadimos al final
DefaultRoot ~
```

Para comprobar los cambios recargamos proftpd y nos movemos por las carpetas
```shell=
service proftpd reload
ftp localhost # y comprobamos si estamos enjaulados
```

Con el anterior DefaultRoot estamos enjaulados en la carpeta Home, pero si queremos enjaular en otra carpeta primero debemos crearla, por ejemplo "/var/ftpXX".
```shell=
nano /etc/proftpd/proftpd.conf
# Al final
DefaultRoot /var/ftpXX
```

Recargamos proftpd y comprobamos
```shell=
service proftpd reload
ftp localhost # comprobamos
```

**Creación de usuarios y grupos**

Para crear usuarios utilizaremos adduser
```shell=
adduser user1
adduser user2
# man adduser < da información sobre el comando adduser, presionar "Q" para skipear
```

Para saber a que grupo pertenecen los usuarios creados utilizamos
```shell=
id user1
id user2
```

Para crear un grupo utilizaremos addgroup
```shell=
addgroup ftpuser
```

Para agregar los usuarios al grupo utilizaremos
```shell=
usermod -a -G ftpuser user1
# man usermod < da información sobre el comando usermod, presionar "Q" para skipear
# Comprobamos ahora si el usuario tiene el grupo nuevo
id user1
```

Ahora crearemos una carpeta compartida y asignaremos los permisos
```shell=
cd /home/
mkdir ftpuser
ls
```

Comprobamos los permisos con
```shell=
ls -l
```

Ahora ponemos al grupo ftpuser como propietario de la carpeta con
```shell=
chgrp ftpuser ftpuser
ls -l # veremos que root pasa a ser ftpuser
```

Le damos todos los permisos sobre la carpeta con
```shell=
chmod 775 ftpuser
ls -l # veremos los permisos rwxrwxr-x
```

Para comprobar creamos un fichero
```shell=
touch ftpuser/prueba.txt
# Comprobamos permisos
cd ftpuser
ls -l
# Si queremos cambiar los permisos de prueba.txt usamos chmod 755 prueba.txt
```

Ahora vamos a modificar el fichero /etc/proftpd/proftpd.conf para restringir el acceso a algún grupo a la carpeta /home/ftpusers
Simplemente añadimos encima del DefaultRoot ~ lo siguiente:
```shell=
DefaultRoot /home/ftpuser ftpuser
```

Ejemplo de como se vería el proftp.conf:
*DefaultRoot /home/ftpuser ftpuser
DefaultRoot ~*

Recargamos proftpd y comprobamos el funcionamiento accediendo desde otro usuario que perteneza al grupo que está restringido
```shell=
service proftpd reload
ftp localhost # comprobamos iniciando con el usuario
```

Si realizas un ls con usuario root y con usuario ftpuser comprobaras que la raiz de cada grupo es distinta

---

### Comandos FTP

```shell=
?                    # muestra los comandos disponibles
? [comando]          # muestra información del comando escrito
ls                   # Listar los ficheros y directorios
cd                   # Te mueves por directorios en el ftp
lcd                  # Te mueves por directorios en tu máquina local
pwd                  # Muestra el directorio actual del ftp
lpwd                 # Muestra el directorio actual de la máquina local
get [fichero]        # Descargas ficheros del ftp
mget [ficheros]      # Descargas múltiples ficheros del ftp
put [fichero]        # Subes un fichero de local al ftp
mput [ficheros]      # Subes múltiples ficheros de local al ftp
delete [fichero]     # Eliminas un fichero
mdelete [ficheros]   # Eliminas múltiples ficheros
mkdir [directorio]   # Creas un directorio
rmdir [directorio]   # Eliminas un directorio
rename [fichero]     # Renombras un fichero
user                 # Puedes cambiar de usuario para una nueva sesión
```

---

**Ver tu IP en Ubuntu**

```shell=
ip a
```

**Permisos para usuarios**

Primero vamos al archivo /etc/proftpd/proftpd.conf y lo modificamos. Vamos al final e introducimos lo siguiente
```shell=
<Limit LOGIN>
    AllowUser user1
    DenyALL
</limit>
```
Hay diferentes tipos de formas de modificar el acceso a los usuarios
estos son:

* AllowUser: Permite el acceso a un usuario
* DenyUser: Bloqueamos el acceso a un usuario
* DenyAll: Bloqueamos el acceso a todos los usuarios a menos que especifiquemos los usuarios permitidos con AllowUser
* AllowAll: Permite el acceso a todos los usuarios como "anonymous" que se conecten al FTP

**Usuarios Anonymous**

En el fichero /etc/proftpd/proftpd.conf hay que descomentar las líneas que están marcadas en rojo
```shell=
nano /etc/proftpd/proftpd.conf
```

![](https://i.imgur.com/SpctA1B.png)

