Skip to content

Tout pour WordPress, le développement web — et plus encore

🔓 Comment obtenir les privilèges root dans WinSCP : configurer sudo pour les transferts de fichiers

🔓 Comment obtenir les privilèges root dans WinSCP : configurer sudo pour les transferts de fichiers

Vous vous connectez à un serveur en tant qu’utilisateur standard, vous naviguez vers /etc/nginx et vous obtenez «Permission denied». Les fichiers de configuration, les répertoires système, les journaux: tout cela est inaccessible à un compte sans privilèges root. Et la connexion directe en root via SSH est désactivée sur la plupart des serveurs pour des raisons de sécurité.

WinSCP est un gestionnaire de fichiers pratique pour Windows, mais par défaut, sa session SFTP fonctionne avec les droits de l’utilisateur avec lequel vous vous êtes connecté. Le protocole SFTP ne peut pas demander une élévation de privilèges «à la volée» comme le fait un terminal: il n’est pas interactif pendant la négociation de connexion et ne peut pas afficher de fenêtre pour saisir un mot de passe sudo.

Voici quatre méthodes opérationnelles pour exécuter WinSCP avec des privilèges superutilisateur, de la plus simple à l’approche «Jedi». Chacune a été testée sur Ubuntu, Debian et CentOS. Choisissez celle qui correspond le mieux à votre infrastructure.

💡 Aperçu rapide:

  • ➡️ Problème: WinSCP n’accorde pas les privilèges root par défaut, même si l’utilisateur dispose de sudo.
  • Méthode principale: Remplacer la commande de démarrage du serveur SFTP dans les paramètres de site de WinSCP. Rapide et ciblé.
  • 🔄 Alternative: Basculer vers le protocole SCP avec sudo su - comme shell.
  • ⚙️ Avancé: Modifier sshd_config sur le serveur. Une solution globale pour toutes les connexions.

Étape 1: commande de démarrage du serveur SFTP (la méthode principale)

La manière la plus courante et la plus élégante d’obtenir les privilèges root dans WinSCP consiste à lui faire lancer le serveur SFTP en tant que superutilisateur dès le départ. Pour cela, il suffit de remplacer la commande de démarrage dans les paramètres d’une connexion spécifique. Le serveur lui-même n’a pas besoin d’être reconfiguré; la solution fonctionne connexion par connexion.

SFTP server settings window in WinSCP

Instructions pas à pas:

  • Lancez WinSCP et ouvrez le Gestionnaire de sites.
  • Sélectionnez la connexion souhaitée et cliquez sur Modifier.
  • Cliquez sur Avancé… en bas de la fenêtre.
  • Dans le menu de gauche, allez dans Environnement → SFTP.
  • Dans le champ «Serveur SFTP», remplacez «Par défaut» par la commande suivante:
1sudo /usr/lib/openssh/sftp-server

Pour les distributions plus anciennes, le chemin peut différer. Emplacements typiques de sftp-server:

Distribution

Chemin vers sftp-server

Ubuntu / Debian (actuel)

/usr/lib/openssh/sftp-server

Ubuntu / Debian (ancien)

/usr/lib/sftp-server

CentOS / RHEL / Fedora

/usr/libexec/openssh/sftp-server

Amazon Linux

/usr/libexec/openssh/sftp-server

Vous pouvez vérifier le chemin exact sur votre serveur via le terminal: cat /etc/ssh/sshd_config | grep Subsystem. Cette commande indique quel binaire le serveur SSH utilise lui-même.

Le système lancera le sous-système de transfert de fichiers avec les privilèges root immédiatement. Cependant, pour que cela fonctionne sans erreur, votre utilisateur doit pouvoir exécuter sudo sans demande de mot de passe. Ce point est traité à l’étape suivante.


Étape 2: configuration de sudoers (autoriser sudo sans mot de passe)

