
🔓 Como obter privilégios de root no WinSCP: configurar o sudo para transferências de ficheiros
Liga-se a um servidor como utilizador normal, navega até /etc/nginx e recebe «Permission denied». Ficheiros de configuração, diretórios de sistema, logs: tudo isto está bloqueado para uma conta sem privilégios root. E o início de sessão direto como root via SSH está desativado na maioria dos servidores por razões de segurança.
O WinSCP é um gestor de ficheiros prático para Windows, mas, por predefinição, a sua sessão SFTP funciona com as permissões do utilizador com que iniciou sessão. O protocolo SFTP não pode solicitar elevação de privilégios «em tempo real» como um terminal: não é interativo durante o handshake e não pode exibir uma janela para introduzir a palavra-passe do sudo.
Abaixo estão quatro métodos funcionais para executar o WinSCP com privilégios de superutilizador, desde o mais simples até à abordagem «Jedi». Cada um foi testado em Ubuntu, Debian e CentOS. Escolha o que melhor se adapta à sua infraestrutura.
💡 Resumo rápido:
- ➡️ Problema: O WinSCP não concede privilégios
rootpor predefinição, mesmo que o utilizador tenhasudo. - ✅ Método principal: Substituir o comando de arranque do servidor SFTP nas definições do site do WinSCP. Rápido e direcionado.
- 🔄 Alternativa: Mudar para o protocolo SCP com
sudo su -como shell. - ⚙️ Avançado: Editar o
sshd_configno servidor. Uma solução global para todas as ligações.
Passo 1: Comando de arranque do servidor SFTP (o método principal)
A forma mais comum e elegante de obter privilégios root no WinSCP é fazê-lo iniciar o servidor SFTP como superutilizador desde o início. Isto é feito substituindo o comando de arranque nas definições de uma ligação específica. O servidor em si não precisa de ser reconfigurado; a solução funciona por ligação.

Instruções passo a passo:
- Inicie o WinSCP e abra o Gestor de Sites.
- Selecione a ligação desejada e clique em Editar.
- Clique em Avançadas… na parte inferior da janela.
- No menu à esquerda, vá para Ambiente → SFTP.
- No campo «Servidor SFTP», substitua «Predefinido» pelo seguinte comando:
1 sudo /usr/lib/openssh/sftp-server
Para distribuições mais antigas, o caminho pode ser diferente. Localizações típicas do sftp-server:
Distribuição | Caminho para o sftp-server |
|---|---|
Ubuntu / Debian (atual) |
|
Ubuntu / Debian (mais antigo) |
|
CentOS / RHEL / Fedora |
|
Amazon Linux |
|
Pode verificar o caminho exato no seu servidor via terminal: cat /etc/ssh/sshd_config | grep Subsystem. Este comando mostra qual o binário que o próprio servidor SSH utiliza.
O sistema iniciará o subsistema de transferência de ficheiros com privilégios root imediatamente. No entanto, para que isto funcione sem erro, o seu utilizador deve poder executar sudo sem solicitação de palavra-passe. Isso é abordado no próximo passo.
Passo 2: Configurar o sudoers (permitir sudo sem palavra-passe)
Como o handshake SFTP não é interativo, o WinSCP não tem como exibir uma janela para introduzir a palavra-passe do sudo. O servidor simplesmente terminará a ligação com um erro se for solicitada uma palavra-passe. A solução é conceder ao utilizador permissão para executar o comando necessário sem palavra-passe através do ficheiro /etc/sudoers.

O que fazer:
- Ligue-se ao servidor via SSH (usando o PuTTY ou o terminal integrado do WinSCP).
- Abra o editor de sudoers com
sudo visudo. Nunca edite o/etc/sudoersdiretamente: um erro de sintaxe bloqueará osudopara todo o sistema, e ovisudovalida a sintaxe antes de guardar. - Adicione a seguinte linha no final do ficheiro (substitua
usernamepelo seu nome de utilizador):
1 username ALL=(ALL) NOPASSWD: ALL
Isto concede ao utilizador acesso total sem palavra-passe. Uma opção mais segura é restringir a permissão apenas ao comando de arranque do servidor SFTP:
1 username ALL=NOPASSWD: /usr/lib/openssh/sftp-server
Se o servidor tiver vários administradores com logins diferentes, uma configuração restrita reduz o risco: mesmo que uma conta seja comprometida, o atacante não terá acesso root a tudo, apenas a capacidade de iniciar o SFTP.
Nota: a opção requiretty no sudoers deve estar desativada. As implementações modernas de sudo-rs não a suportam por predefinição, mas em servidores mais antigos, verifique e comente a linha Defaults requiretty se existir.
Passo 3: Mudar para o protocolo SCP (uma alternativa rápida)
Se não quiser lidar com os caminhos para o sftp-server, pode mudar o próprio protocolo de transferência de dados. O WinSCP suporta SCP, um protocolo mais antigo mas fiável que adota mais facilmente as definições da shell.

