Umbau auf Pure-FTPd mit PureDB Virtual Users und Passwort-Dialog
- Komplett auf Pure-FTPd umgestellt (weg von vsftpd) - PureDB virtuelle Benutzer: jeder User sieht nur seine Freigaben - Per-User Bind-Mounts mit Read-Only/Read-Write Durchsetzung - Passwort-Dialog beim Anlegen neuer FTP-Benutzer - Change-Password UI: Dropdown + Button zum Passwort ändern - Setup-Kommando für automatische Pure-FTPd Einrichtung - Anonymous-Checkbox entfernt (nur authentifizierte User) - sudoers-Fix: $SUDO_USER statt $USER bei sudo-Ausführung - openssl passwd statt pure-pw stdin für GUI-Kompatibilität Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -9,80 +9,63 @@ Ein KDE Dolphin Properties-Dialog Plugin zum Erstellen und Verwalten von FTP-Fre
|
||||
- **FTP-Tab** in Dolphins Ordner-Eigenschaften (Rechtsklick → Eigenschaften)
|
||||
- Freigabe per Checkbox aktivieren/deaktivieren
|
||||
- Freigabename konfigurierbar (Standard = Ordnername)
|
||||
- Anonymen Zugang erlauben
|
||||
- Berechtigungen pro Benutzer: Read Only / Read-Write
|
||||
- Nutzt das Helper-Script `dolphin-ftp-share` — **kein Root nötig!**
|
||||
- Erkennt bestehende Freigaben und lädt deren Einstellungen
|
||||
- **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
|
||||
|
||||
- Ein FTP-Server (z.B. `vsftpd`)
|
||||
- Pure-FTPd als FTP-Server
|
||||
- Das Helper-Script `dolphin-ftp-share` im PATH
|
||||
- Build-Dependencies (siehe unten)
|
||||
|
||||
### FTP-Server installieren (vsftpd)
|
||||
## Einrichtung
|
||||
|
||||
### 1. Pure-FTPd installieren
|
||||
|
||||
```bash
|
||||
sudo apt install vsftpd
|
||||
sudo apt install pure-ftpd
|
||||
```
|
||||
|
||||
### vsftpd konfigurieren
|
||||
|
||||
In `/etc/vsftpd.conf`:
|
||||
|
||||
```ini
|
||||
listen=YES
|
||||
anonymous_enable=YES
|
||||
local_enable=YES
|
||||
write_enable=YES
|
||||
anon_root=/home/DEIN_USER/.local/share/dolphin-ftp-root
|
||||
local_root=/home/DEIN_USER/.local/share/dolphin-ftp-root
|
||||
chroot_local_user=YES
|
||||
allow_writeable_chroot=YES
|
||||
pasv_enable=NO
|
||||
port_enable=YES
|
||||
connect_from_port_20=YES
|
||||
|
||||
# Logging
|
||||
xferlog_enable=YES
|
||||
xferlog_std_format=NO
|
||||
log_ftp_protocol=YES
|
||||
vsftpd_log_file=/var/log/vsftpd.log
|
||||
```
|
||||
|
||||
Danach: `sudo systemctl restart vsftpd`
|
||||
|
||||
### Logdatei
|
||||
|
||||
vsftpd schreibt alle FTP-Aktivitäten (Logins, Uploads, Downloads, Fehler) in `/var/log/vsftpd.log`.
|
||||
|
||||
```bash
|
||||
# Logs live verfolgen:
|
||||
sudo tail -f /var/log/vsftpd.log
|
||||
```
|
||||
|
||||
### Helper-Script installieren
|
||||
### 2. Helper-Script installieren
|
||||
|
||||
```bash
|
||||
sudo cp scripts/dolphin-ftp-share /usr/local/bin/
|
||||
sudo chmod +x /usr/local/bin/dolphin-ftp-share
|
||||
```
|
||||
|
||||
### sudo für Bind-Mounts erlauben
|
||||
### 3. Automatisches Setup
|
||||
|
||||
Das Helper-Script nutzt `sudo mount --bind` und `sudo umount`, um Ordner in das FTP-Root einzubinden (Symlinks funktionieren nicht in vsftpd's chroot-Umgebung).
|
||||
|
||||
Damit das ohne Passwort-Eingabe funktioniert:
|
||||
Das Setup konfiguriert Pure-FTPd komplett und erstellt die sudoers-Regel:
|
||||
|
||||
```bash
|
||||
sudo visudo -f /etc/sudoers.d/dolphin-ftp-share
|
||||
sudo dolphin-ftp-share setup
|
||||
```
|
||||
|
||||
Folgendes eintragen (DEIN_USER ersetzen):
|
||||
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 setzen
|
||||
|
||||
FTP-Benutzer werden beim ersten Freigeben automatisch erstellt (Standard-Passwort = Benutzername). Passwort ändern:
|
||||
|
||||
```bash
|
||||
dolphin-ftp-share passwd <benutzername> <neues-passwort>
|
||||
```
|
||||
DEIN_USER ALL=(root) NOPASSWD: /usr/bin/mount --bind *
|
||||
DEIN_USER ALL=(root) NOPASSWD: /usr/bin/umount /home/DEIN_USER/.local/share/dolphin-ftp-root/*
|
||||
|
||||
### Logging
|
||||
|
||||
Pure-FTPd loggt über syslog:
|
||||
|
||||
```bash
|
||||
# Logs live verfolgen:
|
||||
sudo tail -f /var/log/syslog | grep pure-ftpd
|
||||
```
|
||||
|
||||
## Versionen
|
||||
@@ -165,8 +148,12 @@ sudo rm /usr/lib/x86_64-linux-gnu/qt5/plugins/kf5/propertiesdialog/ftpshareplugi
|
||||
# KF6
|
||||
sudo rm /usr/lib/x86_64-linux-gnu/qt6/plugins/kf6/propertiesdialog/ftpshareplugin.so
|
||||
|
||||
# Helper-Script
|
||||
# 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
|
||||
@@ -196,28 +183,31 @@ kde-dolphin-ftp-sharing-tab/
|
||||
|
||||
## Wie es funktioniert
|
||||
|
||||
Das Plugin nutzt das Helper-Script `dolphin-ftp-share`:
|
||||
1. **Rechtsklick auf Ordner → Eigenschaften → FTP-Tab**
|
||||
2. Freigabe aktivieren, Berechtigungen pro Benutzer setzen (Read Only / Read-Write)
|
||||
3. Beim Anwenden ruft das Plugin `dolphin-ftp-share add` auf
|
||||
4. 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)
|
||||
5. **Jeder FTP-Benutzer sieht nur seine freigegebenen Ordner** — durch Chroot auf sein persönliches FTP-Root
|
||||
|
||||
- `dolphin-ftp-share add <name> <path> <anonymous> <acl>` — Freigabe erstellen
|
||||
- `dolphin-ftp-share delete <name>` — Freigabe löschen
|
||||
- `dolphin-ftp-share info` — bestehende Freigaben auflisten
|
||||
### Kommandos
|
||||
|
||||
Das Script speichert Freigabe-Konfigurationen in `~/.local/share/dolphin-ftp-shares/` und erstellt Bind-Mounts in `~/.local/share/dolphin-ftp-root/`. Der FTP-Server (z.B. vsftpd) dient dieses Root-Verzeichnis aus.
|
||||
|
||||
### Konfigurationsformat
|
||||
|
||||
Jede Freigabe wird als `.conf`-Datei gespeichert:
|
||||
|
||||
```ini
|
||||
path=/pfad/zum/ordner
|
||||
anonymous=y
|
||||
user_acl=user1:rw,user2:ro
|
||||
```
|
||||
| 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 |
|
||||
|
||||
|
||||
Reference in New Issue
Block a user