La négociation de connexion SFTP n’étant pas interactive, WinSCP n’a aucun moyen d’afficher une fenêtre pour saisir un mot de passe sudo. Le serveur mettra simplement fin à la connexion avec une erreur si un mot de passe est demandé. La solution consiste à accorder à l’utilisateur l’autorisation d’exécuter la commande requise sans mot de passe via le fichier /etc/sudoers.

Editing the sudoers file via visudo

Ce qu’il faut faire:

  • Connectez-vous au serveur via SSH (en utilisant PuTTY ou le terminal intégré de WinSCP).
  • Ouvrez l’éditeur sudoers avec sudo visudo. Ne modifiez jamais /etc/sudoers directement: une erreur de syntaxe bloquera sudo pour tout le système, et visudo valide la syntaxe avant de sauvegarder.
  • Ajoutez la ligne suivante à la fin du fichier (remplacez username par votre identifiant):
1username ALL=(ALL) NOPASSWD: ALL

Cela accorde à l’utilisateur un accès complet sans mot de passe. Une option plus sécurisée consiste à restreindre l’autorisation à la seule commande de démarrage du serveur SFTP:

1username ALL=NOPASSWD: /usr/lib/openssh/sftp-server

Si le serveur compte plusieurs administrateurs avec des identifiants différents, une configuration restrictive réduit le risque: même si un compte est compromis, l’attaquant n’obtiendra pas un accès root à tout, seulement la possibilité de lancer SFTP.

Remarque: l’option requiretty dans sudoers doit être désactivée. Les implémentations modernes de sudo-rs ne la prennent pas en charge par défaut, mais sur les serveurs plus anciens, vérifiez et commentez la ligne Defaults requiretty si elle existe.


Étape 3: basculement vers le protocole SCP (une alternative rapide)

Si vous ne voulez pas gérer les chemins vers sftp-server, vous pouvez changer le protocole de transfert de données lui-même. WinSCP prend en charge SCP, un protocole plus ancien mais fiable qui récupère plus facilement les paramètres du shell.

Configuring SCP protocol and shell in WinSCP

Comment basculer:

  • Dans les paramètres de session WinSCP, changez Protocole de fichier de SFTP à SCP.
  • Allez dans Avancé → SCP/Shell.
  • Dans le champ Shell, saisissez: sudo su -

Lors de la connexion, WinSCP exécutera cette commande immédiatement après la connexion et fera basculer la session en mode root.

SFTP

SCP

Privilèges root

En remplaçant le binaire du serveur

En remplaçant le shell (sudo su -)

Vitesse

Plus élevée, surtout avec de nombreux petits fichiers

Plus faible

Reprise après déconnexion

Oui

Non

Fiabilité sur les anciens systèmes

Nécessite le chemin exact du binaire

Fonctionne «clé en main»

Sécurité

NOPASSWD peut être limité à une commande

Nécessite un sudo complet sans mot de passe

La méthode SCP est un compromis. Elle est plus facile à configurer mais perd face à SFTP en termes de vitesse et de capacité de récupération après une déconnexion. Pour des modifications ponctuelles de configuration, la différence est négligeable. Pour transférer régulièrement des centaines de fichiers, il est préférable de configurer la méthode SFTP.


Étape 4: configuration globale de sshd_config (pour les utilisateurs avancés)

Cette méthode s’adresse aux administrateurs qui souhaitent configurer le comportement du serveur SSH de manière centralisée. L’idée: remplacer la ligne Subsystem sftp dans /etc/ssh/sshd_config par une construction logique qui détermine automatiquement si l’utilisateur peut exécuter sudo sans mot de passe et lance SFTP avec les privilèges appropriés.

Ce qu’il faut modifier:

Ancienne ligne (généralement):

1Subsystem sftp /usr/lib/openssh/sftp-server

Nouvelle ligne:

1Subsystem sftp sudo -n true && sudo -n /usr/lib/openssh/sftp-server || /usr/lib/openssh/sftp-server

