secaudit.eu
Proteção

SFTP vs FTP no WordPress: mude para chaves SSH

SFTP vs FTP no WordPress: porque o FTP simples tem de acabar, como apagar contas FTP antigas, criar chaves SSH por pessoa e tirar palavras-passe FTP do wp-config.php.

Pela , AngelForce OÜ 8 min de leitura

Também em: English Deutsch Français Español Italiano Polski Türkçe

Abra a página de contas FTP no painel do seu alojamento. Em muitos sites WordPress vai encontrar pelo menos um acesso que ninguém sabe explicar. Pode ser da agência que criou o site, de um freelancer que corrigiu um plugin há três anos ou de uma conta de teste chamada ftp1. Na questão SFTP vs FTP, a resposta é simples: apague essas contas, deixe de usar FTP simples e dê a cada pessoa a sua própria chave SSH para SFTP. Este guia percorre essa mudança por uma ordem que não deixa ninguém trancado de fora.

SFTP vs FTP: porque é que o FTP simples tem de acabar

O FTP simples envia o nome de utilizador, a palavra-passe e todos os ficheiros sem cifragem. Qualquer pessoa no caminho da rede consegue ler tudo: numa rede Wi-Fi de hotel, num router de escritório comprometido ou num fornecedor de rede descuidado. Isso inclui o wp-config.php com a palavra-passe da base de dados, se alguma vez o tiver descarregado por FTP.

Os acessos FTP ficam também totalmente fora do WordPress. A autenticação de dois fatores no wp-admin não os protege e não aparecem na lista de utilizadores do WordPress. Quem tiver uma palavra-passe FTP válida pode carregar um ficheiro PHP e executar código no seu site sem nunca ver a página de início de sessão.

Mudar de protocolo tem limites claros. O SFTP não ajuda se o portátil que guarda a chave estiver infetado e nada faz contra um plugin vulnerável. Fecha uma porta concreta: credenciais legíveis e acessos esquecidos ao sistema de ficheiros.

Fluxo da chave SSH: o ssh-keygen cria uma chave privada e uma pública; só a chave pública vai para o servidor
A chave privada fica no seu dispositivo. Só a chave pública é copiada para o servidor.

FTP, FTPS e SFTP comparados

Os nomes confundem, por isso aqui fica a versão curta.

FTPFTPSSFTP
CifragemNenhumaTLSSSH
Porta habitual2121 (explícito) ou 990 (implícito)22
LigaçõesControlo + dadosControlo + dadosUma
Início de sessão com chaveNãoNão (só certificados)Sim
VeredictoNuncaAlternativa de recursoRecomendado

O FTPS é o velho protocolo FTP envolvido em TLS. Cifra o tráfego, mas continua a abrir ligações de dados separadas. Estas entram muitas vezes em conflito com firewalls e NAT, e o resultado é o clássico erro "directory listing failed". Apesar do nome, o SFTP não tem relação com o FTP. É um subsistema do SSH, funciona numa única ligação cifrada e permite iniciar sessão com chaves SSH em vez de palavras-passe.

A nossa recomendação: use SFTP se o seu alojamento oferecer acesso SSH. Use FTPS apenas como alternativa de recurso. Não use FTP simples em circunstância alguma. No FileZilla, defina o protocolo no Gestor de Sites como "SFTP - SSH File Transfer Protocol". Se tiver mesmo de usar FTPS, escolha "Require explicit FTP over TLS". Não escolha "Use explicit FTP over TLS if available", porque essa opção recua silenciosamente para FTP simples quando o TLS falha. O WinSCP oferece a mesma escolha em "File protocol".

Primeiro, encontre e apague as contas FTP antigas

Comece por um inventário, antes de criar qualquer chave. Procure nestes sítios:

  • A secção de contas FTP do painel de alojamento (o cPanel, o Plesk e painéis semelhantes têm uma).
  • A secção de acesso SSH ou de chaves SSH, incluindo chaves que já estejam autorizadas.
  • No seu próprio servidor: utilizadores do sistema com shell de início de sessão (grep -vE 'nologin|false' /etc/passwd) e todos os ficheiros ~/.ssh/authorized_keys.

