- FTP-Tab: Server Configuration mit Active/Passive Radio-Buttons - Passive Mode: Port-Range konfigurierbar (Default 30000-31000) - Apply-Button startet Pure-FTPd automatisch neu - Helper-Script: serverconfig show/active/passive Kommandos - sudoers: systemctl restart, tee und rm für Pure-FTPd Config - README: Port-Forwarding Anleitung für Windows (netsh) und Linux (socat/iptables) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| kf5 | ||
| kf6 | ||
| scripts | ||
| README.md | ||
| screenshot.png | ||
README.md
Dolphin FTP Share Tab
Ein KDE Dolphin Properties-Dialog Plugin zum Erstellen und Verwalten von FTP-Freigaben — direkt über die GUI.
Features
- FTP-Tab in Dolphins Ordner-Eigenschaften (Rechtsklick → Eigenschaften)
- Freigabe per Checkbox aktivieren/deaktivieren
- Freigabename konfigurierbar (Standard = Ordnername)
- Per-User Berechtigungen: Read Only / Read-Write pro Benutzer
- Jeder Benutzer sieht nur seine freigegebenen Ordner per FTP
- Read-Only wird direkt am Dateisystem durchgesetzt (read-only Bind-Mount)
- Automatische Einrichtung mit
dolphin-ftp-share setup
Voraussetzungen
- Pure-FTPd als FTP-Server
- Das Helper-Script
dolphin-ftp-shareim PATH - Build-Dependencies (siehe unten)
Einrichtung
1. Pure-FTPd installieren
sudo apt install pure-ftpd
2. Helper-Script installieren
sudo cp scripts/dolphin-ftp-share /usr/local/bin/
sudo chmod +x /usr/local/bin/dolphin-ftp-share
3. Automatisches Setup
Das Setup konfiguriert Pure-FTPd komplett und erstellt die sudoers-Regel:
sudo dolphin-ftp-share setup
Das macht automatisch:
- Aktiviert PureDB-Authentifizierung (virtuelle FTP-Benutzer)
- Deaktiviert System-Login und anonymen Zugang
- Aktiviert Chroot (jeder sieht nur seine Ordner)
- Erstellt sudoers-Regel für mount/umount/pure-pw
- Aktiviert Logging
- Startet Pure-FTPd neu
4. FTP-Passwörter
FTP-Benutzer werden beim ersten Freigeben automatisch erstellt — das Plugin fragt dabei nach einem Passwort.
Passwort später ändern:
- Im Plugin: FTP-Tab → "FTP Password" → Benutzer auswählen → "Change Password..."
- Per Kommandozeile:
dolphin-ftp-share passwd <benutzername> <neues-passwort>
Logging
Pure-FTPd loggt über syslog:
# Logs live verfolgen:
sudo tail -f /var/log/syslog | grep pure-ftpd
Versionen
| Verzeichnis | Zielplattform | KDE Frameworks | Qt |
|---|---|---|---|
kf5/ |
Debian 12 Bookworm | KF5 | Qt5 |
kf6/ |
Debian 13 Trixie | KF6 | Qt6 |
Der C++ Quellcode ist identisch — nur die CMake-Konfiguration unterscheidet sich.
Build & Installation
Debian 12 (KF5)
Build-Dependencies:
sudo apt install build-essential cmake extra-cmake-modules \
libkf5kio-dev libkf5coreaddons-dev libkf5i18n-dev \
qtbase5-dev
Bauen:
cd kf5
bash build.sh
Installieren:
sudo cp build/bin/ftpshareplugin.so \
/usr/lib/x86_64-linux-gnu/qt5/plugins/kf5/propertiesdialog/
Dolphin neustarten:
killall dolphin; dolphin &
Debian 13 Trixie (KF6)
Build-Dependencies:
sudo apt install build-essential cmake extra-cmake-modules \
libkf6kio-dev libkf6coreaddons-dev libkf6i18n-dev \
qt6-base-dev
Bauen:
cd kf6
bash build.sh
Installieren:
sudo cp build/bin/ftpshareplugin.so \
/usr/lib/x86_64-linux-gnu/qt6/plugins/kf6/propertiesdialog/
Dolphin neustarten:
killall dolphin; dolphin &
Deinstallation
# KF5
sudo rm /usr/lib/x86_64-linux-gnu/qt5/plugins/kf5/propertiesdialog/ftpshareplugin.so
# KF6
sudo rm /usr/lib/x86_64-linux-gnu/qt6/plugins/kf6/propertiesdialog/ftpshareplugin.so
# Helper-Script & sudoers
sudo rm /usr/local/bin/dolphin-ftp-share
sudo rm /etc/sudoers.d/dolphin-ftp-share
# Pure-FTPd (optional)
sudo apt remove pure-ftpd
Projektstruktur
kde-dolphin-ftp-sharing-tab/
├── README.md
├── scripts/
│ └── dolphin-ftp-share # Helper-Script für Share-Verwaltung
├── kf5/ # Debian 12 (KDE Plasma 5)
│ ├── CMakeLists.txt
│ ├── build.sh
│ └── src/
│ ├── CMakeLists.txt
│ ├── ftpshareplugin.json
│ ├── ftpshareplugin.h
│ └── ftpshareplugin.cpp
└── kf6/ # Debian 13 (KDE Plasma 6)
├── CMakeLists.txt
├── build.sh
└── src/
├── CMakeLists.txt
├── ftpshareplugin.json
├── ftpshareplugin.h
└── ftpshareplugin.cpp
Wie es funktioniert
- Rechtsklick auf Ordner → Eigenschaften → FTP-Tab
- Freigabe aktivieren, Berechtigungen pro Benutzer setzen (Read Only / Read-Write)
- Beim Anwenden ruft das Plugin
dolphin-ftp-share addauf - Das Helper-Script:
- Erstellt für jeden Benutzer ein persönliches FTP-Root (
~/.local/share/dolphin-ftp-root/users/<name>/) - Bind-mounted den freigegebenen Ordner dorthin
- Read-Only Freigaben werden als read-only Bind-Mount gemountet
- Erstellt automatisch virtuelle Pure-FTPd-Benutzer (PureDB)
- Erstellt für jeden Benutzer ein persönliches FTP-Root (
- Jeder FTP-Benutzer sieht nur seine freigegebenen Ordner — durch Chroot auf sein persönliches FTP-Root
Kommandos
| Kommando | Beschreibung |
|---|---|
dolphin-ftp-share setup |
Einmalige Pure-FTPd Einrichtung |
dolphin-ftp-share add <name> <path> <acl> |
Freigabe erstellen |
dolphin-ftp-share delete <name> |
Freigabe löschen |
dolphin-ftp-share info |
Bestehende Freigaben auflisten |
dolphin-ftp-share passwd <user> <pass> |
FTP-Passwort ändern |
Berechtigungen
| Level | Beschreibung |
|---|---|
--- |
Kein Zugriff — Ordner ist für diesen Benutzer nicht sichtbar |
ro |
Read Only — nur Download |
rw |
Read-Write — Upload und Download |
Tipps: Port-Forwarding für FTP
Szenario
Ein Gerät (z.B. ein Dokumentenscanner) soll per FTP auf den Server scannen, hat aber keinen direkten Zugang zum Server-Netzwerk (z.B. VPN). Ein Windows- oder Linux-Rechner, der in beiden Netzen hängt, leitet die FTP-Ports weiter.
Scanner ──► Windows/Linux (Port-Forwarding) ──► VPN ──► FTP-Server
Aktiver Modus (empfohlen für Port-Forwarding)
Im aktiven Modus müssen nur 2 Ports weitergeleitet werden: 20 (Daten) und 21 (Steuerung).
Passiver Modus
Im passiven Modus muss zusätzlich die gesamte Port-Range weitergeleitet werden (z.B. 30000-31000). Das ist aufwändiger, aber nötig wenn aktiver Modus nicht funktioniert.
Windows: Port-Forwarding mit netsh
Als Administrator in der Eingabeaufforderung (cmd):
:: Aktiver Modus — Port 21 (Steuerung) und Port 20 (Daten) weiterleiten
netsh interface portproxy add v4tov4 listenport=21 listenaddress=0.0.0.0 connectport=21 connectaddress=<SERVER-VPN-IP>
netsh interface portproxy add v4tov4 listenport=20 listenaddress=0.0.0.0 connectport=20 connectaddress=<SERVER-VPN-IP>
:: Passiver Modus — zusätzlich die Port-Range weiterleiten
:: (PowerShell, da netsh keine Ranges unterstützt)
for ($p=30000; $p -le 31000; $p++) { netsh interface portproxy add v4tov4 listenport=$p listenaddress=0.0.0.0 connectport=$p connectaddress=<SERVER-VPN-IP> }
Windows-Firewall öffnen:
netsh advfirewall firewall add rule name="FTP Active" dir=in action=allow protocol=TCP localport=20,21
:: Für passiven Modus zusätzlich:
netsh advfirewall firewall add rule name="FTP Passive" dir=in action=allow protocol=TCP localport=30000-31000
Port-Forwarding anzeigen / entfernen:
:: Alle Weiterleitungen anzeigen
netsh interface portproxy show all
:: Einzelne Weiterleitung entfernen
netsh interface portproxy delete v4tov4 listenport=21 listenaddress=0.0.0.0
:: Alle Weiterleitungen entfernen
netsh interface portproxy reset
Linux: Port-Forwarding mit iptables oder socat
Variante 1: socat (einfach, gut zum Testen)
# Aktiver Modus
sudo socat TCP-LISTEN:21,fork,reuseaddr TCP:<SERVER-VPN-IP>:21 &
sudo socat TCP-LISTEN:20,fork,reuseaddr TCP:<SERVER-VPN-IP>:20 &
# Passiver Modus — zusätzlich Port-Range
for p in $(seq 30000 31000); do
sudo socat TCP-LISTEN:$p,fork,reuseaddr TCP:<SERVER-VPN-IP>:$p &
done
Variante 2: iptables (performanter, dauerhaft)
# IP-Forwarding aktivieren
sudo sysctl -w net.ipv4.ip_forward=1
# Aktiver Modus
sudo iptables -t nat -A PREROUTING -p tcp --dport 21 -j DNAT --to-destination <SERVER-VPN-IP>:21
sudo iptables -t nat -A PREROUTING -p tcp --dport 20 -j DNAT --to-destination <SERVER-VPN-IP>:20
sudo iptables -t nat -A POSTROUTING -j MASQUERADE
# Passiver Modus — zusätzlich Port-Range
sudo iptables -t nat -A PREROUTING -p tcp --dport 30000:31000 -j DNAT --to-destination <SERVER-VPN-IP>
Dauerhaft speichern:
sudo apt install iptables-persistent
sudo netfilter-persistent save
Lizenz
GPLv2+