Comment cela fonctionne:

  • sudo -n true vérifie si l’utilisateur peut exécuter sudo sans mot de passe (l’option -n signifie non interactif).
  • Si oui (&&), le serveur est lancé avec les privilèges root.
  • Si non (||), le serveur est lancé avec les privilèges de l’utilisateur standard.

Après modification, redémarrez le service SSH: sudo systemctl restart sshd.

Important: une erreur de syntaxe dans ce fichier vous bloquera complètement l’accès au serveur via SSH. Avant de modifier, assurez-vous d’avoir un second terminal avec une session active. En cas de problème, vous pourrez annuler les modifications. Faites également une sauvegarde: cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.


Spécificités des serveurs cloud (AWS EC2, DigitalOcean)

Les images Linux cloud ont souvent des paramètres sudoers préconfigurés qui peuvent soit simplifier, soit compliquer la tâche.

cloud-init sudo settings in AWS EC2

AWS EC2 (Ubuntu):

L’utilisateur ubuntu sur les images Ubuntu 18.04 et plus récentes dispose souvent déjà des autorisations nécessaires. Vérifiez le fichier /etc/sudoers.d/90-cloud-init-users, qui peut déjà contenir la ligne:

1ubuntu ALL=(ALL) NOPASSWD:ALL

Si elle est présente, vous pouvez sauter l’étape 2. Dans les paramètres WinSCP, utilisez la commande sudo /usr/lib/openssh/sftp-server.

AWS EC2 (Amazon Linux):

Sur Amazon Linux, le chemin vers sftp-server est différent: /usr/libexec/openssh/sftp-server. Une simple erreur de frappe (lib au lieu de libexec) entraînera le code d’erreur 127 (Command not found) et une déconnexion immédiate.

DigitalOcean (Droplets Ubuntu):

Sur les droplets DigitalOcean standard, l’utilisateur root est activé par défaut mais l’accès se fait uniquement par clé SSH. Si vous avez créé un utilisateur séparé, la configuration sudoers est la même que pour un Ubuntu classique.

Conseil général pour le cloud: avant de saisir un chemin dans WinSCP, vérifiez que le fichier existe sur le serveur: ls -la /usr/lib/openssh/sftp-server (ou l’équivalent pour votre distribution).


⁉️🤔 Foire aux questions

Dois-je activer la connexion directe en root pour que WinSCP fonctionne avec sudo?

Non. Tout l’intérêt des méthodes décrites est d’utiliser un compte standard et d’élever temporairement les privilèges via sudo. La connexion directe en root (PermitRootLogin yes) est considérée comme une mauvaise pratique de sécurité: les journaux ne montreront pas quel administrateur a réellement effectué une action.

Pourquoi WinSCP affiche-t-il une erreur «Command not found» après la configuration?

Très probablement, le chemin vers sftp-server est incorrect. Selon les distributions, il se trouve dans /usr/lib/, /usr/lib/openssh/ ou /usr/libexec/openssh/. Le chemin exact peut être vérifié avec la commande cat /etc/ssh/sshd_config | grep Subsystem sur le serveur.

Quel est le niveau de sécurité de NOPASSWD dans sudoers?

C’est un compromis. Un accès complet avec ALL=(ALL) NOPASSWD:ALL réduit la protection: si un attaquant obtient l’accès à l’utilisateur, il obtient également root. Restreindre à une commande spécifique (/usr/lib/openssh/sftp-server) est nettement plus sûr: une personne extérieure ne pourra rien exécuter d’autre que le serveur SFTP via ce compte.

Cela fonctionne-t-il avec d’autres clients comme FileZilla ou Cyberduck?

Le principe est le même, mais la configuration diffère. FileZilla ne dispose pas d’un champ pratique pour la commande du serveur SFTP dans son interface graphique; il faut modifier le fichier de configuration. Cyberduck prend en charge l’option «Serveur SFTP» dans les paramètres de connexion, de manière similaire à WinSCP. WinSCP l’emporte en termes de commodité dans ce scénario précis.

