Skip to content

Alles für WordPress, Webentwicklung — und mehr

🔓 Root-Rechte in WinSCP erhalten: sudo für Dateiübertragungen konfigurieren

🔓 Root-Rechte in WinSCP erhalten: sudo für Dateiübertragungen konfigurieren

Sie verbinden sich als regulärer Benutzer mit einem Server, navigieren zu /etc/nginx und erhalten „Permission denied". Konfigurationsdateien, Systemverzeichnisse, Logs: All das ist für ein Konto ohne root-Berechtigungen gesperrt. Und die direkte root-Anmeldung per SSH ist auf den meisten Servern aus Sicherheitsgründen deaktiviert.

WinSCP ist ein komfortabler Dateimanager für Windows, aber standardmäßig arbeitet seine SFTP-Sitzung mit den Berechtigungen des Benutzers, mit dem Sie sich angemeldet haben. Das SFTP-Protokoll kann keine Rechteerweiterung „on the fly" anfordern, wie es ein Terminal kann: Es ist während des Handshakes nicht interaktiv und kann kein Fenster zur Eingabe eines sudo-Passworts anzeigen.

Nachfolgend finden Sie vier funktionierende Methoden, um WinSCP mit Superuser-Rechten auszuführen, von der einfachsten bis zum „Jedi"-Ansatz. Jede wurde unter Ubuntu, Debian und CentOS getestet. Wählen Sie diejenige, die am besten zu Ihrer Infrastruktur passt.

💡 Kurzübersicht:

  • ➡️ Problem: WinSCP gewährt standardmäßig keine root-Rechte, selbst wenn der Benutzer sudo-Berechtigungen hat.
  • Primäre Methode: Ersetzen des SFTP-Server-Startbefehls in den WinSCP-Site-Einstellungen. Schnell und zielgerichtet.
  • 🔄 Alternative: Wechsel zum SCP-Protokoll mit sudo su - als Shell.
  • ⚙️ Erweitert: Bearbeiten der sshd_config auf dem Server. Eine globale Lösung für alle Verbindungen.

Schritt 1: SFTP-Server-Startbefehl (die primäre Methode)

Der gängigste und eleganteste Weg, um in WinSCP root-Rechte zu erhalten, besteht darin, den SFTP-Server von Anfang an als Superuser zu starten. Dies geschieht durch Ersetzen des Startbefehls in den Einstellungen für eine bestimmte Verbindung. Der Server selbst muss nicht neu konfiguriert werden; die Lösung funktioniert verbindungsbezogen.

SFTP-Server-Einstellungsfenster in WinSCP

Schritt-für-Schritt-Anleitung:

  • Starten Sie WinSCP und öffnen Sie die Site-Verwaltung.
  • Wählen Sie die gewünschte Verbindung und klicken Sie auf Bearbeiten.
  • Klicken Sie unten im Fenster auf Erweitert….
  • Gehen Sie im linken Menü zu Umgebung → SFTP.
  • Ersetzen Sie im Feld „SFTP-Server" den Eintrag „Standard" durch folgenden Befehl:
1sudo /usr/lib/openssh/sftp-server

Bei älteren Distributionen kann der Pfad abweichen. Typische sftp-server-Speicherorte:

Distribution

Pfad zum sftp-server

Ubuntu / Debian (aktuell)

/usr/lib/openssh/sftp-server

Ubuntu / Debian (älter)

/usr/lib/sftp-server

CentOS / RHEL / Fedora

/usr/libexec/openssh/sftp-server

Amazon Linux

/usr/libexec/openssh/sftp-server

Den genauen Pfad auf Ihrem Server können Sie per Terminal prüfen: cat /etc/ssh/sshd_config | grep Subsystem. Dieser Befehl zeigt, welche Binärdatei der SSH-Server selbst verwendet.

Das System startet das Dateiübertragungs-Subsystem sofort mit root-Rechten. Damit dies jedoch fehlerfrei funktioniert, muss Ihr Benutzer sudo ohne Passwortabfrage ausführen können. Dies wird im nächsten Schritt behandelt.


Schritt 2: sudoers konfigurieren (sudo ohne Passwort erlauben)

Da der SFTP-Handshake nicht interaktiv ist, hat WinSCP keine Möglichkeit, ein Fenster zur Eingabe eines sudo-Passworts anzuzeigen. Der Server beendet die Verbindung einfach mit einem Fehler, wenn ein Passwort angefordert wird. Die Lösung besteht darin, dem Benutzer über die Datei /etc/sudoers die Erlaubnis zu erteilen, den erforderlichen Befehl ohne Passwort auszuführen.

