delta-x8 schriebNun die Frage, wie kann ich das hinbekommen, dass rw-Berechtigungen bestehen?
Die Ursache dieses Problems ist dann das chroot.
Bei OpenSSH (andere sshd's kenne ich nicht) ist es zwingend erforderlich, wenn die Option des chroot's verwendet werden soll, daß das chroot/jail-Verzeichnis eben dem User root gehört und den Modus 755 hat.
Alle andern Modi/Ownerships bringen im Log des sshd-Servers dann den Fehler:
"sshd[123456]: fatal: bad ownership or modes for chroot directory "/home/foo""
Diese Bedingung verhindert dann allerdings ein RW-Recht des sftp-Users in diesem Verzeichnis.
Das Hauptanwendegebiet von (s)ftp und chroot besteht wohl darin, unprivilegierten Usern einen lesenden Zugriff auf daten zu ermöglichen *und* sie dabei von der (Verzeichnis-)Struktur des darunterliegenden Systems zu isolieren.
Wenn es jetzt um RW-Möglichkeiten und - wie bei dir - um privilegierte User mit eigenem $HOME (was als chroot dienen soll) geht, dann bist du auf einige Einschränkungen angewiesen.
a) Das jeweilige $HOME der User (also z.B. /home/foo) muß root gehören. Also statt:
foo:foo muß es zwingend root:foo sein.
Bei den Modi funktionieren zwei: 755 und 750
Für $HOMEs dürfte 750 die "bessere" Wahl sein, also keine Rechte für "Others".
Zwingend ist allerdings die 5/r-x bei der Gruppe.
Und das ist auch der Grund, warum du im / des chroot's (also /home/foo) kein Schreibrecht als User/Gruppenmitglied hast über sftp.
//Edit: Durch diesen Zwang "kastrierst" du die jeweiligen $HOMES der User natürlich, d.h. kein User kann in seinem $HOME in der obersten Ebene mehr Daten schreiben/verändern oder Verzeichnisse anlegen/löschen etc. Das ist IMHO eine große Einschränkung. Ich würde für User mit (s)ftp-Zugang auf keinen Fall die $HOMES verwenden wenn diese User noch anderweitig "normal" am/mit dem System arbeiten sollen.
Selbst eine Idee wie: ChrootDir %h/Upload funktioniert nicht, wenn /home/foo weiterhin foo gehört und nur Upload darin root mit 755, da der sshd bei chroot prüft, ob der *ganze* Pfad dem root-User gehört.
b) Schreibrechte hast du allerdings in Unterverzeichnissen, auf die der User über Eigentümer oder Gruppenmitgliedschaft effektiv Zugriff hat.
RW-Arbeiten in /home/foo geht also nicht, aber in /home/foo/austausch/ z.B. dann schon, wenn foo der Eigentümer ist oder über Gruppenrechte rankommt.
D.h. die User, die über sftp zugreifen, verlieren ihre Rechte in der "Wurzel" ihres $HOME-Verzeichnisses (da der Eigentümer ja nun root ist), behalten aber ihre Rechte in Verzeichnissen unterhalb.
Ich habe das getestet mit einem User foo (/home/foo) und eben in der sshd_config bei ChrootDirectory %h
Jeweils mit Konsolen-sftp als auch über caja, beides funktioniert wie gewollt: Der User ist per chroot "eingesperrt", rw-Zugriff kann nur in Unterverzeichnissen stattfinden.
Nemo oder andere Filemanager habe ich nicht installiert wg. Abhängigkeiten. Keine Ahnung, warum und ob diese bei richtiger Konfiguration/Anwendung ein anderes Verhalten an den Tag legen. Selbst der sftp-Client im mc(MidnightCommander) kommt damit zurecht.