Otázka byla zodpovězena v linuxovém mailing listu; Pro úplnost zde zveřejňuji přeloženou odpověď.
Řešení
Řešením je nepoužívat obě možnosti default_permissions
a allow_other
(což jsem ve svých původních experimentech nezkoušel).
Vysvětlení
Problém se zdá být docela jednoduchý. Když dáte možnost default_permissions
v fusermount pak kontrolu oprávnění fuser uchycení pojistky řeší kernel a ne pomocí pojistky . To znamená, že uid/gid REMOTE_USER nejsou mapovány na LOCAL_USER (sshfs.c IDMAP_NONE). Funguje to stejně jako jednoduchý nfs fs bez mapování.
Takže má smysl zakázat přístup, pokud se čísla uid/gid neshodují.
Pokud máte možnost allow_other
pak do tohoto adresáře může zapisovat pouze místní uživatel s uid 699, pokud existuje.
Od pojistkového muže:
'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.
Nespouštějte sshfs pomocí sudo. Pokud to uděláte, ssh bude považovat souborový systém za root. Spusťte jej jako vy, pak budete moci zapisovat do souborů.
vysvětlení
Když běžíte bez sudo, musíte se připojit na svůj vlastní adresář, protože pravděpodobně nemůžete zapisovat do /mnt. Zde je příklad, jak používat sshfs, jakmile přidáte user_allow_other do /etc/fuse.conf:
$ 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
Jedním z možných důvodů - jedním, který jsem zasáhl - bylo to, že na disku, který jsem připojil, už nebylo volné místo.