Bearbeiten der sudoers-Datei mit visudo

Was zu tun ist:

  • Verbinden Sie sich per SSH mit dem Server (mit PuTTY oder dem integrierten Terminal von WinSCP).
  • Öffnen Sie den sudoers-Editor mit sudo visudo. Bearbeiten Sie /etc/sudoers niemals direkt: Ein Syntaxfehler sperrt sudo für das gesamte System, und visudo validiert die Syntax vor dem Speichern.
  • Fügen Sie die folgende Zeile am Ende der Datei hinzu (ersetzen Sie username durch Ihren Benutzernamen):
1username ALL=(ALL) NOPASSWD: ALL

Dies gewährt dem Benutzer vollständigen Zugriff ohne Passwort. Eine sicherere Option ist, die Berechtigung nur auf den SFTP-Server-Startbefehl zu beschränken:

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

Wenn der Server mehrere Administratoren mit unterschiedlichen Logins hat, reduziert eine enge Konfiguration das Risiko: Selbst wenn ein Konto kompromittiert wird, erhält der Angreifer keinen root-Zugriff auf alles, sondern nur die Möglichkeit, SFTP zu starten.

Hinweis: Die Option requiretty in sudoers muss deaktiviert sein. Moderne sudo-rs-Implementierungen unterstützen sie standardmäßig nicht, aber auf älteren Servern sollten Sie die Zeile Defaults requiretty prüfen und auskommentieren, falls vorhanden.


Schritt 3: Wechsel zum SCP-Protokoll (eine schnelle Alternative)

Wenn Sie sich nicht mit Pfaden zum sftp-server befassen möchten, können Sie das Datenübertragungsprotokoll selbst wechseln. WinSCP unterstützt SCP, ein älteres, aber zuverlässiges Protokoll, das Shell-Einstellungen leichter übernimmt.

Konfiguration von SCP-Protokoll und Shell in WinSCP

So wechseln Sie:

  • Ändern Sie in den WinSCP-Sitzungseinstellungen das Dateiprotokoll von SFTP auf SCP.
  • Gehen Sie zu Erweitert → SCP/Shell.
  • Geben Sie im Feld Shell ein: sudo su -

Beim Verbinden führt WinSCP diesen Befehl sofort nach der Anmeldung aus und schaltet die Sitzung in den root-Modus.

SFTP

SCP

Root-Rechte

Durch Ersetzen der Server-Binärdatei

Durch Ersetzen der Shell (sudo su -)

Geschwindigkeit

Höher, besonders bei vielen kleinen Dateien

Geringer

Wiederaufnahme bei Verbindungsabbruch

Ja

Nein

Zuverlässigkeit auf älteren Systemen

Erfordert exakten Pfad zur Binärdatei

Funktioniert „out of the box"

Sicherheit

NOPASSWD kann auf einen Befehl beschränkt werden

Erfordert vollständiges passwortloses sudo

Die SCP-Methode ist ein Kompromiss. Sie ist einfacher zu konfigurieren, verliert aber gegenüber SFTP an Geschwindigkeit und Wiederherstellungsfähigkeit nach einer Unterbrechung. Für einmalige Konfigurationsänderungen ist der Unterschied vernachlässigbar. Für die regelmäßige Übertragung hunderter Dateien ist es besser, die SFTP-Methode zu konfigurieren.


Schritt 4: Globale sshd_config-Konfiguration (für fortgeschrittene Benutzer)

Diese Methode ist für Administratoren gedacht, die das Verhalten des SSH-Servers zentral konfigurieren möchten. Die Idee: Ersetzen Sie die Zeile Subsystem sftp in /etc/ssh/sshd_config durch ein logisches Konstrukt, das automatisch erkennt, ob der Benutzer sudo ohne Passwort ausführen kann, und SFTP mit den entsprechenden Rechten startet.

Was zu ändern ist:

Alte Zeile (typischerweise):

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

Neue Zeile:

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

So funktioniert es:

  • sudo -n true prüft, ob der Benutzer sudo ohne Passwort ausführen kann (der Schalter -n bedeutet nicht-interaktiv).
  • Wenn ja (&&), startet der Server mit root-Rechten.
  • Wenn nein (||), startet der Server mit regulären Benutzerrechten.

