> 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/docs-pt/support/tutorials/windows/how-to-set-up-an-ftp-server-with-powershell.md).

# Como instalar e configurar um servidor FTP no Windows através do PowerShell

Se queres saber **como instalar e configurar um servidor FTP no Windows através do PowerShell** acompanha-nos ao longo deste breve tutorial onde o faremos em passos simples.

Este tutorial complementa o que já fizemos através do ambiente gráfico e a que demos o título de [Como instalar e configurar um servidor FTP no Windows (IIS)](https://jotelulu.com/soporte/tutoriales/como-instalar-y-configurar-un-servidor-ftp-en-windows-iis/){target="\_blank" rel="noopener"}.

**NOTA:** *Diante de todas as linhas foi acrescentada uma cerquilha (#), que é colocada por razões de segurança, uma vez que, em caso de copiar uma destas linhas por erro, ela não será executada (a cerquilha é usada para comentar código, pelo que se torna não executável). Para poder ser executado, deve retirar-se o carácter "#" de todas as linhas.*

### **Como instalar e configurar um servidor FTP no Windows através do PowerShell?**

### **Pré-requisitos ou pré-configuração.**

Para concluir de forma satisfatória este tutorial e poder **instalar e configurar um servidor FTP no Windows através do PowerShell** será necessário:

* Por um lado, estar registado na Plataforma Plenit com uma organização e estar registado na mesma após fazer [Iniciar sessão](https://admin.jotelulu.com/){target="\_blank" rel="noopener"}.
* Por outro lado, [ter subscrito uma Subscrição de Servidores](https://jotelulu.com/soporte/tutoriales/como-desplegar-servidor){target="\_blank" rel="noopener"}
* Ter um servidor Windows operativo dentro da subscrição.

&#x20;

#### **Passo 1. Instalar e configurar um servidor FTP no Windows através do PowerShell**

A primeira coisa que faremos será **instalar a funcionalidade de servidor FTP**, para o que se deverá iniciar a **consola do PowerShell**, **ou a do PowerShell ISE**. Tal como comento ultimamente, o mais desejável seria usar o ISE (por assim dizer, o IDE da Microsoft), já que nos permite fazer testes, ver onde falha, etc.

Uma vez na consola (ou ISE) do PowerShell, deverão **executar os comandos "Install-WindowsFeature"** (1).

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

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

*# Import-Module WebAdministration*

Onde:

* O comando **"Install-WindowsFeature" instala a funcionalidade** do Windows que lhe passarmos como parâmetro.
* O modificador **"-IncludeAllSubFeature" instala todas as opções** que a funcionalidade do Windows tiver.
* O modificador **"-IncludeManagementTools" instala as ferramentas** **administrativas** dessa funcionalidade.

![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)\\

Passo 1. Fazemos a implementação do serviço de FTP através do PowerShell

Uma vez feito isto, **continuamos a instalação** importando o módulo de administração do FTP através de **o 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)\\

Passo 1. Importamos o módulo de administração do FTP através do PowerShell

De seguida, **configura-se o novo site FTP** para prestar serviço.

Este terá uma série de características que deverão ser configuradas, podendo lançar-se diretamente um comando como o seguinte:

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

Onde:

* O comando **"New-WebFtpSite" implementa o novo site** de FTP.
* **"-Name "** descreve **o nome** que daremos ao site de FTP.
* **"-Port "** é um número que indica **por que porta escuta** o FTP.
* **"-PhysicalPath "** é o **caminho do servidor** onde estão os dados do FTP.

Desta forma, poderia ficar assim:

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

Poderíamos substituir diretamente aí e teríamos a configuração feita, mas isto é um pouco uma chapuza, pelo que costumam usar-se variáveis para poder melhorar a utilização em ocasiões futuras.

Para ter tudo mais organizado, **criaremos algumas variáveis**, tal como comentávamos, que serão as seguintes:

* **"-Name "** descreve o **nome que daremos ao site** de FTP, sendo a variável "$Name".
* **"-Port "** é um número que indica por que **porta escuta** o FTP, sendo a variável "$Port".
* **"-PhysicalPath "** é o caminho do servidor **onde estão os dados** do FTP, sendo a variável "$Root".

Tendo isto em conta, configura-se tudo e termina-se **executando os seguintes 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)\\

Passo 1. Configuramos o site de FTP para o serviço

Neste momento já foi instalado o servidor de FTP em si, e ficará **configurar, adicionar utilizadores, repositórios, assegurando-o**, etc.

Neste ponto, para mim, a primeira coisa seria criar um utilizador (e o seu grupo associado) para poder testar que podemos fazer a ligação e não simples. Assim, se depois o assegurarmos fechando portas ou configurando certificados, teremos a certeza de que esta parte estava a funcionar.

Neste caso, primeiro criamos um grupo para os utilizadores com capacidade de ligar ao FTP, uma vez que é melhor criar um grupo ao qual se possam depois adicionar.

Para **criar o grupo de FTP** (4) usamos:

*# $FTPUserGroupName = «Utilizadores de FTP»*

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

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

*# $FTPUserGroup.SetInfo()*

*# $FTPUserGroup.Description = «Os membros deste grupo podem ligar ao 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)\\

Passo 1. Criamos o grupo de FTP para o serviço

Neste caso, faremos utilização dos comandos do ADSI para a implementação do grupo, usando como sempre certas variáveis para tornar a configuração mais simples.

O seguinte seria **criar o utilizador com o qual se vão fazer as ligações ao 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)\\

Passo 1. Criamos um utilizador para as ligações de FTP

Uma vez feito isto, deve-se **adicionar ao grupo de FTP do sistema** (6), executando para isso:

*# $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)\\

Passo 1. Adicionamos o utilizador de FTP ao grupo de FTP do sistema

Neste momento deve-se **ativar a autenticação básica do site FTP** e em seguida **autorizar o grupo do Windows** (7) que contém o utilizador FTP para que possa ter acesso ao site FTP e, portanto, possa fazer utilização do serviço.

Para isso devem executar-se os seguintes 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)\\