Para cada conta, anote quem a usa e para quê. Se ninguém souber indicar o responsável, apague a conta. Mudar-lhe a palavra-passe não basta. Se a palavra-passe da conta principal de alojamento alguma vez foi escrita num cliente FTP, mude-a também: essa palavra-passe viajou sem cifragem pelo menos uma vez.

Guarde um registo curto da limpeza: data, contas removidas, quem aprovou. Faça em paralelo a mesma revisão aos acessos do WordPress. O nosso guia sobre segurança das funções de utilizador no WordPress trata desse lado.

Gere uma chave SSH com frase-passe (uma por pessoa)

Cada pessoa cria a sua própria chave, no seu próprio computador. O macOS, o Linux e as versões atuais do Windows incluem o OpenSSH:

ssh-keygen -t ed25519 -C "anna@example-company.eu"

Aceite a localização predefinida e, quando lhe for pedido, defina uma frase-passe. Não a dispense. O comando cria dois ficheiros:

  • ~/.ssh/id_ed25519 é a chave privada. Nunca sai do dispositivo.
  • ~/.ssh/id_ed25519.pub é a chave pública. É esta que se partilha.

Para não ter de escrever a frase-passe em cada ligação, carregue a chave num agente uma vez por sessão com ssh-add ~/.ssh/id_ed25519. No Windows, ative primeiro o serviço "OpenSSH Authentication Agent". Alguns clientes, como o PuTTY, precisam do formato .ppk. O PuTTYgen consegue importar a chave OpenSSH e guardar uma cópia em .ppk. O manual do ssh-keygen lista todas as opções.

Porquê uma chave por pessoa? Retirar o acesso a alguém passa a significar apagar uma linha, e os registos mostram de quem era a chave utilizada. Chaves partilhadas e acessos partilhados tornam as duas coisas impossíveis, por isso elimine-os nesta migração.

Adicione a chave pública: painel de alojamento ou ~/.ssh/authorized_keys

Em alojamento gerido ou partilhado, abra a secção de acesso SSH ou de chaves SSH. Cole a chave pública, dê-lhe um nome reconhecível e autorize-a, se o painel o pedir (o cPanel tem um passo "Authorize" à parte).

No seu próprio servidor, acrescente a chave ao ficheiro authorized_keys do utilizador e defina permissões restritas:

mkdir -p ~/.ssh
chmod 700 ~/.ssh
cat anna.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

Se o início de sessão com palavra-passe ainda funcionar, ssh-copy-id -i ~/.ssh/id_ed25519.pub user@host faz o mesmo a partir do computador da própria pessoa. Mantenha o comentário no fim de cada linha de chave (anna@example-company.eu). É assim que vai reconhecer a chave daqui a dois anos.

Teste o acesso com chave e só depois desligue a palavra-passe

Mantenha aberta a sessão atual ou o separador do painel. Num segundo terminal, teste a nova chave:

ssh -i ~/.ssh/id_ed25519 user@host

Ou ligue-se com o seu cliente SFTP, usando o ficheiro da chave. Só quando isto funcionar para todas as pessoas que precisam de acesso é que deve desativar a autenticação por palavra-passe. Num painel de alojamento, costuma ser um interruptor na secção SSH. Em alojamento partilhado onde não o encontre, pergunte ao seu fornecedor se é possível desligar, na sua conta, o SSH e o FTP com palavra-passe.

No seu próprio servidor, defina isto em /etc/ssh/sshd_config:

PasswordAuthentication no
KbdInteractiveAuthentication no

Verifique também os ficheiros em /etc/ssh/sshd_config.d/. Algumas imagens de cloud trazem um ficheiro complementar que define PasswordAuthentication yes. Valide a configuração e confirme o valor efetivo antes de recarregar:

sudo sshd -t
sudo sshd -T | grep -i passwordauthentication
sudo systemctl reload ssh

Nos sistemas baseados em Red Hat, o serviço chama-se sshd.

A partir daqui, a saída de um colaborador inclui mais um passo: no dia em que alguém sai, apague a linha da sua chave.

FS_METHOD e credenciais FTP no wp-config.php

Por vezes o WordPress mostra um formulário "Connection Information" ao instalar ou atualizar um plugin. Acontece porque o PHP não consegue escrever diretamente nos ficheiros, o que costuma ser um problema de propriedade dos ficheiros. O nosso artigo sobre permissões de ficheiros no WordPress explica a causa.