Como mudar:
- Nas definições da sessão do WinSCP, altere Protocolo de ficheiros de SFTP para SCP.
- Vá para Avançadas → SCP/Shell.
- No campo Shell, introduza:
sudo su -
Ao ligar-se, o WinSCP executará este comando imediatamente após o login e mudará a sessão para o modo root.
| SFTP | SCP |
|---|---|---|
Privilégios root | Substituindo o binário do servidor | Substituindo a shell ( |
Velocidade | Maior, especialmente com muitos ficheiros pequenos | Menor |
Retomar após desconexão | Sim | Não |
Fiabilidade em sistemas antigos | Requer caminho exato para o binário | Funciona «out of the box» |
Segurança | NOPASSWD pode ser limitado a um comando | Requer sudo sem palavra-passe total |
O método SCP é um compromisso. É mais fácil de configurar, mas perde para o SFTP em velocidade e capacidade de recuperação após uma desconexão. Para edições pontuais de configuração, a diferença é insignificante. Para transferir regularmente centenas de ficheiros, é melhor configurar o método SFTP.
Passo 4: Configuração global do sshd_config (para utilizadores avançados)
Este método é para administradores que desejam configurar o comportamento do servidor SSH centralmente. A ideia: substituir a linha Subsystem sftp no /etc/ssh/sshd_config por uma construção lógica que determina automaticamente se o utilizador pode executar sudo sem palavra-passe e inicia o SFTP com os privilégios apropriados.
O que alterar:
Linha antiga (tipicamente):
1 Subsystem sftp /usr/lib/openssh/sftp-server
Linha nova:
1 Subsystem sftp sudo -n true && sudo -n /usr/lib/openssh/sftp-server || /usr/lib/openssh/sftp-server
Como funciona:
sudo -n trueverifica se o utilizador pode executarsudosem palavra-passe (a flag-nsignifica não interativo).- Se sim (
&&), o servidor inicia com privilégiosroot. - Se não (
||), o servidor inicia com privilégios de utilizador normal.
Após editar, reinicie o serviço SSH: sudo systemctl restart sshd.
Importante: um erro de sintaxe neste ficheiro irá bloqueá-lo completamente fora do servidor via SSH. Antes de editar, certifique-se de que tem um segundo terminal com uma sessão ativa. Se algo correr mal, poderá reverter as alterações. Faça também uma cópia de segurança: cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.
Especificidades de servidores cloud (AWS EC2, DigitalOcean)
As imagens Linux na cloud têm frequentemente definições de sudoers pré-configuradas que podem simplificar ou complicar a tarefa.

AWS EC2 (Ubuntu):
O utilizador ubuntu em imagens Ubuntu 18.04 e mais recentes já tem frequentemente as permissões necessárias. Verifique o ficheiro /etc/sudoers.d/90-cloud-init-users, que pode já conter a linha:
1 ubuntu ALL=(ALL) NOPASSWD:ALL
Se estiver lá, pode saltar o passo 2. Nas definições do WinSCP, use o comando sudo /usr/lib/openssh/sftp-server.
AWS EC2 (Amazon Linux):
No Amazon Linux, o caminho para o sftp-server é diferente: /usr/libexec/openssh/sftp-server. Um erro de uma letra (lib em vez de libexec) resultará no código de erro 127 (Command not found) e numa queda imediata da ligação.
DigitalOcean (Ubuntu Droplets):
Nos droplets padrão da DigitalOcean, o utilizador root está ativado por predefinição, mas o acesso é apenas por chave SSH. Se criou um utilizador separado, a configuração do sudoers é a mesma que para o Ubuntu normal.
Conselho geral para cloud: antes de introduzir um caminho no WinSCP, verifique se o ficheiro existe no servidor: ls -la /usr/lib/openssh/sftp-server (ou o equivalente para a sua distribuição).
⁉️🤔 Perguntas frequentes
Preciso de ativar o login direto como root para o WinSCP funcionar com sudo?
Não. O objetivo dos métodos descritos é usar uma conta normal e elevar temporariamente os privilégios via
sudo. O login direto comoroot(PermitRootLogin yes) é considerado uma má prática de segurança: os logs não mostrarão qual o administrador que realmente executou uma ação.
Por que razão o WinSCP mostra um erro «Command not found» após a configuração?
Muito provavelmente, o caminho para o
sftp-serverestá incorreto. Em diferentes distribuições, está localizado em/usr/lib/,/usr/lib/openssh/ou/usr/libexec/openssh/. O caminho exato pode ser verificado com o comandocat /etc/ssh/sshd_config | grep Subsystemno servidor.
Quão seguro é o NOPASSWD no sudoers?
É um compromisso. O acesso total com
ALL=(ALL) NOPASSWD:ALLreduz a proteção: se um atacante obtiver acesso ao utilizador, também obtémroot. Restringir a um comando específico (/usr/lib/openssh/sftp-server) é significativamente mais seguro: um intruso não poderá executar nada além do servidor SFTP através desta conta.
Isto funciona com outros clientes como o FileZilla ou o Cyberduck?
O princípio é o mesmo, mas a configuração difere. O FileZilla não tem um campo conveniente para o comando do servidor SFTP na sua interface gráfica; é necessário editar o ficheiro de configuração. O Cyberduck suporta a opção «SFTP Server» nas definições de ligação, semelhante ao WinSCP. O WinSCP ganha em conveniência especificamente neste cenário.
O que devo fazer se os ficheiros estão visíveis mas não são editáveis?
Verifique o proprietário e as permissões com
ls -lano servidor. Se configurou o servidor SFTP viasudo, mas a ligação reverteu para permissões normais, significa que osudosolicitou uma palavra-passe e não recebeu resposta. Volte a verificar a configuração NOPASSWD do passo 2.
Posso simplesmente mudar o proprietário dos ficheiros de sistema para o meu utilizador?
Esta é uma solução de recurso «suja». Os serviços do sistema esperam que as suas configurações pertençam ao
root. Alterar o proprietário (chown) ou as permissões (chmod) em ficheiros de sistema pode quebrar serviços. É melhor gastar cinco minutos a configurar o sudo e fazer as coisas corretamente.
Qual é a diferença entre SCP e SFTP no contexto do sudo?
O SCP é simplesmente cópia sobre SSH: adota mais facilmente a shell, pelo que para ele o comando
sudo su -no campo Shell é suficiente. O SFTP é um subsistema completo que é executado como um processo separado: requer o truque de substituição do binário. O SFTP é mais rápido e rico em funcionalidades; o SCP é mais fácil de configurar.
As ações são visíveis nos logs ao usar o sudo através do WinSCP?
Sim. Em
/var/log/auth.loghaverá uma entrada mostrando que o utilizadorusernameelevou privilégios viasudo. Isto é uma vantagem: se houver vários administradores, os logs mostram exatamente quem realizou a operação. Com o login direto comoroot, não existe essa transparência.
O que devo fazer se o sudo exigir TTY mas o WinSCP não fornecer um?
Verifique o
/etc/sudoerspara a opçãoDefaults requiretty. Se existir, comente-a (adicione#no início da linha) ou desative-a para um utilizador específico:Defaults:username !requiretty. As implementações modernas desudo-rsnão suportam esta opção; o problema é apenas relevante para servidores mais antigos.
Posso executar o SFTP como um utilizador diferente em vez de root?
Sim. O comando
sudo -u www-data /usr/lib/openssh/sftp-serveriniciará a sessão comowww-data. Isto é conveniente quando precisa de editar ficheiros de um site sem tocar nos diretórios do sistema. As permissões do sudoers para isto devem incluir a opção-u:username ALL=(www-data) NOPASSWD: /usr/lib/openssh/sftp-server.
Veredito final: qual o método a escolher
Para o trabalho diário com o servidor, o primeiro método é o ideal: substituir o comando do servidor SFTP combinado com uma configuração NOPASSWD restrita apenas ao sftp-server. É seguro, não afeta as definições globais e funciona em todas as distribuições modernas.
- Se tem Ubuntu / Debian e está disposto a gastar 5 minutos na configuração, use o Passo 1 + Passo 2 e nunca mais volte a este problema.
- Se o servidor é antigo e o caminho para o
sftp-servernão pode ser encontrado, mude para SCP (Passo 3): tolera imprecisões e funciona praticamente em todo o lado. - Se administra uma dúzia de servidores e quer um padrão unificado, configure o sshd_config (Passo 4) uma vez via Ansible ou manualmente, mas definitivamente com uma cópia de segurança.
Comece com uma verificação: inicie sessão no servidor via SSH e execute cat /etc/ssh/sshd_config | grep Subsystem. Num minuto saberá o caminho exato, e o primeiro método funcionará à primeira tentativa. Que método de transferência de ficheiros utiliza? Partilhe nos comentários.