Passo 1. Configuramos a autenticação básica para o nosso site de FTP

O passo seguinte é **alterar a política de SSL e as permissões de ficheiros (NTFS) na pasta** **raiz do servidor FTP** (8), ou seja, onde são guardados todos os ficheiros carregados pelos utilizadores do serviço.

Para isso executamos os seguintes 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)\\

Passo 1. Alteramos a política de SSL e as permissões de ficheiros na pasta raiz do servidor FTP

O passo seguinte é executar os seguintes comandos para configurar as permissões NTFS na pasta raiz e assim permitir que possam aceder e trabalhar sobre esta pasta aqueles utilizadores que pertençam ao 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 todas as alterações tenham efeito **deve reiniciar a instância do FTP** (9), para isso deve executar-se:

\# 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)\\

Passo 1. Reiniciamos o serviço de FTP a partir da consola do PowerShell

Com isto já terminou o processo de configuração do FTP.

&#x20;

### **Conclusões e próximos passos:**

Ao longo deste tutorial vimos como realizar a\*\* instalação e configurar um servidor FTP no Windows através do PowerShell\*\* dentro de um dos servidores Windows alojados dentro da Plenit.

Se o que leste até agora te pareceu interessante, podes aprofundar mais sobre alguns serviços relacionados; é possível que os seguintes tutoriais te interessem:

* [Como implementar um novo servidor na Plenit](https://jotelulu.com/soporte/tutoriales/como-desplegar-servidor){target="\_blank" rel="noopener"}.
* [Como criar um túnel VPN site-to-site na Plenit](https://jotelulu.com/soporte/tutoriales/crear-tunel-vpn-site-to-site){target="\_blank" rel="noopener"}.
* [Como criar modelos num servidor para reutilizá-los no Desktop Remoto](https://jotelulu.com/soporte/tutoriales/crear-plantillas-servidor-para-reutilizarlas-escritorio-remoto){target="\_blank" rel="noopener"}.
* [Como criar um VPC e associar um TIER na Plenit](https://jotelulu.com/soporte/tutoriales/como-crear-vpc-asociar-tier){target="\_blank" rel="noopener"}.

Esperamos que, com este pequeno guia, não tenhas problemas ao configurar o teu servidor FTP de forma rápida e funcional, mas, se os tiveres, não hesites em contactar-nos para que possamos dar-te uma ajuda.

**Obrigado pela tua confiança.**


---

# 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/docs-pt/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.
