Die Frage wurde in einer Linux-Mailingliste beantwortet; Der Vollständigkeit halber poste ich hier eine übersetzte Antwort.
Lösung
Die Lösung besteht darin, nicht beide Optionen default_permissions
zu verwenden und allow_other
(was ich in meinen ursprünglichen Experimenten nicht ausprobiert habe).
Erklärung
Das Problem scheint ganz einfach zu sein. Wenn Sie die Option default_permissions
angeben in fusermount dann wird die Berechtigungssteuerung von fuse durch den Kernel gehandhabt und nicht durch Sicherung . Das bedeutet, dass die uid/gid des REMOTE_USER nicht dem LOCAL_USER zugeordnet werden (sshfs.c IDMAP_NONE). Es funktioniert genauso wie ein einfaches nfs fs ohne Mapping.
Es ist also sinnvoll, den Zugriff zu verbieten, wenn die uid/gid-Nummern nicht übereinstimmen.
Wenn Sie die Option allow_other
haben dann ist dieses Verzeichnis nur vom lokalen Benutzer mit UID 699 beschreibbar, falls es existiert.
Vom Mann der Sicherung:
'default_permissions'
By default FUSE doesn't check file access permissions, the
filesystem is free to implement its access policy or leave it to
the underlying file access mechanism (e.g. in case of network
filesystems). This option enables permission checking, restricting
access based on file mode. It is usually useful together with the
'allow_other' mount option.
'allow_other'
This option overrides the security measure restricting file access
to the user mounting the filesystem. This option is by default only
allowed to root, but this restriction can be removed with a
(userspace) configuration option.
Führen Sie sshfs nicht mit sudo aus. Wenn Sie das tun, geht ssh davon aus, dass das Dateisystem root gehört. Führen Sie es als Sie selbst aus, dann können Sie in die Dateien schreiben.
Klarstellung
Wenn Sie ohne sudo laufen, müssen Sie in Ihrem eigenen Verzeichnis mounten, da Sie wahrscheinlich nicht in /mnt schreiben können. Hier ist also ein Beispiel für die Verwendung von sshfs, nachdem Sie user_allow_other zu /etc/fuse.conf hinzugefügt haben:
$ cd # make sure you are in home directory
$ mkdir mnt # create empty directory
$ sshfs server.com: mnt # mount my home directory on server.com on ./mnt
$ ls mnt
[contents of home directory on server]
$ touch mnt/new_file # no problem creating a new file
$ fusermount -u mnt # unmount file system
$ rmdir mnt
Ein möglicher Grund dafür – einer, auf den ich stieß – war, dass ich keinen freien Speicherplatz mehr auf der Festplatte hatte, die ich gemountet hatte.