Starten Sie nach der Bearbeitung den SSH-Dienst neu: sudo systemctl restart sshd.

Wichtig: Ein Syntaxfehler in dieser Datei sperrt Sie vollständig vom SSH-Zugang zum Server aus. Stellen Sie vor der Bearbeitung sicher, dass Sie ein zweites Terminal mit einer aktiven Sitzung haben. Wenn etwas schiefgeht, können Sie die Änderungen rückgängig machen. Erstellen Sie außerdem ein Backup: cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.


Besonderheiten bei Cloud-Servern (AWS EC2, DigitalOcean)

Cloud-Linux-Images haben oft vorkonfigurierte sudoers-Einstellungen, die die Aufgabe entweder vereinfachen oder erschweren können.

cloud-init sudo-Einstellungen in AWS EC2

AWS EC2 (Ubuntu):

Der Benutzer ubuntu auf Ubuntu 18.04 und neueren Images hat oft bereits die erforderlichen Berechtigungen. Prüfen Sie die Datei /etc/sudoers.d/90-cloud-init-users, die möglicherweise bereits die Zeile enthält:

1ubuntu ALL=(ALL) NOPASSWD:ALL

Wenn sie vorhanden ist, können Sie Schritt 2 überspringen. Verwenden Sie in den WinSCP-Einstellungen den Befehl sudo /usr/lib/openssh/sftp-server.

AWS EC2 (Amazon Linux):

Bei Amazon Linux ist der Pfad zum sftp-server anders: /usr/libexec/openssh/sftp-server. Ein einzelner Buchstabenfehler (lib statt libexec) führt zu Fehlercode 127 (Command not found) und einem sofortigen Verbindungsabbruch.

DigitalOcean (Ubuntu Droplets):

Bei Standard-DigitalOcean-Droplets ist der root-Benutzer standardmäßig aktiviert, der Zugriff erfolgt jedoch nur per SSH-Schlüssel. Wenn Sie einen separaten Benutzer erstellt haben, ist die sudoers-Konfiguration dieselbe wie bei regulärem Ubuntu.

Allgemeiner Rat für die Cloud: Bevor Sie einen Pfad in WinSCP eingeben, überprüfen Sie, ob die Datei auf dem Server existiert: ls -la /usr/lib/openssh/sftp-server (oder das Äquivalent für Ihre Distribution).


⁉️🤔 Häufig gestellte Fragen

Muss ich die direkte root-Anmeldung aktivieren, damit WinSCP mit sudo funktioniert?

Nein. Der Sinn der beschriebenen Methoden besteht gerade darin, ein reguläres Konto zu verwenden und die Rechte temporär über sudo zu erweitern. Die direkte root-Anmeldung (PermitRootLogin yes) gilt als schlechte Sicherheitspraxis: Die Logs zeigen nicht, welcher Administrator tatsächlich eine Aktion durchgeführt hat.

Warum zeigt WinSCP nach der Konfiguration einen „Command not found"-Fehler an?

Höchstwahrscheinlich ist der Pfad zum sftp-server falsch. In verschiedenen Distributionen befindet er sich in /usr/lib/, /usr/lib/openssh/ oder /usr/libexec/openssh/. Der genaue Pfad kann mit dem Befehl cat /etc/ssh/sshd_config | grep Subsystem auf dem Server überprüft werden.

Wie sicher ist NOPASSWD in sudoers?

Es ist ein Kompromiss. Vollzugriff mit ALL=(ALL) NOPASSWD:ALL reduziert den Schutz: Wenn ein Angreifer Zugriff auf den Benutzer erlangt, erhält er auch root. Die Beschränkung auf einen bestimmten Befehl (/usr/lib/openssh/sftp-server) ist deutlich sicherer: Ein Außenstehender kann über dieses Konto nichts anderes als den SFTP-Server ausführen.

Funktioniert das auch mit anderen Clients wie FileZilla oder Cyberduck?

Das Prinzip ist dasselbe, aber die Konfiguration unterscheidet sich. FileZilla hat kein komfortables Feld für den SFTP-Server-Befehl in seiner grafischen Oberfläche; die Bearbeitung der Konfigurationsdatei ist erforderlich. Cyberduck unterstützt die Option „SFTP Server" in den Verbindungseinstellungen, ähnlich wie WinSCP. WinSCP punktet in diesem Szenario besonders durch seine Benutzerfreundlichkeit.