Um expediente comum era colocar os dados FTP no wp-config.php:

define( 'FS_METHOD', 'ftpext' );
define( 'FTP_HOST', 'ftp.example.de' );
define( 'FTP_USER', 'webuser' );
define( 'FTP_PASS', 'the-hosting-password' );

Assim as atualizações funcionam, mas a palavra-passe do alojamento fica em texto simples num ficheiro que o PHP lê em cada pedido. Se o wp-config.php vazar, seja por uma cópia de segurança, um servidor mal configurado ou um plugin vulnerável, o acesso aos ficheiros vaza com ele. Verifique se existem estas constantes:

grep -nE "FS_METHOD|FTP_(HOST|USER|PASS|SSL|PUBKEY|PRIKEY)" wp-config.php

Faça a mesma verificação no diretório acima, porque algumas instalações mantêm o wp-config.php um nível acima. Remova as constantes e corrija a propriedade dos ficheiros para que o WordPress possa escrever diretamente. Nesse caso, funciona FS_METHOD definido como 'direct', ou pode omiti-lo por completo. Use 'ssh2' apenas quando a extensão ssh2 do PHP e uma chave dedicada estiverem bem configuradas. Depois, apague a conta FTP que era referida ou, no mínimo, mude-lhe a palavra-passe. A documentação do wp-config.php do WordPress descreve todas estas constantes. A nossa lista de verificação de reforço do wp-config.php cobre as restantes definições desse ficheiro.

O plugin gratuito Security Audit & Compliance, de secaudit.eu, analisa o site à procura de segredos e ficheiros expostos e de problemas de reforço da segurança, o que ajuda a detetar credenciais deixadas no sítio errado. Não consegue ver a lista de contas FTP no seu painel de alojamento, pelo que o inventário acima continua a ser uma tarefa manual.

FAQ

O FTPS chega, se o meu alojamento não tiver SSH?

É aceitável como alternativa de recurso, porque o tráfego vai cifrado. Configure o cliente para exigir TLS, use uma palavra-passe forte e única por pessoa e apague na mesma as contas antigas. Se o seu alojamento não oferecer acesso SSH e não souber dizer quando o fará, pondere mudar de fornecedor.

Preciso de chaves SSH para SFTP, ou basta uma palavra-passe?

O SFTP com palavra-passe já é muito melhor do que o FTP, porque a palavra-passe viaja cifrada. As chaves continuam a ser melhores. Não se adivinham nem se roubam através de uma página de início de sessão falsa, porque a chave privada nunca sai do seu dispositivo. Usar a mesma chave pública em vários servidores não a expõe como acontece com uma palavra-passe reutilizada, e cada chave pode ser removida individualmente.

E se alguém perder o portátil com uma chave lá dentro?

Retire a chave pública dessa pessoa de todos os servidores e painéis no mesmo dia. A frase-passe dá-lhe tempo, mas não é motivo para esperar. A pessoa gera depois um novo par de chaves no novo dispositivo.

O FTP simples é um problema para o RGPD?

O artigo 32.º, n.º 1, alínea a) do RGPD refere a cifragem como exemplo de medida de segurança adequada. Por isso, é difícil justificar acessos sem cifragem a um servidor que contém dados de clientes ou de formulários de contacto. O nosso artigo sobre o artigo 32.º do RGPD para WordPress explica o resto do artigo e a abordagem baseada no risco que lhe está subjacente.

Este artigo é informação geral e não constitui aconselhamento jurídico.

Verifique o seu site

O Security Audit & Compliance é o plugin WordPress da secaudit.eu: procura malware, spam oculto, ficheiros do núcleo alterados e código vulnerável, e associa as conclusões ao art. 32.º do RGPD, ao art. 21.º da NIS2 e ao OWASP Top 10.

Ver o que o plugin verifica
Equipa editorial da secaudit.eu

Os guias da secaudit.eu sobre segurança do WordPress e conformidade com as regras da UE são escritos com ferramentas de IA e comparados automaticamente com a nossa lista de fontes antes da publicação. A secaudit.eu é publicada pela AngelForce OÜ, uma empresa de software de Taline (Estónia).

Elaborado com apoio de IA e verificado antes da publicação. Este artigo é informação geral e não constitui aconselhamento jurídico.