Que faire si les fichiers sont visibles mais non modifiables?

Vérifiez le propriétaire et les permissions avec ls -la sur le serveur. Si vous avez configuré le serveur SFTP via sudo mais que la connexion est retombée sur les permissions standard, cela signifie que sudo a demandé un mot de passe et n’a pas reçu de réponse. Revérifiez la configuration NOPASSWD de l’étape 2.

Puis-je simplement changer le propriétaire des fichiers système pour mon utilisateur?

C’est une solution de contournement «sale». Les services système s’attendent à ce que leurs configurations appartiennent à root. Changer le propriétaire (chown) ou les permissions (chmod) sur les fichiers système peut casser des services. Il est préférable de passer cinq minutes à configurer sudo et de faire les choses correctement.

Quelle est la différence entre SCP et SFTP dans le contexte de sudo?

SCP est simplement une copie sur SSH: il récupère plus facilement le shell, donc pour lui la commande sudo su - dans le champ Shell est suffisante. SFTP est un sous-système à part entière qui s’exécute comme un processus séparé: il nécessite l’astuce du remplacement du binaire. SFTP est plus rapide et plus riche en fonctionnalités; SCP est plus facile à configurer.

Les actions sont-elles visibles dans les journaux lors de l’utilisation de sudo via WinSCP?

Oui. Dans /var/log/auth.log, il y aura une entrée indiquant que l’utilisateur username a élevé ses privilèges via sudo. C’est un avantage: s’il y a plusieurs administrateurs, les journaux montrent exactement qui a effectué l’opération. Avec une connexion directe en root, cette transparence n’existe pas.

Que faire si sudo nécessite un TTY mais que WinSCP n’en fournit pas?

Vérifiez la présence de l’option Defaults requiretty dans /etc/sudoers. Si elle existe, commentez-la (ajoutez # au début de la ligne) ou désactivez-la pour un utilisateur spécifique: Defaults:username !requiretty. Les implémentations modernes de sudo-rs ne prennent pas en charge cette option; le problème ne concerne que les serveurs plus anciens.

Puis-je exécuter SFTP en tant qu’utilisateur différent au lieu de root?

Oui. La commande sudo -u www-data /usr/lib/openssh/sftp-server lancera la session en tant que www-data. C’est pratique lorsque vous devez modifier des fichiers de site web sans toucher aux répertoires système. Les autorisations sudoers pour cela doivent inclure l’option -u: username ALL=(www-data) NOPASSWD: /usr/lib/openssh/sftp-server.


Verdict final: quelle méthode choisir

Pour le travail quotidien sur serveur, la première méthode est optimale: remplacer la commande du serveur SFTP combiné à une configuration NOPASSWD restreinte au seul sftp-server. C’est sécurisé, cela n’affecte pas les paramètres globaux et fonctionne sur toutes les distributions modernes.

  • Si vous avez Ubuntu / Debian et êtes prêt à consacrer 5 minutes à la configuration, utilisez Étape 1 + Étape 2 et ne revenez plus jamais sur le sujet.
  • Si le serveur est ancien et que le chemin vers sftp-server est introuvable, basculez vers SCP (Étape 3): cela tolère les imprécisions et fonctionne pratiquement partout.
  • Si vous administrez une douzaine de serveurs et souhaitez un standard unifié, configurez sshd_config (Étape 4) une fois via Ansible ou manuellement, mais impérativement avec une sauvegarde.

Commencez par une vérification: connectez-vous au serveur via SSH et exécutez cat /etc/ssh/sshd_config | grep Subsystem. En une minute, vous connaîtrez le chemin exact, et la première méthode fonctionnera du premier coup. Quelle méthode de transfert de fichiers utilisez-vous? Partagez dans les commentaires.