
🔓 Cómo obtener privilegios de root en WinSCP: configurar sudo para transferencias de archivos
Usted se conecta a un servidor como usuario regular, navega a /etc/nginx y recibe «Permiso denegado». Archivos de configuración, directorios del sistema, registros: todo esto está bloqueado para una cuenta sin privilegios de root. Y el inicio de sesión directo como root por SSH está deshabilitado en la mayoría de los servidores por razones de seguridad.
WinSCP es un gestor de archivos práctico para Windows, pero por defecto su sesión SFTP opera con los permisos del usuario con el que inició sesión. El protocolo SFTP no puede solicitar elevación de privilegios «sobre la marcha» como una terminal: no es interactivo durante el saludo inicial y no puede mostrar una ventana para ingresar una contraseña de sudo.
A continuación, se presentan cuatro métodos funcionales para hacer que WinSCP se ejecute con privilegios de superusuario, desde el más simple hasta el enfoque «Jedi». Cada uno ha sido probado en Ubuntu, Debian y CentOS. Elija el que mejor se adapte a su infraestructura.
💡 Resumen rápido:
- ➡️ Problema: WinSCP no otorga privilegios de
rootpor defecto, incluso si el usuario tienesudo. - ✅ Método principal: Reemplazar el comando de inicio del servidor SFTP en la configuración del sitio de WinSCP. Rápido y focalizado.
- 🔄 Alternativa: Cambiar al protocolo SCP con
sudo su -como shell. - ⚙️ Avanzado: Editar
sshd_configen el servidor. Una solución global para todas las conexiones.
Paso 1: Comando de inicio del servidor SFTP (el método principal)
La forma más común y elegante de obtener privilegios de root en WinSCP es hacer que inicie el servidor SFTP como superusuario desde el principio. Esto se logra reemplazando el comando de inicio en la configuración de una conexión específica. El servidor en sí no necesita ser reconfigurado; la solución funciona por conexión.

Instrucciones paso a paso:
- Inicie WinSCP y abra el Administrador de sitios.
- Seleccione la conexión deseada y haga clic en Editar.
- Haga clic en Avanzado… en la parte inferior de la ventana.
- En el menú izquierdo, vaya a Entorno → SFTP.
- En el campo «Servidor SFTP», reemplace «Predeterminado» con el siguiente comando:
1 sudo /usr/lib/openssh/sftp-server
Para distribuciones más antiguas, la ruta puede diferir. Ubicaciones típicas de sftp-server:
Distribución | Ruta a sftp-server |
|---|---|
Ubuntu / Debian (actual) |
|
Ubuntu / Debian (antiguo) |
|
CentOS / RHEL / Fedora |
|
Amazon Linux |
|
Puede verificar la ruta exacta en su servidor mediante la terminal: cat /etc/ssh/sshd_config | grep Subsystem. Este comando muestra qué binario utiliza el propio servidor SSH.
El sistema iniciará el subsistema de transferencia de archivos con privilegios de root inmediatamente. Sin embargo, para que esto funcione sin errores, su usuario debe poder ejecutar sudo sin solicitud de contraseña. Eso se cubre en el siguiente paso.
Paso 2: Configuración de sudoers (permitir sudo sin contraseña)
Dado que el saludo inicial de SFTP no es interactivo, WinSCP no tiene forma de mostrar una ventana para ingresar una contraseña de sudo. El servidor simplemente terminará la conexión con un error si se solicita una contraseña. La solución es otorgar al usuario permiso para ejecutar el comando requerido sin contraseña a través del archivo /etc/sudoers.

Qué hacer:
- Conéctese al servidor por SSH (usando PuTTY o la terminal integrada de WinSCP).
- Abra el editor de sudoers con
sudo visudo. Nunca edite/etc/sudoersdirectamente: un error de sintaxis bloquearásudopara todo el sistema, yvisudovalida la sintaxis antes de guardar. - Agregue la siguiente línea al final del archivo (reemplace
usernamecon su nombre de usuario):
1 username ALL=(ALL) NOPASSWD: ALL
Esto otorga al usuario acceso completo sin contraseña. Una opción más segura es restringir el permiso solo al comando de inicio del servidor SFTP:
1 username ALL=NOPASSWD: /usr/lib/openssh/sftp-server
Si el servidor tiene múltiples administradores con diferentes inicios de sesión, una configuración limitada reduce el riesgo: incluso si una cuenta se ve comprometida, el atacante no obtendrá acceso root a todo, solo la capacidad de iniciar SFTP.
Nota: la opción requiretty en sudoers debe estar deshabilitada. Las implementaciones modernas de sudo-rs no la soportan por defecto, pero en servidores antiguos, verifique y comente la línea Defaults requiretty si existe.
Paso 3: Cambiar al protocolo SCP (una alternativa rápida)
Si no desea lidiar con las rutas a sftp-server, puede cambiar el protocolo de transferencia de datos en sí. WinSCP soporta SCP, un protocolo más antiguo pero confiable que recoge más fácilmente la configuración del shell.

