> For the complete documentation index, see [llms.txt](https://docs.plenit.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.plenit.com/support/tutorials/windows/how-to-set-up-an-ftp-server-with-powershell.md).

# Cómo instalar y configurar un servidor FTP en Windows mediante PowerShell

Si quieres saber **cómo instalar y configurar un servidor FTP en Windows mediante PowerShell** acompáñanos a lo largo de este breve tutorial donde lo haremos en sencillos pasos.

Este tutorial complementa el que ya hicimos a través del entorno gráfico y que titulamos [Cómo instalar y configurar un servidor FTP en Windows (IIS)](https://jotelulu.com/soporte/tutoriales/como-instalar-y-configurar-un-servidor-ftp-en-windows-iis/){target="\_blank" rel="noopener"}.

**NOTA:** *Delante de todas las líneas se ha añadido una almohadilla (#) que se pone por razones de seguridad, ya que en caso de copiar una de estas líneas por error no se ejecutará (La almohadilla se usa para comentar código por lo que se convierte en no ejecutable). Para poder ejecutarse, se debe retirar el carácter "#" de todas las líneas.*

### **¿Cómo instalar y configurar un servidor FTP en Windows mediante PowerShell?**

### **Pre-requisitos o pre-configuración.**

Para completar de forma satisfactoria este tutorial y poder **instalar y configurar un servidor FTP en Windows mediante PowerShell** se necesitará:

* Por un lado, estar dado de alta en la Plataforma Plenit con una organización y estar registrado en la misma tras hacer [Log-in](https://admin.jotelulu.com/){target="\_blank" rel="noopener"}.
* Por otro lado, [haber dado de alta una suscripción de Servidores](https://jotelulu.com/soporte/tutoriales/como-desplegar-servidor){target="\_blank" rel="noopener"}
* Tener un servidor Windows operativo dentro de la suscripción.

&#x20;

#### **Paso 1. Instalar y configurar un servidor FTP en Windows mediante PowerShell**

Lo primero que haremos será **instalar la funcionalidad de FTP server**, para lo que se deberá arrancar la **consola de PowerShell**, **o la de PowerShell ISE**. Tal como comento últimamente, lo más deseable sería usar ISE (por así decirlo el IDE de Microsoft), ya que nos permite hacer test, ver donde falla, etc.

Una vez en la consola (o ISE) de PowerShell, se deberán **ejecutar los comandos "Install-WindowsFeature"** (1).

*# Install-WindowsFeature Web-FTP-Server -IncludeAllSubFeature*

*# Install-WindowsFeature Web-Server -IncludeAllSubFeature -IncludeManagementTools*

*# Import-Module WebAdministration*

Donde:

* El comando **"Install-WindowsFeature" instala la funcionalidad** de Windows que le pasemos como parámetro.
* El modificador **"-IncludeAllSubFeature" instala todas las opciones** que tenga la funcionalidad de Windows.
* El modificador **"-IncludeManagementTools" instala las herramientas** **administrativas** de esa funcionalidad.

![Paso 1. Hacemos el despliegue del servicio de FTP mediante
PowerShell](https://jotelulu.com/wp-content/uploads/2023/09/Paso-1.-Hacemos-el-despliegue-del-servicio-de-FTP-mediante-PowerShell.jpg)\\

Paso 1. Hacemos el despliegue del servicio de FTP mediante PowerShell

Una vez hecho esto, **continuamos la instalación** importando el módulo de administración del FTP mediante **el comando** **"Import-Module"** (2).

![Paso 1. Importamos el módulo de administración del FTP mediante
PowerShell](https://jotelulu.com/wp-content/uploads/2023/09/Paso-1.-Importamos-el-modulo-de-administracion-del-FTP-mediante-PowerShell.jpg)\\

Paso 1. Importamos el módulo de administración del FTP mediante PowerShell

A continuación, se **configura el nuevo sitio FTP** para dar servicio.

Este tendrá una serie de características que se deberán configurar, pudiendo lanzarse directamente un comando como el siguiente:

\*# New-WebFtpSite -Name \ -Port\
-PhysicalPath \*

Donde:

* El comando **"New-WebFtpSite" despliega el nuevo site** de FTP.
* **"-Name "** describe **el nombre** que le daremos al site de FTP.
* **"-Port "** es un número que indica **por que puerto escucha** el FTP.
* **"-PhysicalPath "** es la **ruta del servidor** donde están los datos del FTP.

De esta manera, podría quedar así:

*# New-WebFtpSite -Name 'FTP Site Nacho' -Port '21' -PhysicalPath 'C:\datos\ftproot'*

Podríamos sustituir directamente ahí y tendríamos la configuración hecha, pero esto es un poco chapuza, por lo que se suelen utilizar variables para poder mejorar el uso en futuras ocasiones.

Para tener más organizado todo, **crearemos unas variables**, tal como comentábamos, que serán las siguientes:

* **"-Name "** describe el **nombre que le daremos al site** de FTP, siendo la variable "$Name".
* **"-Port "** es un número que indica porque **puerto escucha** el FTP, siendo la variable "$Port".
* **"-PhysicalPath "** es la ruta del servidor **donde están los datos** del FTP, siendo la variable "$Root".

Teniendo esto en cuenta, se configura todo y se terminan **ejecutando los siguientes comandos** (3):

*# $Name = 'FTP Site Nacho'*

*# $Root = 'C:\datos\ftproot'*

*# $Port = 21*

*# New-WebFtpSite -Name $Name -Port $Port -PhysicalPath $Root*

![Paso 1. Configuramos el site de FTP para el
servicio](https://jotelulu.com/wp-content/uploads/2023/09/Paso-1.-Configuramos-el-site-de-FTP-para-el-servicio.jpg)\\

Paso 1. Configuramos el site de FTP para el servicio

En este momento ya se ha instalado en servidor de FTP en sí, y quedará **configurar, añadir usuarios, repositorios, asegurándolo**, etc.

En este punto, parar mí, lo primero sería crear un usuario (y su grupo asociado) para poder probar que podemos hacer la conexión y no simple. Así, si después lo aseguramos cerrando puertos o configurando certificados, estaremos seguros de que esta parte estaba funcionando.

En este caso, primero creamos un grupo para los usuarios con capacidad de conectar al FTP, ya que es mejor crear un grupo al que se puedan añadir después.

Para **crear el grupo de FTP** (4) usamos:

*# $FTPUserGroupName = «Usuarios de FTP»*

*# $ADSI = \[ADSI]»WinNT://$env:ComputerName»*

*# $FTPUserGroup = $ADSI.Create(«Group», «$FTPUserGroupName»)*

*# $FTPUserGroup.SetInfo()*

*# $FTPUserGroup.Description = «Los miembros de este grupo pueden conectar al FTP»*

*# $FTPUserGroup.SetInfo()*

![Paso 1. Creamos el grupo de FTP para el
servicio](https://jotelulu.com/wp-content/uploads/2023/09/Paso-1.-Creamos-el-grupo-de-FTP-para-el-servicio.jpg)\\

Paso 1. Creamos el grupo de FTP para el servicio

En este caso, haremos uso de los comandos de ADSI para el despliegue del grupo, usando como siempre ciertas variables para hacer más sencilla la configuración.

Lo siguiente sería **crear el usuario con el que se van a hacer las conexiones al FTP** (5).

*# $FTPUserName = «ftpnacho»*

*# $FTPPassword = 'Contrasenya123!'*

*# $CreateUserFTPUser = $ADSI.Create(«User», «$FTPUserName»)*

*# $CreateUserFTPUser.SetInfo()*

*# $CreateUserFTPUser.SetPassword(«$FTPPassword»)*

*# $CreateUserFTPUser.SetInfo()*

![Paso 1. Creamos un usuario para las conexiones de
FTP](https://jotelulu.com/wp-content/uploads/2023/09/Paso-1.-Creamos-un-usuario-para-las-conexiones-de-FTP.jpg)\\

Paso 1. Creamos un usuario para las conexiones de FTP

Una vez hecho esto, se debe **añadir en el grupo de FTP del sistema** (6), ejecutando para ello:

*# $UserAccount = New-Object System.Security.Principal.NTAccount(«$FTPUserName»)*

*# $SID = $UserAccount.Translate(\[System.Security.Principal.SecurityIdentifier])*

*# $Group = \[ADSI]»WinNT://$env:ComputerName/$FTPUserGroupName,Group»*

*# $User = \[ADSI]»WinNT://$SID»*

*# $Group.Add($User.Path)*

![Paso 1. Añadimos el usuario de FTP al grupo de FTP del
sistema](https://jotelulu.com/wp-content/uploads/2023/09/Paso-1.-Anadimos-el-usuario-de-FTP-al-grupo-de-FTP-del-sistema.jpg)\\

Paso 1. Añadimos el usuario de FTP al grupo de FTP del sistema

En este momento se debe **habilitar la autenticación básica del sitio FTP** y a continuación **autorizar al grupo de Windows** (7) que contiene al usuario FTP para que pueda tener acceso al sitio FTP y por tanto pueda hacer uso del servicio.

Para ello se debe ejecutar los siguientes comandos:

*\[# $FTPSitePath]\[ = ]\[«IIS:\Sites\\]\[$FTPSiteName]\[«]*

*\[# $BasicAuth]\[ = ]\['ftpServer.security.authentication.basicAuthentication.enabled']*

*\[\[# ]Set-ItemProperty]\[ -Path ]\[$FTPSitePath]\[ -Name ]\[$BasicAuth]\[ -Value ]\[$True]*

*\[# $Param]\[ = @]\[{]*

*\[\[# ]Filter]\[ = ]\[«/system.ftpServer/security/authorization»]*

*\[ \[# ]Value = @]\[{]*

*\[ \[# ]accessType = ]\[«Allow»]*

*\[ \[# ]roles = ]\[«]\[$FTPUserGroupName]\[«]*

*\[ \[# ]permissions = ]\[1]*

*\[\[# ]}]*

*\[ \[# ]PSPath = 'IIS:\\']*

*\[ \[# ]Location = ]\[$FTPSiteName]*

*\[\[# ]}]*

*\[\[# ]Add-WebConfiguration]\[ @]\[param]*

![Paso 1. Configuramos la autenticación básica para nuestro sitio de
FTP](https://jotelulu.com/wp-content/uploads/2023/09/Paso-1.-Configuramos-la-autenticacion-basica-para-nuestro-sitio-de-FTP.jpg)\\

Paso 1. Configuramos la autenticación básica para nuestro sitio de FTP

El siguiente paso es **cambiar la política de SSL y los permisos de ficheros (NTFS) en la carpeta** **raíz del servidor FTP** (8), o sea, donde se guardan todos los ficheros subidos por los usuarios del servicio.

Para ello ejecutamos los siguientes comandos:

*#* *$SSLPolicy = @(*

*#  'ftpServer.security.ssl.controlChannelPolicy',*

*#   'ftpServer.security.ssl.dataChannelPolicy'*

*# )*

*# Set-ItemProperty -Path $FTPSitePath -Name $SSLPolicy\[0] -Value $false*

*# Set-ItemProperty -Path $FTPSitePath -Name $SSLPolicy\[1] -Value $false*

![Paso 1. Cambiamos la política de SSL y los permisos de ficheros en la
carpeta raíz del servidor
FTP](https://jotelulu.com/wp-content/uploads/2023/09/Paso-1.-Cambiamos-la-politica-de-SSL-y-los-permisos-de-ficheros-en-la-carpeta-raiz-del-servidor-FTP.jpg)\\

Paso 1. Cambiamos la política de SSL y los permisos de ficheros en la carpeta raíz del servidor FTP

El siguiente paso para dar es lanzar los siguientes comandos para configura los permisos NTFS en la carpeta raíz y así permitir que puedan acceder y trabajar sobre esta carpeta aquellos usuarios que pertenezcan al grupo de FTP.

*# $UserAccount = New-Object System.Security.Principal.NTAccount(«$FTPUserGroupName»)*

*# $AccessRule = \[System.Security.AccessControl.FileSystemAccessRule]::new($UserAccount,*

*#     'ReadAndExecute',*

*#     'ContainerInherit,ObjectInherit',*

*#     'None',*

*#     'Allow'*

*# )*

*# $ACL = Get-Acl -Path $FTPRootDir*

*# $ACL.SetAccessRule($AccessRule)*

*# $ACL | Set-Acl -Path $FTPRootDir*

Por último, para que todos los cambios tomen efecto **debe reiniciar la instancia del FTP** (9), para ello se debe ejecutar:

\# Restart-WebItem «IIS:\Sites\\$Name» -Verbose

![Paso 1. Reiniciamos el servicio de FTP desde consola de
PowerShell](https://jotelulu.com/wp-content/uploads/2023/09/Paso-1.-Reiniciamos-el-servicio-de-FTP-desde-consola-de-PowerShell.jpg)\\

Paso 1. Reiniciamos el servicio de FTP desde consola de PowerShell

Con esto ya se ha terminado el proceso de configuración del FTP.

&#x20;

### **Conclusiones y próximos pasos:**

A lo largo de este tutorial hemos visto como realizar la\*\* instalación y configurar un servidor FTP en Windows mediante PowerShell\*\* dentro de uno de los servidores Windows albergados dentro de Plenit.

Si lo que has leído hasta ahora, te ha resultado interesante puedes profundizar más sobre algunos servicios relacionados, es posible que los siguientes tutoriales te interesen:

* [Cómo desplegar un nuevo servidor en Plenit](https://jotelulu.com/soporte/tutoriales/como-desplegar-servidor){target="\_blank" rel="noopener"}.
* [Cómo crear un túnel VPN site-to-site en Plenit](https://jotelulu.com/soporte/tutoriales/crear-tunel-vpn-site-to-site){target="\_blank" rel="noopener"}.
* [Cómo crear plantillas en un servidor para reutilizarlas en Escritorio Remoto](https://jotelulu.com/soporte/tutoriales/crear-plantillas-servidor-para-reutilizarlas-escritorio-remoto){target="\_blank" rel="noopener"}.
* [Cómo crear un VPC y asociar un TIER en Plenit](https://jotelulu.com/soporte/tutoriales/como-crear-vpc-asociar-tier){target="\_blank" rel="noopener"}.

Esperamos que, con esta pequeña guía, no tengas problemas al configurar tu servidor FTP de manera rápida y funcional, pero si los tuvieras, no dudes en contactar con nosotros para que podamos echarte una mano.

**Gracias por tu confianza.**


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.plenit.com/support/tutorials/windows/how-to-set-up-an-ftp-server-with-powershell.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