Was tun, wenn Dateien sichtbar, aber nicht bearbeitbar sind?

Überprüfen Sie Besitzer und Berechtigungen mit ls -la auf dem Server. Wenn Sie den SFTP-Server über sudo konfiguriert haben, die Verbindung aber auf reguläre Berechtigungen zurückgefallen ist, bedeutet das, dass sudo ein Passwort angefordert und keine Antwort erhalten hat. Überprüfen Sie die NOPASSWD-Konfiguration aus Schritt 2 erneut.

Kann ich einfach den Besitzer von Systemdateien auf meinen Benutzer ändern?

Das ist ein „unsauberer" Workaround. Systemdienste erwarten, dass ihre Konfigurationen root gehören. Das Ändern des Besitzers (chown) oder der Berechtigungen (chmod) an Systemdateien kann Dienste beschädigen. Es ist besser, fünf Minuten in die sudo-Konfiguration zu investieren und es ordentlich zu machen.

Was ist der Unterschied zwischen SCP und SFTP im Kontext von sudo?

SCP ist einfaches Kopieren über SSH: Es übernimmt die Shell leichter, daher reicht dafür der Befehl sudo su - im Shell-Feld aus. SFTP ist ein vollwertiges Subsystem, das als separater Prozess läuft: Es erfordert den Trick mit dem Ersetzen der Binärdatei. SFTP ist schneller und funktionsreicher; SCP ist einfacher zu konfigurieren.

Sind Aktionen in den Logs sichtbar, wenn sudo über WinSCP verwendet wird?

Ja. In /var/log/auth.log gibt es einen Eintrag, der zeigt, dass Benutzer username die Rechte über sudo erweitert hat. Das ist ein Pluspunkt: Wenn es mehrere Administratoren gibt, zeigen die Logs genau, wer die Operation durchgeführt hat. Bei direkter root-Anmeldung gibt es diese Transparenz nicht.

Was tun, wenn sudo ein TTY benötigt, WinSCP aber keines bereitstellt?

Überprüfen Sie /etc/sudoers auf die Option Defaults requiretty. Wenn sie existiert, kommentieren Sie sie aus (fügen Sie # am Zeilenanfang hinzu) oder deaktivieren Sie sie für einen bestimmten Benutzer: Defaults:username !requiretty. Moderne sudo-rs-Implementierungen unterstützen diese Option nicht; das Problem ist nur für ältere Server relevant.

Kann ich SFTP als ein anderer Benutzer anstelle von root ausführen?

Ja. Der Befehl sudo -u www-data /usr/lib/openssh/sftp-server startet die Sitzung als www-data. Dies ist praktisch, wenn Sie Website-Dateien bearbeiten müssen, ohne Systemverzeichnisse zu berühren. Die sudoers-Berechtigungen dafür müssen die Option -u enthalten: username ALL=(www-data) NOPASSWD: /usr/lib/openssh/sftp-server.


Abschließendes Urteil: Welche Methode soll man wählen?

Für die tägliche Serverarbeit ist die erste Methode optimal: Ersetzen des SFTP-Server-Befehls kombiniert mit einer engen NOPASSWD-Konfiguration nur für sftp-server. Sie ist sicher, beeinflusst keine globalen Einstellungen und funktioniert auf allen modernen Distributionen.

  • Wenn Sie Ubuntu / Debian haben und bereit sind, 5 Minuten in die Konfiguration zu investieren, verwenden Sie Schritt 1 + Schritt 2 und das Thema ist dauerhaft erledigt.
  • Wenn der Server alt ist und der Pfad zum sftp-server nicht gefunden werden kann, wechseln Sie zu SCP (Schritt 3): Es toleriert Ungenauigkeiten und funktioniert praktisch überall.
  • Wenn Sie ein Dutzend Server administrieren und einen einheitlichen Standard wünschen, konfigurieren Sie sshd_config (Schritt 4) einmalig per Ansible oder manuell, aber auf jeden Fall mit einem Backup.

Beginnen Sie mit einer Prüfung: Melden Sie sich per SSH am Server an und führen Sie cat /etc/ssh/sshd_config | grep Subsystem aus. In einer Minute kennen Sie den genauen Pfad, und die erste Methode funktioniert auf Anhieb. Welche Dateiübertragungsmethode verwenden Sie? Teilen Sie es in den Kommentaren mit.