Cómo cambiar:
- En la configuración de sesión de WinSCP, cambie Protocolo de archivo de SFTP a SCP.
- Vaya a Avanzado → SCP/Shell.
- En el campo Shell, ingrese:
sudo su -
Al conectarse, WinSCP ejecutará este comando inmediatamente después del inicio de sesión y cambiará la sesión a modo root.
| SFTP | SCP |
|---|---|---|
Privilegios de root | Reemplazando el binario del servidor | Reemplazando el shell ( |
Velocidad | Mayor, especialmente con muchos archivos pequeños | Menor |
Reanudar al desconectar | Sí | No |
Fiabilidad en sistemas antiguos | Requiere ruta exacta al binario | Funciona «de fábrica» |
Seguridad | NOPASSWD puede limitarse a un comando | Requiere sudo completo sin contraseña |
El método SCP es un compromiso. Es más fácil de configurar pero pierde frente a SFTP en velocidad y capacidades de recuperación tras una desconexión. Para ediciones de configuración puntuales, la diferencia es insignificante. Para transferir regularmente cientos de archivos, es mejor configurar el método SFTP.
Paso 4: Configuración global de sshd_config (para usuarios avanzados)
Este método es para administradores que desean configurar el comportamiento del servidor SSH de forma centralizada. La idea: reemplazar la línea Subsystem sftp en /etc/ssh/sshd_config con una construcción lógica que determine automáticamente si el usuario puede ejecutar sudo sin contraseña e inicie SFTP con los privilegios apropiados.
Qué cambiar:
Línea antigua (típicamente):
1 Subsystem sftp /usr/lib/openssh/sftp-server
Línea nueva:
1 Subsystem sftp sudo -n true && sudo -n /usr/lib/openssh/sftp-server || /usr/lib/openssh/sftp-server
Cómo funciona:
sudo -n trueverifica si el usuario puede ejecutarsudosin contraseña (la bandera-nsignifica no interactivo).- Si es así (
&&), el servidor se inicia con privilegios deroot. - Si no (
||), el servidor se inicia con privilegios de usuario regular.
Después de editar, reinicie el servicio SSH: sudo systemctl restart sshd.
Importante: un error de sintaxis en este archivo lo dejará completamente fuera del servidor por SSH. Antes de editar, asegúrese de tener una segunda terminal con una sesión activa. Si algo sale mal, podrá revertir los cambios. También haga una copia de seguridad: cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.
Particularidades de servidores en la nube (AWS EC2, DigitalOcean)
Las imágenes de Linux en la nube a menudo tienen configuraciones de sudoers predefinidas que pueden simplificar o complicar la tarea.

AWS EC2 (Ubuntu):
El usuario ubuntu en imágenes de Ubuntu 18.04 y posteriores a menudo ya tiene los permisos necesarios. Verifique el archivo /etc/sudoers.d/90-cloud-init-users, que ya puede contener la línea:
1 ubuntu ALL=(ALL) NOPASSWD:ALL
Si está allí, puede omitir el paso 2. En la configuración de WinSCP, use el comando sudo /usr/lib/openssh/sftp-server.
AWS EC2 (Amazon Linux):
En Amazon Linux, la ruta a sftp-server es diferente: /usr/libexec/openssh/sftp-server. Un error de una sola letra (lib en lugar de libexec) resultará en el código de error 127 (Comando no encontrado) y una caída inmediata de la conexión.
DigitalOcean (Droplets de Ubuntu):
En los droplets estándar de DigitalOcean, el usuario root está habilitado por defecto pero el acceso es solo mediante clave SSH. Si creó un usuario separado, la configuración de sudoers es la misma que para Ubuntu regular.
Consejo general para la nube: antes de ingresar una ruta en WinSCP, verifique que el archivo exista en el servidor: ls -la /usr/lib/openssh/sftp-server (o el equivalente para su distribución).
⁉️🤔 Preguntas frecuentes
¿Necesito habilitar el inicio de sesión directo de root para que WinSCP funcione con sudo?
No. El objetivo de los métodos descritos es usar una cuenta regular y elevar privilegios temporalmente mediante
sudo. El inicio de sesión directo deroot(PermitRootLogin yes) se considera una mala práctica de seguridad: los registros no mostrarán qué administrador realizó realmente una acción.
¿Por qué WinSCP muestra un error de «Comando no encontrado» después de la configuración?
Lo más probable es que la ruta a
sftp-serversea incorrecta. En diferentes distribuciones se encuentra en/usr/lib/,/usr/lib/openssh/o/usr/libexec/openssh/. La ruta exacta se puede verificar con el comandocat /etc/ssh/sshd_config | grep Subsystemen el servidor.
¿Qué tan seguro es NOPASSWD en sudoers?
Es un compromiso. El acceso completo con
ALL=(ALL) NOPASSWD:ALLreduce la protección: si un atacante obtiene acceso al usuario, también obtieneroot. Restringir a un comando específico (/usr/lib/openssh/sftp-server) es significativamente más seguro: un externo no podrá ejecutar nada más que el servidor SFTP a través de esta cuenta.
¿Funciona esto con otros clientes como FileZilla o Cyberduck?
El principio es el mismo, pero la configuración difiere. FileZilla no tiene un campo conveniente para el comando del servidor SFTP en su interfaz gráfica; se requiere editar el archivo de configuración. Cyberduck soporta la opción «Servidor SFTP» en la configuración de conexión, similar a WinSCP. WinSCP gana en conveniencia específicamente en este escenario.
¿Qué debo hacer si los archivos son visibles pero no editables?
Verifique el propietario y los permisos con
ls -laen el servidor. Si configuró el servidor SFTP mediantesudopero la conexión volvió a los permisos regulares, significa quesudosolicitó una contraseña y no recibió respuesta. Revise la configuración de NOPASSWD del paso 2.
¿Puedo simplemente cambiar el propietario de los archivos del sistema a mi usuario?
Esta es una solución alternativa «sucia». Los servicios del sistema esperan que sus configuraciones pertenezcan a
root. Cambiar el propietario (chown) o los permisos (chmod) en archivos del sistema puede romper los servicios. Es mejor dedicar cinco minutos a configurar sudo y hacer las cosas correctamente.
¿Cuál es la diferencia entre SCP y SFTP en el contexto de sudo?
SCP es simplemente copia sobre SSH: recoge más fácilmente el shell, por lo que para él el comando
sudo su -en el campo Shell es suficiente. SFTP es un subsistema completo que se ejecuta como un proceso separado: requiere el truco de reemplazo del binario. SFTP es más rápido y tiene más funciones; SCP es más fácil de configurar.
¿Son visibles las acciones en los registros al usar sudo a través de WinSCP?
Sí. En
/var/log/auth.loghabrá una entrada que muestra que el usuariousernameelevó privilegios mediantesudo. Esto es una ventaja: si hay múltiples administradores, los registros muestran exactamente quién realizó la operación. Con el inicio de sesión directo deroot, no existe tal transparencia.
¿Qué debo hacer si sudo requiere TTY pero WinSCP no proporciona uno?
Verifique
/etc/sudoerspara la opciónDefaults requiretty. Si existe, coméntela (agregue#al principio de la línea) o desactívela para un usuario específico:Defaults:username !requiretty. Las implementaciones modernas desudo-rsno soportan esta opción; el problema solo es relevante para servidores antiguos.
¿Puedo ejecutar SFTP como un usuario diferente en lugar de root?
Sí. El comando
sudo -u www-data /usr/lib/openssh/sftp-serveriniciará la sesión comowww-data. Esto es conveniente cuando necesita editar archivos de un sitio web sin tocar directorios del sistema. Los permisos de sudoers para esto deben incluir la opción-u:username ALL=(www-data) NOPASSWD: /usr/lib/openssh/sftp-server.
Veredicto final: qué método elegir
Para el trabajo diario con el servidor, el primer método es óptimo: reemplazar el comando del servidor SFTP combinado con una configuración NOPASSWD limitada solo para sftp-server. Es seguro, no afecta la configuración global y funciona en todas las distribuciones modernas.
- Si tiene Ubuntu / Debian y está dispuesto a dedicar 5 minutos a la configuración, use Paso 1 + Paso 2 y no vuelva a preocuparse por el tema.
- Si el servidor es antiguo y no se puede encontrar la ruta a
sftp-server, cambie a SCP (Paso 3): tolera imprecisiones y funciona prácticamente en todas partes. - Si administra una docena de servidores y desea un estándar unificado, configure sshd_config (Paso 4) una vez mediante Ansible o manualmente, pero siempre con una copia de seguridad.
Comience con una verificación: inicie sesión en el servidor por SSH y ejecute cat /etc/ssh/sshd_config | grep Subsystem. En un minuto sabrá la ruta exacta y el primer método funcionará al primer intento. ¿Qué método de transferencia de archivos utiliza? Compártalo en los comentarios.



